Как начать работу с MQL5 - страница 35

 
Vladimir Karputov #:

По какому принципу вы выставляете отложенный ордер? Какой бар вы проверяете?

на значениях прямоугольника. SellLimit от значений верхнего прямоугольника и BuyLimit от значений нижнего прямоугольника
 
daengrani #:
на значениях прямоугольника. SellLimit от значений верхнего прямоугольника и BuyLimit от значений нижнего прямоугольника
 
Vladimir Karputov #:

Не используйте 'OnChartEvent' - делайте проверки в OnTick.

Я поместил его в OnTick()

void OnTick()
{
   HandleRect();
   CalculateOrders();
//--- we work only at the time of the birth of new bar
   static datetime PrevBars=0;
   datetime time_0=iTime(m_symbol.Name(), Period(), 0);
   if(time_0==PrevBars)
      return;
   PrevBars=time_0;
//---
   ManageTrades();

   /*
   if(ObjectFind(0, sUpRectangle)!=-1) {
      Comment ("Rectangle Low : ", DoubleToString(UpperRectLow, _Digits), "\n",
               "Rectangle High : ", DoubleToString(UpperRectHigh, _Digits), "\n",
               "SellLimit Price : ", DoubleToString(ObjectGetDouble(0, sUpRectLabelPrice, OBJPROP_PRICE, 0), _Digits), "\n",
               "SellLimit SL : ", DoubleToString(ObjectGetDouble(0, sUpRectLabelSL, OBJPROP_PRICE, 0), _Digits)
              );
   }
   else if(ObjectFind(0, sDnRectangle)!=-1) {
      Comment ("Rectangle High : ", DoubleToString(LowerRectHigh, _Digits), "\n",
               "Rectangle Low : ", DoubleToString(LowerRectLow, _Digits), "\n",
               "BuyLimit Price : ", DoubleToString(ObjectGetDouble(0, sDnRectLabelPrice, OBJPROP_PRICE, 0), _Digits), "\n",
               "BuyLimit SL : ", DoubleToString(ObjectGetDouble(0, sDnRectLabelSL, OBJPROP_PRICE, 0), _Digits)
              );
   }
   */
//---
}
Он создает прямоугольник в OnInit. Я добавляю метку цены и линию тренда на этот прямоугольник только для визуализации. Значения из прямоугольника, которые используются для уровня цены и SL для лимитных ордеров
 
daengrani # :

Я поместил его в OnTick()

Я посмотрю на это завтра. Сегодня уже очень поздно - пора спать :)

 
Vladimir Karputov #:

Я посмотрю на это завтра. Сегодня уже очень поздно - пора спать :)

Хорошо, сэр, спасибо.

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


 
daengrani # :

Хорошо, сэр, спасибо.

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


Я запустил его и сразу увидел, что стоп-лосс для "Buy Limit" был установлен где-то не там:

 
Vladimir Karputov #:

Я запустил его и сразу же увидел, что стоп-лосс для "Buy Limit" был установлен где-то не там:

Моя ошибка

   InitialLot        = NormalizeLot(Symbol(), InpLotPercent>0 ? InpLotPercent*balans/100/1000 : InpLots);
   LongEntryPrice    = NormalizeDouble(LowerRectHigh + ExtAddPips + dRecentSpread, _Digits);
   LongSL            = NormalizeDouble(LowerRectLow - ExtTakeProfit, _Digits); // it has to be : ExtAddPips
   LongTP            = NormalizeDouble(LongEntryPrice + ExtTakeProfit, _Digits);
   ShortEntryPrice   = NormalizeDouble(UpperRectLow - ExtAddPips, _Digits);
   ShortSL           = NormalizeDouble(UpperRectHigh + ExtAddPips + dRecentSpread, _Digits);
   ShortTP           = NormalizeDouble(ShortEntryPrice - ExtTakeProfit, _Digits);

но модифицировать приказы все равно не получается...

эти прямоугольники будут перетаскиваться вручную (около последнего SnD) и лимитный ордер должен быть изменен соответствующим образом.

Я видел, что OnChartEvent очень чутко реагирует на изменения значений прямоугольников. Всякий раз, когда я перетаскивал прямоугольник, их значения менялись в реальном времени
 
daengrani # :

Моя ошибка

но модифицировать приказы все равно не получается...

прямоугольник будет перетащен вручную (вблизи последнего SnD) и лимитный ордер должен быть изменен соответствующим образом.

Я видел, что OnChartEvent очень чутко реагирует на изменения значений прямоугольников. Каждый раз, когда я перетаскивал прямоугольник, их значения менялись в реальном времени

Сломанная логика вызова

//--- handle buylimit
   if(count_buylimit>0)
     {
      if(buylimit_op!=LongEntryPrice || buylimit_sl!=LongSL || buylimit_tp!=LongTP)
        {
         ModifyPending(ORDER_TYPE_BUY_LIMIT, LongEntryPrice, LongSL, LongTP);
        }
     }
//--- handle selllimit
   if(count_selllimit>0)
     {
      if(selllimit_op!=ShortEntryPrice || selllimit_sl!=ShortSL || selllimit_tp!=ShortTP)
        {
         ModifyPending(ORDER_TYPE_SELL_LIMIT, ShortEntryPrice, ShortSL, ShortTP);
        }
     }

и логика внутри функции'ModifyPending':

 
Vladimir Karputov #:

Сломанная логика вызова

и логика внутри функции'ModifyPending':

Хорошо, я проверю.

Я нашел это, очень глупая ошибка, которую я совершил. Я не видел этого раньше. Большое спасибо, сэр

 
daengrani #:

Хорошо, я проверю.

Я нашел его, очень глупая ошибка. Я не видел его раньше. Большое спасибо, сэр.

Уважаемый Владимир,

Я поместил модифицированный отложенный код в OnChartEvent...


Они очень отзывчивые.

Причина обращения: