学写的EA,策略原理参考《5分钟动量交易系统》 新评论 13983411990 2022.11.15 08:49 《5分钟动量交易系统》是关天豪、魏强斌所著的一本书,介绍了一种交易系统。 最近学写MQL4,就想将该系统写成EA自己来测试一下。于是按照书中的策略,为便于编程,略作修改如下: 1、进场条件1:汇价上穿21周期EMA 2、进场条件2:汇价上穿21周期EMA的同时(约5根MACD柱线内),MACD柱线上穿0轴,即开多单。 进场方式采用同时开2张单子,第1张设置止盈,第2张不设止盈。 3、出场:(1)设置保守性初始止损出场:进场点对应EMA均线值下方250点。该版系统采用该方式设置初始止损,止损默认250点。书中还有激进性初始止损点:该上涨波段起点处,即近期低点之下一点。(EA暂未采用) (2)第1张如止盈,则将第2张单子的止损点修改为开仓价位,然后开始移动止损,默认回撤250点止损。 有部分代码是参考了赵越老师的课程代码。 测试了一下,在有趋势行情时还是可以盈利的。 下面把做多的代码贴上来,请高手指点一下还存在哪些问题。 #property strict int magic=2022111; input double 下单量=0.01; input int ema=21; input int buyN=5; //入场触发条件有效K线根数 input int chushistop=250; //初始止损点数(书中为200点) input int chushitp=300; //初始止盈点数(书中等于初始止损点数) input double TrailingStop = 250; //移动止损点数 double EMA_0,EMA_1,EMA_2,MACD1,MACD2,MACD3; double buychushi_tp=0; //初始止损变量 datetime buytime=0; //防止同一根bar反复开仓变量 datetime modifytime=0; //防止同一根bar反复修改止损变量 int CountL=0; //触发条件有效K线根数计数 int zhuizong=0; //移动止损开关 //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { EMA_0=iMA(NULL,0,ema,0,MODE_EMA,PRICE_CLOSE,0); EMA_1=iMA(NULL,0,ema,0,MODE_EMA,PRICE_CLOSE,1); EMA_2=iMA(NULL,0,ema,0,MODE_EMA,PRICE_CLOSE,2); MACD1=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1); MACD2=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,2); MACD3=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,3); if(Close[1]>=EMA_1 && Close[2]<EMA_2 && MACD1<0) { CountL = Bars; //获取当前图表柱数。当价格上穿EMA,而MACD还为负值时,开始计数,用于控制开仓 } //如果持仓多单数=0,则进行初始开多单 if(buydanshu()==0) { if(Close[1]>EMA_1 && MACD1>0 && Bars <= CountL+buyN) { if(buytime!=Time[0]) { int a=0; double stop1=EMA_0-chushistop*Point; a=OrderSend(Symbol(),OP_BUY,下单量,Ask,20,stop1,Ask+chushitp*Point,Symbol()+"buy",magic,0,White); buychushi_tp=Ask+250*Point; if(OrderSend(Symbol(),OP_BUY,下单量,Ask,20,stop1,0,Symbol()+"buy1",magic,0,Blue)>0) //第2单不设止盈 { buytime=Time[0]; } } } } //价格达到多单初始止盈,修改第2张单子的止损价为开仓价 if(Close[1]>buychushi_tp && zhuizong==0) { for(int i=0;i<OrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true) { string zhushi=(Symbol()+"buy1"); if(OrderSymbol()==Symbol() && OrderType()==OP_BUY && OrderComment()==zhushi) { double sl=OrderOpenPrice(); if(NormalizeDouble(OrderStopLoss(),Digits)!=NormalizeDouble(sl,Digits)) { int a=OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,Green); if(a>0) { zhuizong=1; modifytime=Time[0]; } } } } } } //移动止损 if(zhuizong==1 && TrailingStop>0 && modifytime!=Time[0]) { for(int i=0;i<OrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true) { string zhushi=(Symbol()+"buy1"); if(OrderSymbol()==Symbol() && OrderType()==OP_BUY && OrderComment()==zhushi) { if(Bid-OrderOpenPrice()>Point*TrailingStop) { if(OrderStopLoss()<(Bid-Point*TrailingStop)) { double sl=Bid-Point*TrailingStop; if(NormalizeDouble(OrderStopLoss(),Digits)!=NormalizeDouble(sl,Digits)) { int a=OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,Green); if(a>0) modifytime=Time[0]; } } } } } } } if(OrdersTotal()==0) { zhuizong=0; } } //-----统计多单数量函数 int buydanshu() { int a=0; for(int i=0;i<OrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true) { if(OrderSymbol()==Symbol() && OrderType()==OP_BUY && OrderMagicNumber()==magic) { a++; } } } return(a); } Sky All 2022.11.15 14:01 #1 如果您是刚刚开始学习编写,建议您从MT5开始学 13983411990 2022.11.15 14:20 #2 谢谢版主建议,希望今后多多指教。 Wen Feng Lin 2024.06.27 21:56 #3 为什么要从MQL5开始学 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
《5分钟动量交易系统》是关天豪、魏强斌所著的一本书,介绍了一种交易系统。
最近学写MQL4,就想将该系统写成EA自己来测试一下。于是按照书中的策略,为便于编程,略作修改如下:
1、进场条件1:汇价上穿21周期EMA
(2)第1张如止盈,则将第2张单子的止损点修改为开仓价位,然后开始移动止损,默认回撤250点止损。
有部分代码是参考了赵越老师的课程代码。
测试了一下,在有趋势行情时还是可以盈利的。
下面把做多的代码贴上来,请高手指点一下还存在哪些问题。