Скачать MetaTrader 5

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

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

Вопрос на счет 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 пунктов.

Благодарю за ответы.
Yuri Evseenkov
2327
Yuri Evseenkov  
Если отклонение больше указанного Вами то ордер не исполнится . Далее по Вашему алгоритму. 
Vladimir Zubov
5652
Vladimir Zubov  
Если NDD или ECN счет, там всё исполнится по текущей рыночной цене, Slippage на таких счетах не учитывается (можно ставить ноль).
Vitalii Ananev
9922
Vitalii Ananev  
В случае реквоты, вам надо предусмотреть в советнике эту ситуацию и уже или повторно отправить запрос на открытие позиции или отказаться.
AIST4YOU
67
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}

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

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

Vladimir Gribachev
48656
Vladimir Gribachev  

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

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;
Dmitiry Ananiev
8666
Dmitiry Ananiev  
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 Секунд! В этом случае надо просто менять брокера.
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий