Как улутшить Slippage?

 
Привет всем!
Я в форуме в первые, сам не профи по мкл программированию, все таки
умудрился написать советник)) Вопрос может быть очень простым для
профи в этом деле, но для меня это не простой вопрос.

Вопрос на счет Slippage.

Укороченный код из совы:

if (OrdersTotal() == 0&& Close[0]>Close[1])
OrderSend(Symbol(),OP_BUY,lot,Ask,Slippage,0,0,"",magic,0,Blue);

Значение слипаж =2

Вопрос: Если слипаж =2 то елси в момент открытия ордера цена отскочит на 3 или более пунктов
то отправит ли советник запрос на покупку по новой цене по причине что условия указанные
для отправки запроса все верны. Т.е. Я хочу чтобы позиция открылась именно там где поступил сигнал, к примеру это EUR/USD 1.1210 максимум 1,1212
но хоть в советнике слипаж указан =2 и цена может отскочить на 6 пунктов выше но тем не менее условия отправки запроса соответствуют повторной отправке
ордера то не смотря на слипаж =2 ордер все равно откроется по нежелательной цене (Или  я ошибаюсь?)

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

Благодарю за ответы.
 
Если отклонение больше указанного Вами то ордер не исполнится . Далее по Вашему алгоритму. 
 
Если NDD или ECN счет, там всё исполнится по текущей рыночной цене, Slippage на таких счетах не учитывается (можно ставить ноль).
 
В случае реквоты, вам надо предусмотреть в советнике эту ситуацию и уже или повторно отправить запрос на открытие позиции или отказаться.
 

Спасибо всем за ответы.

Чтобы повторные запросы отправлялись именно в указанном диапазоне цен, я решил поступить так: 

UpDiapazon= Close[1]-3*Point;
DownDiapazon= Close[1]+3*Point;
 

                  if (OrdersTotal() == 0 &&  Ask<Close[1] && Ask>UpDiapazon)
                  {OP_BUY}
                  if(OrdersTotal() == 0  &&  Bid>Close[1] && Bid<DownDiapazon)
                  {OP_SELL}

Тогда вне диапазона запросы не будут отправляться.

Если у кого есть еще более практичные и легкие варианты пожалуйста пишите, буду очень признателен.

 

Если поможет то, вот функция которую сам юзаю

int AntiRequoteOrderSend(string symbol,int cmd,double volume,double price,int slippage,double stoploss,double takeprofit,string comment="",int magic=0,datetime expiration=0,color arrow_color=CLR_NONE)
  {
   ticket=0;
   int cnt=0;
   while(true)
     {
      if(cnt>=MaxAttempts) {Print("Order NOT opened after ",MaxAttempts," attempts"); break;}
      cnt++;
      ticket=OrderSend(symbol,cmd,volume,price,slippage,stoploss,takeprofit,Com,magic,expiration,arrow_color);
      if(ticket>0) break; //Order was successfully opened
      Sleep(DelaySeconds*1000);
     }
   return(ticket);
  }

 При отправке ордера вместо OrderSend

К примеру

было
ticket=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage,SL,TP,Com,Magic,0,BuyColor);

стало
ticket=AntiRequoteOrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage,SL,TP,Com,Magic,0,BuyColor);

 Внешние переменные

input int    MaxAttempts         = 3;
input int    DelaySeconds        = 15;
input int    Slippage           = 5;
 
AIST4YOU:

Спасибо всем за ответы.

Чтобы повторные запросы отправлялись именно в указанном диапазоне цен, я решил поступить так: 

UpDiapazon= Close[1]-3*Point;
DownDiapazon= Close[1]+3*Point;
 

                  if (OrdersTotal() == 0 &&  Ask<Close[1] && Ask>UpDiapazon)
                  {OP_BUY}
                  if(OrdersTotal() == 0  &&  Bid>Close[1] && Bid<DownDiapazon)
                  {OP_SELL}

Тогда вне диапазона запросы не будут отправляться.

Если у кого есть еще более практичные и легкие варианты пожалуйста пишите, буду очень признателен.

Не поможет. Величина проскальзывания настраивается на стороне брокера. В можете только соглашаться с величиной проскальзывания или не соглашаться. Этот параметр брокер может регулировать благодаря Автодиллеру. Это такой плагин к серверной части МТ для организации кухонного бизнеса. Сам сталкивался с подобным, когда ордера поначалу обрабатывались за 100 мс а потом стали обрабатываться за 10-15 Секунд! В этом случае надо просто менять брокера.
Причина обращения: