分享

MT4自动计算并画出趋势线

 警世沉稳 2019-09-27

MT4自动计算并画出趋势线

MT4自动计算并画出趋势线 通过MT4平台编程,进行自动计算并画出趋势线,其方法如下所示。下面先介绍几个特殊函数,才能正确进行相关编程。

一、 基本函数介绍:

1、 窗口函数:WindowBarsPerChart(); //屏幕可见K线总数解释:该函数返回窗口中可见的K线数目总数,我们在画趋势线时,所选择的K线范围,一定属于在可见的范围之中,否则,难以知道其中的数据,也就不可能去画相应的趋势线了。因此,画趋势线的范围,是由窗口中可见K线数为基础条件的。因此,计算时,首先要获得窗口中的可见K线数。

2、时间序列图表数据:iHighest(string symbol,int timeframe,int type,void count,voidstart); //一组K线最高价的序号参数说明:string symbol:选定的货币对,NULL、symbol()均代表当前图表中的货币对int timeframe:所选时间周期,0代表当前图表中的时间周期inttype:所选数组的类型,如MODE_HIGH(最高价)、MODE_LOW(最低价)、MODE_OPEN(开盘价)、MODE_CLOSE(收盘价)、MODE_VOLUME(成交量)、MODE_TIME(交易开始时间)void count:一组K线的计算根数void start:开始K线的序号最高价=High[ iHight()];iLowest(string symbol,int timeframe,int type,void count,voidstart); //一组K线最低价的序号参数说明:与以上函数相对应,使用方法相同。最低价=Low[iLowest()];

3、数组函数:ArrayMaximum(double array[],void count,void start); //数组最大值位置参数说明:double array[]://要求搜索的数组void count://该数组的项目数void start://开始搜索的序号最大值=array[

ArrayMaximum()];ArrayMinimum(double array[],void count,void start); //数组最小值位置参数说明:以上面最大值位置相对应,使用方法相同。最小值=array[ArrayMinimum()];ArraySize(object array[ ]); //计算数组项目数——相当于易语言中'取数组成员数()'命令参数说明:object array[ ]://需要计算的数组

4、自定义——画线函数:由于MQL4中并没有内置画线函数,要实现画直线,则必须自己编制,即自定义函数。如下:Int LineNo=0

Void iDrawLine(int myFirstTime,double myFirstPrice,intmySecondTime,double mySecondPrice)

{

StringmyObjectName='Line'+LineNo;

ObjectCreate(myObjectName,OBJ_TREND,0,myFirstTime,myFirstPrice,mySecondTime,mySecondPrice);

ObjectSet(myObjectName,OBJPROP_COLOR,Green);

ObjectSet(myObjectName,OBJPROP_STYLE,STYLE_DOT);

ObjectSet(myObjectName,OBJPROP_WIDTH,1);

ObjectSet(myObjectName,OBJPROP_BACK,false);

ObjectSet(myObjectName,OBJPROP_RAY,false);I++}

例:iDrawLine(13,close[13],6,close[6]);//从第13根K线的收盘价,到第6根K线的收盘价之间画一个绿色虚线。

二、趋势线的数学原理:

如下所示,如何计算趋势线呢?下面进行讨论。

MT4自动计算并画出趋势线

计算原理如下:

1、第一步:计算K线数目首先,计算出该图表(屏幕)上的K线总数,使用窗口函数中'WindowBarsPerChart()'进行计算。即:K线总数(M):M= WindowBarsPerChart();2、 第二步:求该K线中的最高价位置与最低价位置根据K线数目,使用时间序列图表数据函数,求出最高价、最低位位置。即:

最低价位置(A):A= iLowest(NULL,0,MODE_LOW,M,0);

最高价位置(B):B= iHighest(NULL,0,MODE_HIGH,M,0);

3、 第三步:判断趋势是上升或者下降根据最高价位置与最低价位置进行判断大小,数值大者,距当前K线越远;数值小者,则离当前K线距离越近。当:A>B时,代表市场处于先低后高走势,属于上升趋势;当:A<>

4、第四步:根据上升或下降趋势计算基线(校正计算)根据上升与下降趋结构,分别计算出相应的基准线。A)当市场=上升时,计算波谷(最低价)基线:低点位置X1:X1=A;低点的低价Y1:Y1=Low[A];高点位置X2:X2=B;高点的低价Y2:Y2=Low[B];

MT4自动计算并画出趋势线

B)当市场=下跌时,计算波峰(最高价)基线:高点位置X1:X1=B;高点的高价Y1:Y1=High[B];低点位置X2:X2=A;低点的高价Y2:Y2=High[A];

MT4自动计算并画出趋势线

说明:一般来说,直接用高点的高价与低点的低价进行连线也可,其产生的误差不是很大,也可使用。但根据'道氏理论'关于趋势的定义,以及市场主力的成本线与利润线而言,成本是控制的基础,而利润则随市而变。因此,成本线更重要于利润线。其中:上升行情中,波谷值连线是主力的成本线,波峰连线是主力的利润线;在空头行情中,波峰则是空头主力的成本线,而波谷则是空头主力的利润线。而且,在市场的趋势线理论中,凡上升趋势中下破趋势线,则市场反转;反之亦然。因此,成本线是市场的根本。为了最大程度精确计算趋势线,因此,需要进行校正处理。并且,这种校正处理并不会给编程带来较大的麻烦,也不会导致计算机内存的占用。因此,这里进行校正处理。如下图所示:5、第五步:根据基线,计算最高价与最低价区间内的价差,并存入数组P[ ]中。峰谷区间长度(L):L=MathAbs(B-A); //取绝对值,即相距L根K线A)当为上升趋势:直线斜率(R):R=(Low[B]-Low[A])/L; //两点之间的斜率计算每根K线最低价与趋势基线之移动差值(P[ ]):差值(P):P[N]= (Low[B]-N*R)- Low[N+A]其中:N=1-L计算数组内的最大值位置X3:X3=ArrayMaximum(P[],L,0)+B;第2谷值价格(最低价):Y3=Low[X3];

MT4自动计算并画出趋势线

画上升趋势线:myFirstTime:第1点时间——X1=AmyFirstPrice:第1点价格——Y1=Low[A]mySecondTime:第2点时间——X2=X3mySecondPrice:第2点价格——Y2=Low[X3] iDrawLine(A,Low[A],X3,Low[X3]);

B)当为下跌趋势:直线斜率(R):R=(High[B]-High[A])/L; //两点之间的斜率计算每根K线最低价与趋势基线之移动差值:差值(P):P[N]=High[N+A]-(High[A]+N*R)其中:N=1-L计算数组内的最大值位置X3:X3=ArrayMaximum(P[],L,0)+B;第2峰值价格(最高价):Y3=High[X3];

MT4自动计算并画出趋势线

画下跌趋势线:myFirstTime:第1点时间——X1=BmyFirstPrice:第1点价格——Y1=High[B]mySecondTime:第2点时间——X2=X3mySecondPrice:第2点价格——Y2=High[X3] iDrawLine(B,High[B],X3,High[X3]);6、说明:在计算每根K线的价格与趋势基线的差,按数学应该求它们的垂直线,从而进行比较。根据直角三角形原理,我们知道在这区间内的所有K线均属同一斜率,因此,使用垂直线与斜边线进行相对比较,其结果是一样的,这一点,可以直接通过三角函数可以加以证明得到。直角边=斜边*SinA,它们仅是存在一个变小的系数,对于数值比较大小,则形成相互约分的结果。因此,为了简化计算,这里直接采用该根K线的最低价与直线相比较,计算出差值即可进行准确比较。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多