非常简洁且功能齐全的均线系统

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

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);  //方向未改变
         }
     }

本博客所有文章如无特别注明均为原创。作者:天泓评测
分享到:更多

相关推荐

发表评论

路人甲 表情
Ctrl+Enter快速提交

网友评论(0)