TradeDispatcher: trade context is busy. - страница 2

 
Вот исходник эксперта, посмотрите...
Файлы:
1.mq4  7 kb
 
ExpertTrader:
Вот исходник эксперта, посмотрите...
if(OrderStopLoss()<Bid-Point*TrailingStop)
я бы заменил на
if(OrderStopLoss()<Bid - MarketInfo ( Symbol(), MODE_SPREAD ) * Point * TrailingStop)
И вообще, такие проверки надо бы делать с нормализацией....
 

по моему это увеличет трейлин стоп в n раз, где n-величина спреда.

А что касаеться нормализации, то допустим для USDJPY и EURUSD она должна быть разной, ведь так.

 
Помоему это не правильное решение, или я не прав?
 
ExpertTrader:

по моему это увеличет трейлин стоп в n раз, где n-величина спреда.

А что касаеться нормализации, то допустим для USDJPY и EURUSD она должна быть разной, ведь так.

Да, это я не обдумавши ;)
Вот, примерно так:
if( ( Bid - TrailingStop * Point ) - OrderStopLoss() >= MarketInfo ( Symbol(), MODE_SPREAD ) * Point )
Т.е. двигать только если разница между "новым стоп лоссом (Bid - TrailingStop)" и "старый стоп лоссом" больше "спреда".
 

А если так:

if(TrailingStop>0)
  {
   if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
     {
      if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
        {
         if(!IsTradeAllowed())
           {
            Print("Торговый поток занят.");
            Sleep(100);
            return(-1);
           }                   
         OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
         return(0);
        }
     }
  }
 
komposter писал (а):
ExpertTrader писал (а):

по моему это увеличет трейлин стоп в n раз, где n-величина спреда.

А что касаеться нормализации, то допустим для USDJPY и EURUSD она должна быть разной, ведь так.

Да, это я не обдумавши ;)
Вот, примерно так:
if( ( Bid - TrailingStop * Point ) - OrderStopLoss() >= MarketInfo ( Symbol(), MODE_SPREAD ) * Point )
Т.е. двигать только если разница между "новым стоп лоссом (Bid - TrailingStop)" и "старый стоп лоссом" больше "спреда".

А может просто выставить величину разници между старым стоп-лосом и новым в настройках.
 
ExpertTrader:

А если так:


      if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
 
То будет изменение каждый пункт...

А может просто выставить величину разници между старым стоп-лосом и новым в настройках.
Можно, просто вместо MarketInfo ( Symbol(), MODE_SPREAD ) вставить свою переменную
 

Да нет, я понял все. И мне нужно изменение каждый пункт. Сейчас работает все отлично, как часы. Спасибо огромное за статью, благодаря ей я нашел решение.

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