3评论

1收藏

基于移动平均线的智能交易系统的代码

avatar qq_天空_rSS | 984 人阅读 | 3 人评论 | 2019-06-01

//基于移动平均线的智能交易系统的代码 ,整个程序非常简洁但EA的功能又非常齐全,实现了完全由电脑自动下单和平仓,整个程序只用了一个START()


  //+------------------------------------------------------------------+


  extern double 赢利目标 = 20;
  extern double 止损 = 30;
  extern double 手数 = 2;
  extern double 跟踪止赢 = 50;
  extern int 短均周期 = 5;
  extern int 长均周期 = 60;
  
  //+---------------------------主函数---------------------------------+
  
  int start()
      {
       int cnt,
           编号,
           单总数;
       double 短均,
             长均;


       if (Bars < 100)
          {
           Print("bars less than 100");
           return (0);
          }


       if (赢利目标 < 10)
            {
            Print("赢利目标低于 10");
            return (0);
            }


       短均 = iMA(NULL, 0, 短均周期, 0, MODE_EMA, PRICE_CLOSE, 0);
       长均 = iMA(NULL, 0, 长均周期, 0, MODE_EMA, PRICE_CLOSE, 0);


       static int 穿越 = 0;
       穿越 = 穿越子函数(长均, 短均);


       单总数 = OrdersTotal();
       if (单总数 < 1)
          {
           if (穿越 == 1)  // 满足空仓条件,开空仓
              {
               编号 = OrderSend(Symbol(),
                                OP_SELL,
                                手数,
                                Bid,
                                3,
                                Bid + 止损 * Point,
                                Bid - 赢利目标 * Point,
                                "EMA_CROSS",
                                12345,
                                0,
                                Green);
              if (编号 > 0)
                 {
                  if (OrderSelect(编号, SELECT_BY_TICKET, MODE_TRADES))
                      Print("SELL单开在: ", OrderOpenPrice());
                 }
               else
                  Print("开卖单出错: ", GetLastError());
              return (0);
              }
           if (穿越 == 2) // 满足多仓条件,开多仓
              {
               编号 = OrderSend(Symbol(),
                                OP_BUY,
                                手数,
                                Ask,
                                3,
                                Ask - 止损 * Point,
                                Ask + 赢利目标 * Point,
                                "EMA_CROSS",
                                12345,
                                0,
                                Red);
               if (编号 > 0)
                  {
                   if (OrderSelect(编号, SELECT_BY_TICKET, MODE_TRADES))
                      Print("BUY单开在: ", OrderOpenPrice());
                  }
                else
                   Print("开买单出错 : ", GetLastError());
               return (0);
               }
           return (0);
           }
           
//---- 跟踪止盈止损
       for (cnt = 0; cnt < 单总数; cnt++)
           {
           OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
              if (OrderType() <= OP_SELL && OrderSymbol() == Symbol())
                 {
                  if (OrderType() == OP_SELL) // long position is opened
                     {
//----跟踪止损
                      if (跟踪止赢 > 0)
                         {
                          if (Bid - OrderOpenPrice() > Point * 跟踪止赢)
                             {
                              if (OrderStopLoss() < Bid - Point * 跟踪止赢)
                                 {
                                  OrderModify(OrderTicket(),
                                              OrderOpenPrice(),
                                              Bid - Point * 跟踪止赢,
                                              OrderTakeProfit(),
                                              0,
                                              Green);
                                  return (0);
                                 }
                             }
                         }
                     }
                   else // go to short position
                     {
// check for trailing stop
                      if (跟踪止赢 > 0)
                         {
                          if ((OrderOpenPrice() - Ask) > (Point * 跟踪止赢))
                             {
                              if ((OrderStopLoss() > (Ask + Point * 跟踪止赢)))
                                 {
                                  OrderModify(OrderTicket(),
                                              OrderOpenPrice(),
                                              Ask + Point * 跟踪止赢,
                                              OrderTakeProfit(),
                                              0,
                                              Red);
                                  return (0);
                                  }
                             }
                         }
                     }
                 }
           }
  //----
       return (0);
       }
      
  //+-----------------------穿越 子函数()------------------------------+
  
  // 移动平均线多空条件判断,
  int 穿越子函数(double 线1, double 线2)
     {
      static int 最后方向 = 0;
      static int 当前方向 = 0;
//首个load不工作, 等待第一次穿越!
      static bool 第一时间 = true;
      if (第一时间 == true)
         {
         第一时间 = false;
         return (0);
         }
  //----因主循环中有单数限制,所以当大于时下单后不会再不停下单
      if (线1 > 线2)
         当前方向 = 2; //多头市场 上穿做多
      if (线1 < 线2)
         当前方向 = 1; //空头市场 下穿做空
  //----
      if (当前方向 != 最后方向)  //changed
         {
         最后方向 = 当前方向;
         return(最后方向);
         }
      else
         {
         return (0);  //方向未改变
         }
     }
  //+--------------------------------------------------------------------+

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

评论|共 3 个

风过发已乱

发表于 2019-6-19 09:43:24 | 显示全部楼层

楼主可以加下qq吗,有问题请教93031425

jaryk

发表于 2019-6-19 09:50:45 | 显示全部楼层

基于移动平均线的智能交易系统的代码

风过发已乱

发表于 2019-6-19 23:14:31 | 显示全部楼层

楼主,提示错误和警告,要这么改进?
微信图片编辑_20190619231209.jpg

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

EA之家评论守则