内容简介
- 简介
- 1。输入参数、deinit()函数和初始化变量声明
- 2。搜索最近的分形
- 三。确定分形价格和时间
- 4。创建对象并编辑属性以重新绘制趋势线
- 5。检查历史数据加载
- 6。突破趋势线信号,推送通知
- 7。趋势线在交易中的实际应用
- 总结
简介
最近,我一直在思考如何使用趋势线。如何选择趋势线的绘制点和绘制精度一直是一个问题。我决定用分形作为基础。
我的主要工作是分析市场,花些时间做生意。你不能只画一条长时间的趋势线,你应该能把极点画成15分钟的图表。其原因是长时间帧上的分形时间并不总是等于m15上的极值点的时间。简而言之,自动化在这里可以派上用场。我开始用mql5编写代码并将其迁移到mql4,因为我需要在metatrader 4上运行该程序。
在本文中,我将介绍针对MQL4和MQL5中的问题的解决方案。虽然本文对这两种语言进行了比较,但并没有对MQL4和MQL5的执行效率进行比较。当然,我也意识到可能有比我更好的解决方案。本文对使用MQL4或MQL5编写脚本的初学者很有帮助,特别是那些计划使用分形和趋势线的初学者。
1。输入参数、deinit()函数和初始化变量声明
我使用以下变量作为参数:
input color Resistance_Color=Red; // 设置阻力线颜色 input ENUM_LINE_STYLE Resistance_Style; // 设置阻力线类型 input int Resistance_Width=1; // 设置阻力线宽度 input color Support_Color=Red; // 设置支撑线颜色 input ENUM_LINE_STYLE Support_Style; // 设置支撑线类型 input int Support_Width=1; // 设置支撑线宽度
对于MQL4和MQL5,这些变量是相同的。
在MQL5中,我们必须首先创建指标:
//--- iFractals 指标句柄 int Fractal; //+------------------------------------------------------------------+ //| EA初始化函数 | //+------------------------------------------------------------------+ int OnInit() { //--- 获取iFractals指标句柄 Fractal=iFractals(Symbol(),PERIOD_D1); //--- return(INIT_SUCCEEDED); }
由于程序将绘制图形对象,因此需要同时从图标中删除EA。
void OnDeinit(const int reason) { ObjectDelete(0,"TL_Resistance"); ObjectDelete(0,"TL_Support"); }
画两条直线(支撑线和阻力线)需要四点。要确定这一点,你需要知道时间和价格。
坐标的确定顺序如下:首先,我们找到极点所在的K线,然后我们就可以确定极点的价格和时间。
在ontick()函数中声明变量:
MQL4 |
---|
//-声明变量int n,上分形_1,上分形_2,下分形_1,下分形_2; |
MQL5 |
---|
//-声明变量int n,上分形_1,上分形_2,下分形_1,下分形_2;/-声明缓存数组双分形向下[],分形向上[];上分形_1,上分形_2,下分形_1,下分形_2,用于写入ifractal索引值; |
首先,我刚刚声明了用于存储分形的k-cue引用变量。
在MQL4中:
- n-使用for-loop运算符查找最近分形所需的变量;
- 上分形_1,上分形_2,下分形_1,下分形_2-这些变量将存储最近两个极点对应的K线索,最高或最低价格(用于确定分形)
在MQL5中,我们引入了其他变量:
- fractaldown[],fractalup[];—声明存储ifractals索引缓存值的双类型数组;
- 接下来,双类型变量:upfractal_1、upfractal_2、lowfractal_1、lowfractal_2。他们将存储电线杆的价格。
2。搜索最近的分形
为了找到形成最近分形的k线,我们使用for循环操作符。
我们来确定前两条k线的索引,这两条k线对应于第一和第二上分形。
MQL4 |
---|
//—找到最近的上分式k线索引for(n=0;n<;(bars-1);n++)for(n=0;n<;(bars-1);n++)if(ifractals(null,1440,mode_pper,n)!=空)break(upperfractal)=n+1///—找到第二近处的上分形k线索引for(n=upperfractal+1;n<(bars-1);n++)if(ifactals(空,1440,模式upper,n)!=空)中断上分形 |
MQL5 |
---|
//首先,我们需要将分形索引缓存值写入数组//-使用缓存值填充数组copyBuffer(分形,0,时间电流(),条形(符号(),周期_d1,周期_d1,分形);copyBuffer(分形,1,时间电流(),条形(符号(),iod _d1),iod _d1,分形向下);//-索引simILAR to the Time Series;&nbbsp;&nstarabbsp;&arysetrabsp;&arysetasseries(fractalup,true); ; ;arraysetasseries(fractaldown,true);///–接下去我们使用for循环来查找第一个上分型for(n=0;n<;bars(symbol(),period_d1);n++)n值非空,跳出循环体if(fractalup[n]!=empty_value)将第一个分式的价格写入变量upfractal_1=fractalup[n];///–将其索引写入变量upperfractal_1=n;//–查找第二个上分式for(n=upperfractal_1+1;n<;bars(symbol(),period_d1);n++)&如果(fractalup[n]!=empty_value)//如果值为非空,跳出循环体/–将第二个分型的价格格式写入变量upfractal_2=fractalup[n];/–将第二个分型的索引写入变量upfractal_2=n; |
在这里,我清楚地揭示了mql5和mql4之间的区别——使用捕获时间序列的函数。
在mql4中,我立即开始寻找k-cue导致形成分形,但在mql5中,我定义了fractalup[]和fractaldown[]数组来存储通过i fractals index和copybuffer()函数获得的上下分形的值。接下来,我使用arraysetasseries()函数将这些数组设置为时间序列。
在mql4和mql5中,我们只得到分形对应k线的指数,而在mql5中,我们使用copybuffer()函数得到分形指数及其相应的价格。
同样,我们发现了两个最近较低的分形:
MQL4 |
---|
//—找到最近的下分k线形索引for(n=0;n<;(bars-1);n++)for(n=0;n<;(bars-1);n++)if(ifractals(null,1440,mode_lower,n)!=空) ; ; ; ; ; ; ; ; ; ; ; ; ; ;///-找到第二近的下分形k线索引for(n=LowerFractal U 1+1;n<;(bars-1;n++)for(n=LowerFractal U 1+1;n<;(bars-1;n++)if(ifractals(空,1440,模式下,n)if(ifraactals(空,1440,1440,模式下,n)if(空,1440,n),N)ifraactals(空,1440(空,1440,1440,1440,模式下,n)n)n),n)if(你看!=空)中断 |
MQL5 |
---|
//—找到下分型的值//—查找最近的下分型for(n=0;n<;bars(symbol(),period_d1);n++)for(n=0;n<;bars(symbol(),period_d1);n++)如果值非空,跳出循环体=empty_value)break//–将第一个分型的价格写入变量lowfractal_1=fractaldown[n],//–将其索引写入变量lowerfractal_1=n;//–查找第二个下分型for(n=lowerfractal_1+1;n<;bars(symbol(),period_d1);n++)&如果(fracta downdowndown[n]!==空的_值)break;//////-lt;/////-lt;////-lt;;lowbsp;lowfractal fractta;lower fractal u 2=n; |
如您所见,mql4和mql5代码非常相似。语法上只有一些细微的差别。
三。确定分形价格和时间
为了绘制趋势线,我们需要确定分形的时间和价格。当然,在MQL4中,我们可以简单地使用high[]和low[]来预先定义时间序列变量和ITIME()函数,但是我们还需要获得更精确的坐标,以确保绘制趋势线的准确性。
图1-2显示了h4和m15时间帧之间的极时间差。
图1。在h4图表上显示极时间。
图2。M15上的极时间
我得出结论,M15的极点精度对我来说足够了。
一般来说,mql4和mql5的极点确定原理基本相同,但细节略有不同:
MQL4 | MQL5 |
---|---|
确定大时间范围内极点的时间值;使用找到的时间值,并使用ibarshift()函数确定极限值所在的k线在较小时间范围内的指数;由于24小时可替换为96个15分钟k线,因此我们使用ihigh()、ilow()、itime()、array maximum()和array minimum()。函数在96个元素中查找极值(最高和最低)。 | 在大的时间范围内确定极点的时间值;使用找到的时间值确定第二天线路的开始时间。我们将在copyhigh()、copylow()和copytime()函数中使用该值;在15分钟的时间范围内声明并填充时间和价格数组。array maximum()和array minimum()函数用于查找极点的最低和最高价格以及时间值。nbsp; |
每个步骤的代码如下:
MQL4 |
---|
/ /步骤1。确定大时间框架下的极点时间:///-确定分形时间datetime upfracttaltime_1=ITIME(空,1440,上分形_1);datetime upfracttaltime_2=ITIME(空,1440,上分形_2);time update fractal time_1=ITIME time time time time time time time time time_1=ITIME(空,1440,上分形时间时间_1=ITIME(n ;日期时间低分形时间_2=ITIME(空,1440,下分形_2; |
/ /步骤2。 ;& ;/////-查找分形指数//////-在m115上查找分形指数int upperfractal_1_m15=ibarshift(空,15,upfractalTime_1,upfractalTime_1,真);&&nupuppupfractal sp;int frapperfractal_2_m15=barfractal shift=barishift(空,15,15,15,真)bsp;int lower fractal_1_m15=ibarshift(null,15,lowfrac)taltime_1,true;int lower fractal_2_m15=ibarshift(null,15,low fractal time_2,true); |
/ /步骤3。使用数组在m15上查找极点:/-使用数组查找极点/-为循环声明i变量int i;/-1。首先,寻找低极点/–3.1以找到最近的低极点/–声明存储k-cue报价的数组int lower_m15[96];声明存储价格的数组double werprice_1 15[96];/–开始循环:(i=0;i=95;i++)&///—用k线索引值填充数组填写价格矩阵填充数组填写k线索引值填充数组组填写价格价格填充数组填写K线索引值填充数组填写价格矩阵=ilow(null,15,下分形L_1_M15-i);下_1_M15[i]=low(null,15,下分形L_1_M15-i);nbsp;///////—确定低分形L u 1_M15[i]=ilow(null,15,下分形L_1_M15-i);;;; ;;;;;;;;;;;/////////—确定低分形L-1_1_M15[i]=ilu 1_M15[i]=ilow(null E数组中的st price i int lowest price_1_m15=arrayminimum(lorprise_1_m15,whole_ary,0);///—————————确定数组中的最低价格,&nbbar_1_m15=lower_1_m15[lowest price_1_m15];确定最低价格k行所在的时间&bsp;datetime lTowestBartime U 1 U M15=ITime(空,15,低U 1 U M15[低价格U 1 U M15]);///–3.2查询找第二极值点int lowU 2 U M15[96];双低价格U 2 U M15[96];for(i=0;i<;=95;i+++)n bsp;&n bsp;&U M15=U 1 U M15=ITime(空,15,低U 1 U M15[低价格U 1 U M15];////–3.2查询第二极值点int lowu 2 U M15[96;&n bsp;int lowu M15[96;&n bsp;双低价格U 2 U M15[96];for(组BSP Lower_2_M15[i]=Lowerfractal_2_M15-i; ;////–使用价格格式填写填充数据组Lowerprice_2_M15[i]=ilow(null,15,Lowerfractal_2_M15-i); ;; ;/////-确定数字组中的最低价int lowestprice_2_M15=arrayminimum(Lowerprice_2_2低erprice(Lowerprice_2_2 2_2(Lowerprice_2低erprie_2_2_2_2_M15-i)=ilow(=ilow(null,15,15,Lowerfractal__m15,整个_数组,0);///–nbsp;int lowestbar_2_m15=lower_2_m15[lowest price_2_m15];////—确定最低价k行所在的时间;datetime lowestbarbartime_2_m15=itime(空,15,lower_2_m15[lowewestprice_2_mprice_m15]);////———————————————————3.3以查找最近的最高价上限1_m15[96];双上限价格1_m15[96];for(i=0;i<;=95;i++=95;i++)for(i=0;i=0;i<;=95;i+++)//–用K线索引值填充数组upu 1_m15[i]=上限分形1_m15-i;////–用价格格填充数组组价格填填填数组组注意upperprice_1_m15[i]=i高(空,15,向上,15,向上,& ;; ;;;////////-确定数组中的最高价格;////////- ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;;M15=Barper_1_upper_1_barm1_upper_barm15[upstprice_1_m15];/-确定最高价k行所在的时间 ; ;日期时间高点stbartime_1_m15=i time(空,15,上_1_M15[最高价_1_m15]];//–3.4查询第二高值极值点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点(i)的=0;i=95;i++)用k线索引值填充数组u-u pper m15[i]==upperfractal l_m15-i&最高价格_2_m15[iHigh[i]=iull,15,15,分形bsp; |
MQL5 |
---|
/ /步骤1。确定大时间框架下的极时间:////-声明大时间框架k行对应时间数组的存储日期时间upfractalTime_1[],lowfractalTime_1[],upfractalTime_2[],lowfractalTime_2[];///-确定大时间框架下的分形时间copytime(符号(),period_d1,perfraperl_1,1,1,upfractalTime_1,1,upfractalTime_1,upfractalTime_1,&upfractalTime_1,&a.复制时间(符号(),周期_d1,下分形_1,1,低分形时间_1);复制时间(符号(),周期_d1,上分形_2,1,上分形时间_2);(符号(),iod_1,下分形_2,上分形时间_2); |
/ /步骤2。确定次日行的开始时间///——确定次日行的开始时间(copyhigh()、copylow()、copytime()和copytime()datetime upfractaltime_1_15=upfractaltime_1_15=upfractaltime_1[0]+86400;datetime upfractaltime time time_2_2_15=upfractaltime_2[0]+86400;&时间-时间-时间-时间-时间-分形时间-1[0]+8640 0;日期时间-低分形时间-2=低分形时间-2[0]+86400; |
/ /步骤3。在15分钟的时间框架下声明和填充时间和价格数组:////—声明存储最大和最小价格值的数组:///—声明存储最大和最小价格值的数组—声明存储最大和最小价格值的数组—双高_1_15[]、低_1_15[]、高_2_15[]、高_15[]、低W U 2[]、低U 2 U 15]、低U 15[]、低U 2 U 15[]];/////-用copyhigh()和copylow(1 U 15,高U 1 U15);Copyhi高(符号(),句点M15,上分形时间U 2[0],上分形时间U 2 U 15,高U 2 U 15);Copy低(符号(),句点M15,低分形时间U 1[0],低分形时间U 1 U 15,低U 1 U 1 U 15,低U 1 U 1 U 1 U 15,低U 1 U 1 U 1 U 15,低_15);copylow(symbol(),period_m15,lowfrac低分形时间U 2 U 2 U 15,低U 2 U 15;///—声明存储对应极端点所在k线时间时间的数据组:日期时间高U 1 U 15 U 15 U时间[]、高U 2 U 15 U时间[]、低U 1 U 15 U时间[]、低U 1 U 15 U时间[]、低U 2 U 15 U时间[];/////—填充数据组:coptime(符号(),周期U M15,upfract时间U 1[0],upfr分形时间时间U 1 U 1 U 1 U 1 U 1 U 1,upfr分形时间时间U 1 U 1 U 1 U 1 _15,高1_15_时间);复制时间(symbol(),句点M15,upfractalTime_2[0],upfractalTime_2_15,high_2_15_time);复制时间(symbol(),句点M15,lowfr actalTime_1[0],low fractalTime_1_15,low_1_15_time,复制时间(symbol(),句点M15,low fractal time_2[0],low fractal time_2_15,low_2_15_time); |
/ /步骤4。使用array maximum()和array minimum()函数确定与极点相对应的最低和最高价格以及时间值//–以确定最高和最低价格和时间int max_m15_1=array maximum(high_1_15,0,96);int max_m15_2=array maximum(high_2_15,0,0,96);int max_ m15_2=阵列最大值(高_2_15,0,0,0,96);1_15,0,96);int m in_m15_2=阵列最小值(低_2_15,0,96); |
最后,我们确定以下趋势线的坐标:
1。支持线:
MQL4 | MQL5 |
---|---|
第一个时间坐标-最低价_2_m15;第一个价格坐标-最低价_2_m15;第二个时间坐标-最低价_m15;第二个价格坐标-最低价_m15[最低价_m15]。 | 第一个时间坐标-低_2_15_时间[分_m15_2];第一个价格坐标-低_2_15[分_m15_2];第二个时间坐标-低_1_15_时间[分_m15_1];第二个价格坐标-低_1_15[分_m15_1]。 |
2。对于电阻线:
MQL4 | MQL5 |
---|---|
第一个时间坐标-最高的BarTime_2_m15;第一个价格坐标-最高的Price_2_m15[最高的价格_2_m15];第二个时间坐标-最高的BarTime_1_m15;第二个价格坐标-最高的Price_1_m15[最高的价格_m15]。 | 第一个时间坐标-高_2_15_时间[最大_m15_2];第一个价格坐标-高_2_15[最大_m15_2];第二个时间坐标-高_1_15_时间[最大_m15_1];第二个价格坐标-高_1_15[最大_m15_1]。 |
4。创建对象并编辑属性以重新绘制趋势线
现在,当我们知道直线的坐标时,我们只需要创建图形对象:
MQL4 |
---|
/创建支持热线objeccreate(0,“tl_支持”,obj_趋势,0,LowestBartime_2_M15,Lowerprice_2_M15[低价格u 2_M15],-创建支持热线objeccreat(0,“tl_支持”,obj_趋势,0,LowestBartime_2_M15,LowestBartime_1_M15,Lowerprice_1_M15[低价格u 1_M15]);&objecset(“tl tl u支持”,obu支持”,obu支持,obu支持,obu 2_M15[低价格_2 _M15[低价格_2 _M15],, ;&jprop_color,支持_color); ;objectset(“tl_-support”,objprop_-style,support_-style); ;objectset(“tl_-support”,objprop_-width,support_-width);/–创建阻力线objectcreate(0,“tl_-resistance”,obj_-trend,0,highestbartime_2_M15,upperprice_2_M15[highestprice_2_M15],nbsP.P.H.第15部分,最高价格_1 _M15[最高价格_1 _M15];NBSPSP;对象集(“TL电阻”,OBJPROP _颜色,OBJPROP _颜色,电阻_颜色电阻_颜色电阻_颜色电阻_颜色颜色颜色颜色);对象集对象集(“TL电阻”,电阻,OBROP阻力,obrop_obbrop_uu(tl_阻力,objprop_宽度,阻力_宽度); |
MQL5 |
---|
/创建支持热线对象创建(0,“tl_支持”,obj_趋势,0,低_2_15_15_时间[min_M15_2]、低_2_15[min_M15_2]、低_1_15_时间[min_M15_1]、低_1_15[min_M15_1]); ; ; ;objecset整数(0,“tl_支持”,objprop_ray_右,真,真,0,“tl tl tl支持”,objprop_Ray_右,真,真,0,低_2_15_15_15_15_15_15[min_M1_-support“,objprop_-color,支持_-color);objectsetinteger(0,”tl_-support“,objprop_-style,支持_-style);objectsetinteinte整数(0,“tl_支持”,objprop_-wid,支持_-widwidwid);///—创建阻力线objeccreat(0,“tl_阻力”,obj_trend,0,high_2_15_时间[最大值15_M15_2],高_2_15[最大值15_M15_2],高_1_15_时间[最大值15_M15_1],高_1_15[最大值15_M15_15_15_15[最大值15_M15_M15_15_15_15_1 1 1 1);objectsetinteger(0,“tl_resistance”,objprop_ray_r正确,正确,objectsetinteger(0,“tl_resistance”,objprop_color,resistance_color);objprop_style,resistance_style,objectsetinteger(0,“tl_resistance”,jprop_dth,resistance_width); |
到目前为止,我已经创建了所需的行,并根据输入参数确定了它们的参数。
现在我们要画出趋势线。
当市场条件发生变化时,例如,当出现新的极点时,我们需要移除现有线路:
MQL4 |
---|
//重新绘制支持行//-将支持行的时间坐标写入变量& ;datetime tl_timelow2=objectget(“tl_support”,objprop_time2);&&&&&&& ;datetime tl_timelow1=getobject(“tl_support”,objprop_obobobrop_time1);///////———————如果行的坐标与当前值不匹配ENT坐标和如果TL’TimeLoeLow2!=time lolowtime lowm15<;tl_time low1!=lowest bartime _2_m15)objectDelete(0,“tl_support”);删除直线;/—重绘支撑线//—将阻力线的时间坐标写入变量中中,datetime tl_timeup2=objectget(“tl_resistance”,objprop_time2);nbsp;datetim e tl_timeup1=objectget(“tl_resistance”,objprop_time1);//——如果线的坐标不符合当前坐标if(tl_timeup2!=highestbartime_1_m15&;tl_timeup1!=highestbartime_2_m15)移动直线objectDelete(0,“tl_resistance”);nb sp_ |
MQL5 |
---|
//重新绘制支持行//-将支持行的时间坐标写入变量中datetime tl_timelow2=(datetime)objectgetinteger(0,“tl_support”,objprop_time,0);datetime tl_timelow1=(datetime)objectinger getinteger(0,“tl_support support”,jpoboboboboboboboboboprop_time,1)=(datetime integer);///-如果行的坐标与当前坐标不匹配,则返回tl_timelow2!=low_2_15_time[min]_m15_2]&;<;tl_timelow1!=low_1_15_time[min_m15_1])datetime tl_timeup2=(datetime)ob jectgetinteger(0,“tl_support”);移动直线e“,objprop_time,0);datetime tl_timeup1=(datetime)objectgetinteger(0,“tl_resistance”,objprop_time,1);/—如果线的坐标不符合当前坐标 ;if(tl_timeup2!=高u 15 u时间[最大u m15 u 2]&;<;tl u时间1!=high_1_15_time[max_m15_1])nb sp;/-删除直线(0,’tl_resistance’); |
5。检查历史数据加载
在测试中,我发现这些线条并不总是画得正确。
起初我认为代码中可能有错误,或者我的解决方案中可能有问题。但后来我意识到问题是由于在较小的时间框架(如M15)上未完全加载历史数据。为了提醒用户注意这种情况,我决定添加额外的代码来检查m15上的k行是否足够。
为了实现这一目标,我在MQL4中使用了ibarshift()函数,这也是我在“确定分形的价格和时间值”中使用的函数。
如果没有找到K线,ibarshift()函数返回-1。因此,我们发布以下警告:
MQL4 |
---|
/——检查历史数据加载情况情况///——如果至少有一个形状对应的K线在M15上没有找到 ; ;if(upperfral分数U 1_M15=-1 124124;;pperfr分形U 2 U M15=-1 ; ; ; ;124124124\124\124124\124124\\124\警报(“加载的历史I不足以进行正确的工作!”; |
在mql5中,我使用bars()函数,如果未生成时序数据,则返回空值:
nbsp; |
---|
//检查历史数据加载//–1.确定特定时间范围内的k线数量int high_m15_1=bars(symbol(),period_m15,upfractalTime_1[0],upfractalTime_1_15);&&& ;high_m15_2=bars(symbol(),iod_m15,upfractalTime_2[0]],upfractalTime_2_15);low time_1[0],,upfractalTime_2 time_15;;upfractalTime_M15_1=条形(符号(),周期_M15,低分形时间_1[0],低分形时间_1_15);int low_M15_2=条形(符号(),周期_M15,低分形时间_2[0],低分形时间_2_15);//–2.检查用于正确绘制线段的历史数据是否足够//——如果至少有一个没有找到if(high_m15_1==0_high_m15_2==0_low_m15_1==0_low_m15_2==0)low_m15_2==0)alert(“The loaded history is insufficient for the correct work!”; |
6。突破趋势线信号,推送通知
为了完成图表,我决定在趋势线断开时添加一个提示信号。趋势线是在每天的时间框架内由极点绘制的,但为了更早地识别突破点,h4图表上的k线必须接近趋势线的下方或上方。
一般来说,我们可以将这个过程分为三个步骤:
- 根据家庭和趋势线确定K线价格。
- 确定价格突破趋势线的条件;
- 发送突破通知。
MQL4 |
---|
/ / 1。获取趋势线的价格参数////——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————shishishishishishishishishishishishishishishishishishishishishishishishishishishishishiclose_h4;/-确定趋势线的h4图价格双价电阻h4=ObjectGetValueByshift(“tl_电阻”,bar_close_h4);/-确定h4图上趋势线的价格双价支持rt_h4=getValueByshift(“tl_支持”,bar_关闭_h4); |
/ / 2。突破趋势线的条件/–突破支撑线bool breakdown=(price_close_h4<;price_support_h4);/-突破阻力线bool breakup=(price_close_h4>;price_resistance_h4); |
/ / 3。发送发送推送消息if(breakdown==true)/–每4小时只发送一次通知int sleepminu tes=240静态int lasttime=0(timecurrent()gt;lasttime+sleepminu tes*60)发送通知(symbol()+“价格突破了支持线”);如果(breakup==true)如果(timecurrent()gt;lasttime+sleepments*60),每4小时只发送一次通知sp=timecurrent();发送通知(symbol()+“价格突破阻力线”); |
MQL5 |
---|
/ / 1。获取趋势线的价格参数double close[];copyclose(symbol(),period彡h4,timecurrent(),10,close);////-设置数组索引顺序arrayasseries(close,set true);////-—daime彡time[];copyclobol(),period彡h4,时间电流(),10,关闭时间;///-设置数组索引顺序顺序数组设置资产(关闭时间,真);///-双价格支持_h4=objectGetValueByTime(0,’tl_支持’,关闭时间[1];双价格_阻力_h4=objectGetueByTime(0,’tl_阻力’,关闭时间[1]); |
/ / 2。突破趋势线的条件:bool breakdown=(close[1]<;price_support_h4);bool breakup=(close[1]>;price_resistance_h4); |
/ / 3。发送发送发送消息if(breakdown==true)//–每4小时只发送一次通知int sleepments=240静态int lasttime=0(timecurrent()gt;lasttime+sleepments*6 0) ;lasttime=(int)timecurrent();sendNotification(symbol()+“价格突破了支持线”);if(breakup==true)if(timecurrent()gt;lasttime+sleepminutes*60)=0 nbs p;&lasttime=(int)timecurrent();sendNotification(symbol()+“价格突破阻力线”);_ |
为了确定突破点,我使用了mql4中的objectGetValueByshift()函数和mql5中的objectGetValueByTime()函数。
我只能将1设置为objectGetValueByshift()的参数,而不是bar_close_h4,但我决定首先确定h4图上的索引号。我使用这个论坛帖子中介绍的方法来限制发送的消息数量。非常感谢这篇文章的作者。
7。趋势线在交易中的实际应用
最简单的方法是取得突破,等到你退后。
理想情况下,会出现以下情况:
图3。突破趋势线
 ;您可以使用您的想象力来尝试确定形状,例如技术分析形状、三角形。
图4。三角形模式
上图中较小时间框架下的趋势线没有说明。
总结
我希望这对你有帮助。这篇文章是针对像我这样的商业初级开发人员的。
我从写这篇文章中学到了很多东西:首先,我开始对代码进行更多的评论;其次,首先,我使用了更笨拙和繁琐的方法来查找极点,但随后我慢慢地使用了更简单的解决方案,如本文所示。
谢谢您。如果您有任何问题,请联系我。
本文由MetaQuotes Software Corp.翻译自俄语原文
,网址为https://www.mql5.com/ru/articles/1201。
MyFxtop迈投(www.myfxtop.com)-靠谱的外汇跟单社区,免费跟随高手做交易!
免责声明:本文系转载自网络,如有侵犯,请联系我们立即删除,另:本文仅代表作者个人观点,与迈投财经(www.myfxtop.cn)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。