Nhờ hỗ trợ tralingstop cho EA.

Thảo luận trong 'MT5 EXPERT ADVISOR (BOT)' bắt đầu bởi benjavietnam, 8/12/18.

  1. benjavietnam

    benjavietnam New Member

    Tham gia ngày:
    12/11/18
    Bài viết:
    1
    Đã được thích:
    0
    Điểm thành tích:
    1
    Giới tính:
    Nam
    Các bác cho em hỏi em có EA và em muốn set chạy trailing stop và các mức trailing stop đối với lệnh đó thì làm thế nào ạ?
    Em cảm ơn!
     
    Tags:
  2. VuHoang

    VuHoang Moderator Thành viên BQT

    Tham gia ngày:
    2/9/18
    Bài viết:
    8
    Đã được thích:
    3
    Điểm thành tích:
    3
    Giới tính:
    Nam
    Hi
    Để có thể apply đc tralingstop vào EA em buộc phải cho EA kiểm tra tick giá liên tục. Vậy nghĩa là em nên viết hàm trailingstop bên trong ontick() functionality.
    Việc áp dụng trailingstop phụ thuộc vào nhiều giá trị, ví dụ em muốn trailingstop hoạt động khi EA thắng đc bao nhiêu Pips? chẳng hạn. Trong một số trường hợp em lại không muốn sử dụng trailingstop theo như mặc định của MT4 hoặc MT5 thì buộc lòng e phải tuỳ biến để EA hoạt động theo ý của mình. Có thể tham khảo đoạn code dưới đây để apply cho EA của mình em nhé. Chúc em thành công với việc trading. :)

    Mã:
       bool selected=PositionSelect(symbol);
       if(selected) // if the position is selected
         {
          ENUM_POSITION_TYPE type=      (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);
          long pos_magic         =PositionGetInteger(POSITION_MAGIC);
          if(type == POSITION_TYPE_BUY)
             {
                double BuyPriceOut = PositionGetDouble(POSITION_PRICE_OPEN);
                double CurrentpriceOut=PositionGetDouble(POSITION_PRICE_CURRENT);
                double SL=NormalizeDouble(CurrentpriceOut-30*_Point,_Digits);
                for(int i=PositionsTotal()-1;i>=0;i--)
                {
                   //string symbol=PositionGetSymbol(i);
                   double BuyPrice = PositionGetDouble(POSITION_PRICE_OPEN);
                   double Currentprice=PositionGetDouble(POSITION_PRICE_CURRENT);
                   if(_Symbol==symbol)
                   {
                      ulong PositionTicket=PositionGetInteger(POSITION_TICKET);
                      Print("Price da mua: ",BuyPrice," CurrentPrice: ",Currentprice);
                      // if Ask > Current Price 0.0005 => set currentSL=100 point
                      double levelBuy = BuyPrice - Currentprice;
                      double levelBuyExtra = Currentprice - BuyPrice;
                     
                      if(levelBuy > 0.0025)
                      {
                      if(stoplossed == false){
                         Print("Mua ma gia da giam hon 25Pips roi. Dat Stoploss 30pips di.");
                         cTrade.PositionModify(PositionTicket,(BuyPrice-300*_Point),0);
                         stoplossed = true;
                         }
                      }
                      //if currentprice > Ask => trigger traddingstop.
                      if(levelBuyExtra > 0.0002)
                      {
                       if(stoplossed == false){                                      
                         cTrade.PositionModify(PositionTicket,(BuyPrice-10*_Point),0);
                         stoplossed = true;
                         }
                       else
                          {
                          // TIM SPREAD GIU SL VA CURRENTSTOPLOSS.
                         double CurrentStopLoss=PositionGetDouble(POSITION_SL);
                         Print("Current Stoploss: ",CurrentStopLoss);
                         Print("SL: ",SL);
                            if(SL>CurrentStopLoss)
                             {
                             double slSpread = SL - CurrentStopLoss;
                             double pointSlSpread = slSpread * 100000;
                             cTrade.PositionModify(PositionTicket,(CurrentStopLoss+pointSlSpread*_Point),0);
                             }
                          }
                      }
                   }
                }
             }
          if(type == POSITION_TYPE_SELL)
          {
             //set the desired Stop Loss to 30 points
             double SellPriceOut = PositionGetDouble(POSITION_PRICE_OPEN);
             double CurrentpriceOut=PositionGetDouble(POSITION_PRICE_CURRENT);
             double SL=NormalizeDouble(CurrentpriceOut+30*_Point,_Digits);
             //check all open positions for the current symboll
             for(int i=PositionsTotal()-1;i>=0;i--)
             {
                double SellPrice = PositionGetDouble(POSITION_PRICE_OPEN);
                double Currentprice=PositionGetDouble(POSITION_PRICE_CURRENT);
                //string symbol=PositionGetSymbol(i);
                if(_Symbol==symbol)
                {
                   //get the ticket number
                   ulong PositionTicket=PositionGetInteger(POSITION_TICKET);
                      Print("Price da ban: ",SellPrice," CurrentPrice: ",Currentprice);
                      double levelSell = Currentprice - SellPrice;
                      double levelSellExtra = SellPrice - Currentprice;
                 
                   if(levelSell > 0.0025)
                      {
                       if(stoplossed == false){
                         Print("Ban ma gia da len hon 2Pips roi. Dat Stoploss 10pips di.");
                         cTrade.PositionModify(PositionTicket,(SellPrice+300*_Point),0);
                         stoplossed = true;
                         }
                      }
                   if(levelSellExtra > 0.0002)
                   {
                      // trigger traddingstop.
                      // set stoploss first
                      if(stoplossed == false){                                      
                         cTrade.PositionModify(PositionTicket,(SellPrice+10*_Point),0);
                         stoplossed = true;
                      }
                      else
                      {
                      // TIM SPREAD GIU SL VA CURRENTSTOPLOSS.
                         double CurrentStopLoss=PositionGetDouble(POSITION_SL);
                         Print("Current Stoploss: ",CurrentStopLoss);
                         Print("SL: ",SL);
                         if(CurrentStopLoss>SL)
                       {
                          double slSpread = CurrentStopLoss - SL;
                          double pointSlSpread = slSpread * 100000;
                          cTrade.PositionModify(PositionTicket,(CurrentStopLoss-pointSlSpread*_Point),0);
                       }
                      }
                   }
                }
             }
          }  
       }
     
    Chỉnh sửa cuối: 8/12/18
    Lộc thích bài này.
  3. Lộc

    Lộc New Member

    Tham gia ngày:
    14/11/18
    Bài viết:
    7
    Đã được thích:
    0
    Điểm thành tích:
    1
    Giới tính:
    Nam
    Đoạn code này để trong hàm nào mới apply đc vào EA của mình vậy a?
     

Chia sẻ trang này

Đang tải...