MT4: скрипт, показывающий отсутствие работы SlipPage при открытии по рынку.

 

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

указывать цену открытия лучше, чем на момент отправки торгового запроса, при этом разницу нивелировать соответствующим значением SlipPage.

Пример:

цена Ask = 1.4780, делается запрос на покупку по цене 1.4775 со SlipPage = 5. Цель: если цена за время обработки запроса изменится в лучшую сторону, будет открытие по лучшей цене.

Проблема оказалось в том, что OrderSend выдает ошибку 129 (неправильная цена). Скрипт:

#property show_inputs

extern int SlipPage = 100;

void start()
{
  double Price;
  
  Price = NormalizeDouble(Ask - SlipPage * Point, Digits);
  
  if (OrderSend(Symbol(), OP_BUY, 1, Price, SlipPage * 2, 0, 0) < 0) // удвоение SlipPage для перестраховки
   Print(GetLastError());
  
  return;
}

P.S. На MT5 такой способ открытия по рынку работает?

 
Цену вычислять нельзя. Её надо брать из потока.
 

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

 
stringo >>:
Цену вычислять нельзя. Её надо брать из потока.

У зацикленных советников (для мультивалютности) не всегда перед OrderSend правильно делать RefreshRates.

Получается, что при рыночном открытии надо указывать ТОЛЬКО текущие BID или ASK?

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

P.S. На MT5 вышепредложенный способ открытия по рынку работает?

 
повторным запросом...
 
getch писал(а) >>

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

указывать цену открытия лучше, чем на момент отправки торгового запроса, при этом разницу нивелировать соответствующим значением SlipPage.

Пример:

цена Ask = 1.4780, делается запрос на покупку по цене 1.4775 со SlipPage = 5. Цель: если цена за время обработки запроса изменится в лучшую сторону, будет открытие по лучшей цене.

Проблема оказалось в том, что OrderSend выдает ошибку 129 (неправильная цена). Скрипт:

P.S. На MT5 такой способ открытия по рынку работает?

Цену можно брать из тех которая физически существовала. За подробностями к модераторам.

От слиппаджа избавляться только уменьшением пинга и скоростью советника.

 
129-я ошибка выдается самим терминалом, без отправки на торговый сервер. Это одна из ошибок, обработка которой клиентской частью платформы вызвана желанием не грузить лишний раз торговый сервер. И это правильно. Правильно ли будет исправить условие проверки возникновения данной ошибки с учетом SlipPage?
 
при запросе нужной вам цены по нужному инструменту через "маркет инфо" произойдет обновление с запросом сервера
 
xrust >>:
при запросе нужной вам цены по нужному инструменту через "маркет инфо" произойдет обновление с запросом сервера

Разве вызов MarketInfo обновляет торговое окружение, как это происходит при вызове RefreshRates?

 
vasya_vasya >>:

Цену можно брать из тех которая физически существовала. За подробностями к модераторам.

От слиппаджа избавляться только уменьшением пинга и скоростью советника.

Даже мизерный пинг не избавит от использования SlipPage при высокочастотном изменении цен (например, новости).

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

Уважаемые разработчики, такой способ открытия по рынку возможен на MetaTrader5?

 

вообще, за это ДЦ "банят".

По их мнению так можно перегрузить сервак до такой степени, что он действительно может позволить совершить сделку по прошлым котировкам.

Денег с ДЦ получить вряд ли удастся если вы его нагреете.

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