3评论

1收藏

5分钟动量交易系统代码

avatar 2232 | 1126 人阅读 | 3 人评论 | 2024-08-04

  1. #property strict
  2. int magic=2022111;
  3. input double 下单量=0.01;
  4. input int ema=21;
  5. input int buyN=5; //入场触发条件有效K线根数
  6. input int chushistop=250; //初始止损点数(书中为200点)
  7. input int chushitp=300;  //初始止盈点数(书中等于初始止损点数)
  8. input double TrailingStop = 250;  //移动止损点数
  9. double EMA_0,EMA_1,EMA_2,MACD1,MACD2,MACD3;
  10. double buychushi_tp=0; //初始止损变量
  11. datetime buytime=0; //防止同一根bar反复开仓变量
  12. datetime modifytime=0; //防止同一根bar反复修改止损变量
  13. int CountL=0; //触发条件有效K线根数计数
  14. int zhuizong=0;  //移动止损开关

  15. //+------------------------------------------------------------------+
  16. //| Expert initialization function                                   |
  17. //+------------------------------------------------------------------+
  18. int OnInit()
  19.   {

  20.    return(INIT_SUCCEEDED);
  21.   }
  22. //+------------------------------------------------------------------+
  23. //| Expert deinitialization function                                 |
  24. //+------------------------------------------------------------------+
  25. void OnDeinit(const int reason)
  26.   {

  27.   }
  28. //+------------------------------------------------------------------+
  29. //| Expert tick function                                             |
  30. //+------------------------------------------------------------------+
  31. void OnTick()
  32.   {
  33.    EMA_0=iMA(NULL,0,ema,0,MODE_EMA,PRICE_CLOSE,0);
  34.    EMA_1=iMA(NULL,0,ema,0,MODE_EMA,PRICE_CLOSE,1);
  35.    EMA_2=iMA(NULL,0,ema,0,MODE_EMA,PRICE_CLOSE,2);
  36.    MACD1=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
  37.    MACD2=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,2);
  38.    MACD3=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,3);
  39.    
  40.    if(Close[1]>=EMA_1 && Close[2]<EMA_2 && MACD1<0)
  41.                 {
  42.                         CountL = Bars; //获取当前图表柱数。当价格上穿EMA,而MACD还为负值时,开始计数,用于控制开仓
  43.                 }

  44. //如果持仓多单数=0,则进行初始开多单
  45.    if(buydanshu()==0)
  46.       {
  47.         if(Close[1]>EMA_1 && MACD1>0 && Bars <= CountL+buyN)
  48.           {
  49.            if(buytime!=Time[0])
  50.             {
  51.               int a=0;
  52.               double stop1=EMA_0-chushistop*Point;
  53.               a=OrderSend(Symbol(),OP_BUY,下单量,Ask,20,stop1,Ask+chushitp*Point,Symbol()+"buy",magic,0,White);
  54.               buychushi_tp=Ask+250*Point;
  55.               if(OrderSend(Symbol(),OP_BUY,下单量,Ask,20,stop1,0,Symbol()+"buy1",magic,0,Blue)>0)  //第2单不设止盈
  56.                {
  57.                  buytime=Time[0];
  58.                }
  59.             }
  60.           }
  61.       }

  62.    //价格达到多单初始止盈,修改第2张单子的止损价为开仓价
  63.    if(Close[1]>buychushi_tp && zhuizong==0)
  64.    {
  65.       for(int i=0;i<OrdersTotal();i++)
  66.       {
  67.          if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
  68.          {
  69.             string zhushi=(Symbol()+"buy1");
  70.             if(OrderSymbol()==Symbol() && OrderType()==OP_BUY && OrderComment()==zhushi)
  71.             {
  72.                double sl=OrderOpenPrice();
  73.                if(NormalizeDouble(OrderStopLoss(),Digits)!=NormalizeDouble(sl,Digits))
  74.                {
  75.                   int a=OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,Green);
  76.                   if(a>0)
  77.                   {
  78.                      zhuizong=1;
  79.                      modifytime=Time[0];         
  80.                   }
  81.                }
  82.             }
  83.          }
  84.       }
  85.     }

  86. //移动止损
  87.     if(zhuizong==1 && TrailingStop>0 && modifytime!=Time[0])
  88.       {
  89.        for(int i=0;i<OrdersTotal();i++)
  90.          {
  91.           if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
  92.             {
  93.              string zhushi=(Symbol()+"buy1");
  94.              if(OrderSymbol()==Symbol() && OrderType()==OP_BUY && OrderComment()==zhushi)
  95.                {
  96.                 if(Bid-OrderOpenPrice()>Point*TrailingStop)
  97.                   {
  98.                    if(OrderStopLoss()<(Bid-Point*TrailingStop))
  99.                      {
  100.                       double sl=Bid-Point*TrailingStop;
  101.                       if(NormalizeDouble(OrderStopLoss(),Digits)!=NormalizeDouble(sl,Digits))
  102.                         {
  103.                          int a=OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,Green);
  104.                          if(a>0) modifytime=Time[0];
  105.                         }
  106.                      }
  107.                   }
  108.                }
  109.             }
  110.          }
  111.       }
  112.    
  113.     if(OrdersTotal()==0)
  114.     {
  115.       zhuizong=0;
  116.     }
  117.   }

  118. //-----统计多单数量函数
  119. int buydanshu()
  120.   {
  121.      int a=0;
  122.      for(int i=0;i<OrdersTotal();i++)
  123.       {
  124.         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
  125.           {
  126.             if(OrderSymbol()==Symbol() && OrderType()==OP_BUY && OrderMagicNumber()==magic)
  127.               {
  128.                 a++;
  129.               }
  130.           }
  131.       }
  132.     return(a);
  133.   }
复制代码


""
还没有人打赏,支持一下

评论|共 3 个

景察

发表于 2024-10-24 19:36:57 | 显示全部楼层

谢谢

陆海龙

发表于 2024-10-24 19:59:58 | 显示全部楼层

怎么只开多单啊?

司徒一笑

发表于 2024-12-11 20:57:16 | 显示全部楼层

您需要登录后才可以回帖 登录 | 注册 微信登录

EA之家评论守则