在EA交易中,如何新增一个抛物线指标。给EA设定一个下单条件,也就是抛物线指标转向的时候,下单,去掉之前的挂上就买入一单。
具体是,抛物线从k线下面转到k线上面去之后,第二根k线开盘价卖出,如图中标记5处。
反之,抛物线从k线上面转到k线下面去之后,第二根k线开盘价买入,如图中标记1处。
一、引入抛物线指标函数iSAR函数
这个函数有5个参数,前面4个看字面意思就知道其意思了,其中最后一个比较难以理解,涉及到MT4平台的K线位移。
什么是K线位移呢?
MT4平台,对于k线图上每一个k线,都设置了个位置编号,这个编号就是位移。从右往左,从0开始。
0号k线的开盘价就是Open[0];
1号K线的最高价就是High[1]。
如果要获取3号k线对应的抛物线的值就是iSAR(NULL,0,0.02,0.2,3)。
二、根据上面的知识,我们现在来写一个函数Signal(),用来定义本EA的信号,返回值为1表示买入信号,返回值为-1表示卖出信号。
三、现在,我们来开始编程写EA了。
1.在程序OnTick()函数的开始,我们定义两个变量,用来记录EA的持仓状态。顺便也定义一个变量,从信号函数中返回信号值。
int buys=0;//多单持仓有几笔
int sells=0;//空单持仓有几笔
int signal=signal();
2.然后通过for循环遍历持仓单,分别找到多单持仓几笔和空单持仓几笔,并分别赋值给变量buys和sells。
3.然后加入开仓代码,当多单持仓数为0并且买入信号出现的时候,下多单;反之,当空单持仓数为0并且卖出信号出现的时候,下空单。
4.下单解决了,再就是加入平仓代码。
平仓代码加入到之前的for循环里面去,这样,整个程序在每次tick里就只有一次遍历订单,让程序运行更加高效。
为了节省篇幅,顺便把修改订单止损止盈也加入进去。
这里面需要注意一点的就是,多单的止损价是开盘价-点数*Point,多单止盈价是开盘价+点数*Point;
反之,空单的止损价是开盘价+点数*Point,空单的止盈价是开盘价-点数*Point。
四、到此,整个程序就完全修改好了,用历史数据测试下,正常交易。
完整代码如下:
Delta Air pilots vote to authorize strike By Reuters
Asia stocks edge up as investors eye Fed rate decision By Reuters
Read more
