请教BULL,关于EA的问题!!!!

楼主  收藏   举报   帖子创建时间:  2019-05-05 15:23 回复:0 关注量:692
//+------------------------------------------------------------------+
  //| This MQL is generated by Expert Advisor Builder                  |
  //|                http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/ |
  //|                                                                  |
  //|  In no event will author be liable for any damages whatsoever.   |
  //|                      Use at your own risk.                       |
  //|                                                                  |
  //+------------------- DO NOT REMOVE THIS HEADER --------------------+
  
  #define SIGNAL_NONE 0
  #define SIGNAL_BUY   1
  #define SIGNAL_SELL  2
  #define SIGNAL_CLOSEBUY 3
  #define SIGNAL_CLOSESELL 4
  
  #property copyright "Expert Advisor Builder"
  #property link      "http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/"
  
  extern int MagicNumber = 0;
  extern bool SignalMail = False;
  extern bool 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 = 15;
  
  int BarCount;
  int Current;
  bool TickCheck = False;
  //+------------------------------------------------------------------+
  //| expert initialization function                                   |
  //+------------------------------------------------------------------+
  int init() {
     BarCount = Bars;
  
     if (EachTickMode) Current = 0; else Current = 1;
  
     return(0);
  }
  //+------------------------------------------------------------------+
  //| expert deinitialization function                                 |
  //+------------------------------------------------------------------+
  int deinit() {
     return(0);
  }
  //+------------------------------------------------------------------+
  //| expert start function                                            |
  //+------------------------------------------------------------------+
  int start() {
     int Order = SIGNAL_NONE;
     int Total, Ticket;
     double StopLossLevel, TakeProfitLevel;
  
  
  
     if (EachTickMode && Bars != BarCount) TickCheck = False;
     Total = OrdersTotal();
     Order = SIGNAL_NONE;
  
     //+------------------------------------------------------------------+
     //| Variable Begin                                                   |
     //+------------------------------------------------------------------+
  
  
  double Buy1_1 = iStochastic(NULL, 0, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, Current + 0);
  double Buy1_2 = iStochastic(NULL, 0, 5, 3, 3, MODE_SMA, 0, MODE_SIGNAL, Current + 0);
  
  double Sell1_1 = iStochastic(NULL, 0, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, Current + 0);
  double Sell1_2 = iStochastic(NULL, 0, 5, 3, 3, MODE_SMA, 0, MODE_SIGNAL, Current + 0);
  
  
  
     
     //+------------------------------------------------------------------+
     //| Variable End                                                     |
     //+------------------------------------------------------------------+
  
     //Check position
     bool IsTrade = False;
  
     for (int i = 0; i < Total; i ++) {
        OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
        if(OrderType()  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;
                    }
                 }
              }
           } else {
              //Close
  
              //+------------------------------------------------------------------+
              //| Signal Begin(Exit Sell)                                          |
              //+------------------------------------------------------------------+
  
              
  
              //+------------------------------------------------------------------+
              //| Signal End(Exit Sell)                                            |
              //+------------------------------------------------------------------+
  
              if (Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
                 OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);
                 if (SignalMail) SendMail("[Signal alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell");
                 if (!EachTickMode) BarCount = Bars;
                 IsTrade = False;
                 continue;
              }
              //Trailing stop
              if(UseTrailingStop && TrailingStop > 0) {                 
                 if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) {
                    if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) {
                       OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);
                       if (!EachTickMode) BarCount = Bars;
                       continue;
                    }
                 }
              }
           }
        }
     }
  
     //+------------------------------------------------------------------+
     //| Signal Begin(Entry)                                              |
     //+------------------------------------------------------------------+
  
     if (Buy1_1 > Buy1_2) Order = SIGNAL_BUY;
  
     if (Sell1_1 < Sell1_2) Order = SIGNAL_SELL;
  
  
     //+------------------------------------------------------------------+
     //| Signal End                                                       |
     //+------------------------------------------------------------------+
  
     //Buy
     if (Order == SIGNAL_BUY && ((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) {
              if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
                                  Print("BUY order opened : ", OrderOpenPrice());
                  if (SignalMail) SendMail("[Signal alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");
                          } else {
                                  Print("Error opening BUY order : ", GetLastError());
                          }
           }
           if (EachTickMode) TickCheck = True;
           if (!EachTickMode) BarCount = Bars;
           return(0);
        }
     }
  
     //Sell
     if (Order == SIGNAL_SELL && ((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 = Bid + StopLoss * Point; else StopLossLevel = 0.0;
           if (UseTakeProfit) TakeProfitLevel = Bid - TakeProfit * Point; else TakeProfitLevel = 0.0;
  
           Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);
           if(Ticket > 0) {
              if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
                                  Print("SELL order opened : ", OrderOpenPrice());
                  if (SignalMail) SendMail("[Signal alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell");
                          } else {
                                  Print("Error opening SELL order : ", GetLastError());
                          }
           }
           if (EachTickMode) TickCheck = True;
           if (!EachTickMode) BarCount = Bars;
           return(0);
        }
     }
  
     if (!EachTickMode) BarCount = Bars;
  
     return(0);
  }
  //+------------------------------------------------------------------+
  
  
  
  我的原意是当KD中的K线大于D线的交叉点时,就空,小于就多,但是出来的效果确是K大于D线时这个空间他就多,,,我不知道该如何来确定当K大于D时这个点。。。
  还有就是这个EA一次只能下一次,平了才能接着再下1次单,才练习着做,有很多东西要学,望BULL能指正。。谢谢。。
  
  C:aaa.gif
打赏