新手:一个EA源码的详细注释,请大家帮忙解释一下

楼主  收藏   举报   帖子创建时间:  2019-05-05 15:31 回复:0 关注量:533
新手有个ea 的部份地方看不懂,请大家帮忙解释一下, 下面是我自已注解上去的,如果注解错了,也请指出,还有我不明白的地方,请帮忙
  解释一下。
  
  #define SIGNAL_NONE 0                         //预定义  这里起什么作用呀??
  #define SIGNAL_BUY   1
  #define SIGNAL_SELL  2
  #define SIGNAL_CLOSEBUY 3
  #define SIGNAL_CLOSESELL 4
  
  extern bool EachTickMode = True;         //EachTickMode = True
  extern double Lots = 1.0;                //每次下单手数
  extern int Slippage = 3;                 //成交单数允许的滑动点数
  extern bool UseStopLoss = True;          //是否使用止损
  extern int StopLoss = 30;                //止损点数
  extern bool UseTakeProfit = True;        //是否使用止赢
  extern int TakeProfit = 60;              //止赢点数
  extern bool UseTrailingStop = True;      //是否使用跟踪止赢
  extern int TrailingStop = 30;            //跟踪止赢点数
  
  int BarCount;                           //自定义
  int Current;                            //自定义
  bool TickCheck = False;              
  
  int init() {
     BarCount = Bars;                  // BarCount =当前K线图所有的历史K线个数
  
     if (EachTickMode) Current = 0; else Current = 1;   
  //如果 EachTickMode 是真的,Current = 0,是假的Current = 1 ,请问 这里 Current起到什么作用???
  
     return(0);
  }
  
  int deinit() {
     return(0);
  }
  
  int start() {
     int Order = SIGNAL_NONE;               //自定义  Order = SIGNAL_NONE
     int Total, Ticket;                     //自定义  Total, Ticket
     double StopLossLevel, TakeProfitLevel; //自定义  StopLossLevel, TakeProfitLevel
  
     if (EachTickMode && Bars != BarCount) TickCheck = False;
  // 如果 EachTickMode 和  当前K线图所有的历史K线个数   不等于 BarCount  是真的,TickCheck = False  ,请问这里起什么作用??
     Total = OrdersTotal();   // Total = OrdersTotal(),OrdersTotal 是下单的意思吗??
     Order = SIGNAL_NONE;    // Order = SIGNAL_NONE ,这里起什么作用呀???
  
  ......
  
  
  //Check position           检查位置
     bool IsTrade = False;  //  自定义  IsTrade = False
  
     for (int i = 0; i < Total; i ++)     //  自定义 i = 0  ,如果 i < Total,运行 i ++  意思是 如果 i < Total,i+1 是这样吗?
  {
        OrderSelect(i, SELECT_BY_POS, MODE_TRADES);   //这里是什么意思 ?起什么作用????????
        if(OrderType()  0) // 如果 UseTrailingStop 和TrailingStop > 0 是真就运行下面。是这个意思吗?
  {                 
                 if(Bid - OrderOpenPrice() > Point * TrailingStop)   //这里是什么意思 ?起什么作用?
  {
                    if(OrderStopLoss() < Bid - Point * TrailingStop) //这里是什么意思 ?起什么作用?
  
  {
                       OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0,
  
  MediumSeaGreen);  //这里是什么意思 ?起什么作用? 是要平仓的意思吗?
                       if (!EachTickMode) BarCount = Bars;
                       continue;
                    }
                 }
              }
  
  .................  信号开始(退出卖出)跟上面差不多,只要解释上面的下面就了解了....
  
  //+------------------------------------------------------------------+
     //| Signal Begin(Entry)     信号开始  买  卖                         |
     //+------------------------------------------------------------------+
  
     if (Buy1_1 > Buy1_2 && Buy2_1 > Buy2_2) Order = SIGNAL_BUY;
  
     if (Sell1_1 < Sell1_2 && Sell2_1 < Sell2_2) Order = SIGNAL_SELL;
  
  
     //+------------------------------------------------------------------+
     //| Signal End                                                       |
     //+------------------------------------------------------------------+
  
     //Buy      买
     if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount))))
  // ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))  这几个都是什么意思 ,起什么作用??
  
  {
        if(!IsTrade)     // 这里是什么意思 ,起什么作用????
  
  {
           //Check free margin     检查可用保证金
           if (AccountFreeMargin() < (1000 * Lots)) {
              Print("We have no money. Free Margin = ", AccountFreeMargin());
              return(0);
           }
  
           if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;  //这里是什么意思??
           if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0; //这里是什么意思??
  
           Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber +
  
  ")", MagicNumber, 0, DodgerBlue);  //这里是什么意思??
  
           if(Ticket > 0)     // 如果Ticket > 0 是真的,就运行下面, Ticket是什么??
  
  {
              if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES))  //这里是什么意思??  
  
  {
                                  Print("BUY order opened : ", OrderOpenPrice());  // Print 是输出的意思吧??? 这里起什么作用呀??
  
                  if (SignalMail) SendMail("[Signal alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");
  //这里是什么意思??
  
                          }
  else
  {
                                  Print("Error opening BUY order : ", GetLastError()); // Print 是输出的意思吧??? 这里起什么作用呀??
                          }
           }
           if (EachTickMode) TickCheck = True;  // 这里是什么意思??  这里起什么作用呀??
           if (!EachTickMode) BarCount = Bars; // 这里是什么意思??  这里起什么作用呀??
           return(0);
        }
     }
  
  ..........................下面的是卖出的... 基本上跟买进的一个样,解释上面,下面的我就可以明白了....
打赏