分享

[转载]MT4自动计算并画出趋势线

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

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

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多