Модификация Sell Stop через Trade\Trade.mqh. Как правильно делать?

 

Здравствуйте. Есть непонимание:
Как с помощью Trade\Trade.mqh модифицировать выставленный ордер?
команда OrderModify требует выставления 7и параметров, в том числе последний: StopLimit ордер, хотя в стандартном варианте требуется всего 6.
Я из за этого не могу подвинуть BuyStop и SellStop, и не понимаю, как модифицировать существующий СеллСтоп ордер..

Приходиться через дилейт и новое выставление..
При этом все равно пытаюсь понять, как воспользоваться этой командой, чтоб не переписывать советника заново..

Я изначально его заточил под  Trade.mqh

 
Yura Fomin:

Здравствуйте. Есть непонимание:
Как с помощью Trade\Trade.mqh модифицировать выставленный ордер?
команда OrderModify требует выставления 7и параметров, в том числе последний: StopLimit ордер, хотя в стандартном варианте требуется всего 6.
Я из за этого не могу подвинуть BuyStop и SellStop, и не понимаю, как модифицировать существующий СеллСтоп ордер..

Приходиться через дилейт и новое выставление..
При этом все равно пытаюсь понять, как воспользоваться этой командой, чтоб не переписывать советника заново..

Я изначально его заточил под  Trade.mqh

Вам же дали ссылку - https://www.mql5.com/ru/code/27646 Вам можно объединить Ваш эксперт с этой функцией (Экспертом)    

Pending Trailing
Pending Trailing
  • www.mql5.com
Советник относится к классу утилит. Работает со всеми отложенными ордерами установленными в терминале. Подтягивает отложенный ордер вслед за ценой. Например отложенные ордера 'Buy stop' и 'Sell limit'...
 

ещё есть в терминале в экспертах  - Mean Reversion.mq5 - 

может вникнуть как работает - и подправить под Ваш эксперт 

//+------------------------------------------------------------------+
//| Move limit orders according to trend                             |
//+------------------------------------------------------------------+
bool ModifyLimitOrder(int trend)
  {
   double price;
   double stoploss;
   double takeprofit;
   ulong  ticket;
   ExtSymbolInfo.Refresh();
   ExtSymbolInfo.RefreshRates();
   int digits=ExtSymbolInfo.Digits();
   double point=ExtSymbolInfo.Point();
   double spread=ExtSymbolInfo.Ask()-ExtSymbolInfo.Bid();
//--- uptrend
   if(trend==1)
     {
      price=NormalizeDouble(ExtLowChannel, digits);
      //--- open price of Buy Limit order must be lower than current Ask
      if(price>ExtSymbolInfo.Ask())
         return(true);
      stoploss  =NormalizeDouble(price-ExtChannelRange, digits);
      takeprofit=NormalizeDouble(price+ExtChannelRange, digits);
      //--- go through the list of all orders
      int orders=OrdersTotal();
      for(int i=0; i<orders; i++)
        {
         if((ticket=OrderGetTicket(i))!=0)
           {
            //--- get the name of the symbol and the order id (magic)
            string symbol=OrderGetString(ORDER_SYMBOL);
            long   magic =OrderGetInteger(ORDER_MAGIC);
            ENUM_ORDER_TYPE type=(ENUM_ORDER_TYPE)OrderGetInteger(ORDER_TYPE);
            //--- if they correspond to our values
            if(type==ORDER_TYPE_BUY_LIMIT && symbol==Symbol() && magic==InpMagicNumber)
              {
               //--- if the new price does not differ from the current open price
               double current_price=OrderGetDouble(ORDER_PRICE_OPEN);
               if(MathAbs(current_price-price)<=point)
                  continue; // skip the order
               //--- modify an order
               if(!ExtTrade.OrderModify(ticket, price, stoploss, takeprofit, 0, 0))
                 {
                  PrintFormat("%s Failed Modify BuyLimit at %G (sl=%G tp=%G)failed. Error=%d",
                              Symbol(), price, stoploss, takeprofit, GetLastError());
                  return(false);
                 }
              }
           }
        }
     }
//--- downtrend
   if(trend==-1)
     {
      price=NormalizeDouble(ExtUpChannel+spread, digits);
      //--- open price of Sell Limit order must be higher than current Ask
      if(price<ExtSymbolInfo.Bid())
         return(true);
      stoploss  =NormalizeDouble(price+ExtChannelRange, digits);
      takeprofit=NormalizeDouble(price-ExtChannelRange, digits);
      //--- go through the list of all orders
      int orders=OrdersTotal();
      for(int i=0; i<orders; i++)
        {
         if((ticket=OrderGetTicket(i))!=0)
           {
            //--- get the name of the symbol and the order id (magic)
            string symbol=OrderGetString(ORDER_SYMBOL);
            long   magic =OrderGetInteger(ORDER_MAGIC);
            ENUM_ORDER_TYPE type=(ENUM_ORDER_TYPE)OrderGetInteger(ORDER_TYPE);
            //--- if they correspond to our values
            if(type==ORDER_TYPE_SELL_LIMIT && symbol==Symbol() && magic==InpMagicNumber)
              {
               //--- if the new price does not differ from the current open price
               double current_price=OrderGetDouble(ORDER_PRICE_OPEN);
               if(MathAbs(current_price-price)<=point)
                  continue; // skip the order
               //--- modify an order
               if(!ExtTrade.OrderModify(ticket, price, stoploss, takeprofit, 0, 0))
                 {
                  PrintFormat("%s Failed Modify SellLimit at %G (sl=%G tp=%G)failed. Error=%d",
                              Symbol(), price, stoploss, takeprofit, GetLastError());
                  return(false);
                 }
              }
           }
        }
     }
//---
   return(true);
  }
//+------------------------------------------------------------------+
Причина обращения: