做了一个MACD柱线背离的指标,写了一点在程序中做背离需要用到的函数。
当然指标做出来,可以用来指导交易。
知道这种方式用来做交易到底能不能行合适不合适有两种方法。
第一就是人工复盘。
把指标往图面上一挂,按照自己以往的交易习惯一根根k线去复盘。
还有一种就是把它做成EA,让电脑帮咱们做大量繁重的统计工作。
今天就用之前说的MACD柱线背离,来尝试做一个简单的EA,看看它到底能不能挣钱。
先整理一下小EA的思路:
首先需要指标缓冲区提供一个背离发生的信号,分为顶背离和底背离。
发生顶背离以后空单进场,止损设为离上一个高点两倍的距离,止盈设为止损的1.5倍距离。
发生底背离后多单进场,止损设为离上一个低点两倍距离,止盈设为止损的1.5倍距离。
因为是一个小EA,方便起见把盈亏比先强制设为1.5倍。
-----------------------------------------------------------------------------------------------------
首先要修改之前做好的指标。
新添加两个缓冲区,来储存背离信号。
double dingbeili[];
double dibeili[];
SetIndexBuffer(0,dingbeili,INDICATOR_DATA);
SetIndexBuffer(1,dibeili,INDICATOR_DATA);
之前做好东西因为用不到了,简便起见对指标稍作修改。
DrawPriceTrendLine(time[l],time[counted],high[l],high[counted],Red,STYLE_SOLID);
替换为 dingbeili[l]=0.01;
将之前划线的句子完全替换为指标数组的填充就可以了。
填充好以后,指标出来的样子就是这样:
红柱和绿色大柱分别代表了顶背离和底背离。
然后写EA交易主体:
sj.getrates(rate,50);
CopyBuffer(beili_h,0,0,50,dingbeili);
复制顶背离缓冲到顶背离数组
CopyBuffer(beili_h,1,0,50,dibeili);
复制底背离缓冲到底背离数组
CopyBuffer(beili_h,2,0,50,zhuzi);
复制柱线到柱子数组
if(dingbeili[2]>0&&selltime!=rate[0].time)
因为计算方式原因,背离的发生需要3根柱才能确立,所以指标制作时候把背离信号放在2根柱以前的位置,取得的时候也应该是两根柱以前。
上句话的意思是如果背离发生,后边是一个一根柱子只开一单的控制方法。
{
int sl=MathAbs(rate[2].high-rate[0].close)/Point();
计算粗糙的止损位置。虽然背离的位置不一定是之前的高点,不过大多数情况下差不了多少。就简单的直接取之前的高点和当前的价格之间的差值作为止损的基础值。
if(jy.sellplus(Symbol(),1,2*sl,3*sl,0,magic)>0)
下卖单,止损、止盈,下单手数简单的定位1万美金1手。
{
selltime=rate[0].time;
一根柱下一单控制。
}
}
if(zhuzi[1]<0&&zhuzi[0]>0)
如果柱子上穿0轴,强制止盈或止损。
{
jy.closeallsell(Symbol(),magic);
}
----------------------------------------------------------------------------------------------
if(dibeili[2]<0&&buytime!=rate[0].time)
{
int sl=MathAbs(rate[2].low-rate[0].close)/Point();
if(jy.buyplus(Symbol(),0.1,2*sl,3*sl,0,magic)>0)
{
buytime=rate[0].time;
}
}
if(zhuzi[1]>0&&zhuzi[0]<0)
{
jy.closeallbuy(Symbol(),magic);
}
底背离也是同样做法,就不多解释了。
那么这样一个简单粗糙的MACD背离小EA就做好了。测试如下图。
当然也有很多止损单子。
看看测试报告:
从2019年9月3日到2020年12月6日1小时欧美测试结果来看:
1万美金盈利是3498美金。其他不再赘述。
最后说两句,对于一个如此简单粗暴的EA来说,总体效果还是满意的,这之后还有巨大的空间。
从结果来看MACD柱线背离是有一定价值的,用MACD交易的朋友可以多研究研究、把它利用到交易系统中来。