Лимитный ордер при биржевом исполнении

 

Добрый день!

В справке по терминалу написано:

 В режиме биржевого исполнения цена, указываемая при выставлении лимитных ордеров, не проверяется.

Ее можно указать выше текущей цены Ask (для ордеров на покупку) и ниже цены Sell (для ордеров на продажу).

При выставлении ордера с такой ценой он практически сразу срабатывает и превращается в рыночный.

Однако в отличие от рыночных ордеров, где трейдер фактически соглашается на сделку по неуказанной текущей рыночной цене,

лимитный ордер будет исполнен по цене не худшей, чем указанная.

Какие цены я должен указать в структуре  MqlTradeRequest (double   price double   stoplimit;)

перед посылкой команды OrderSend(), чтобы выставленный ордер сразу сработал, как указано в справке?

Допустим, я хочу купить 5 фьючерсов BR-5.13 по цене  Ask 

MqlTradeRequest request;

request.action       = TRADE_ACTION_PENDING;
request.magic        = 123456;
request.order        = 0;
request.symbol       = _Symbol;
request.volume       = 5;
request.price        = Ask ???
request.stoplimit    = Ask ???
request.sl           = 0;
request.tp           = 0;
request.deviation    = 0;
request.type         = ORDER_TYPE_BUY;
request.type_filling = ORDER_FILLING_FOK;
request.type_time    = ORDER_TIME_GTC;
request.expiration   = 0;
request.comment      = "Buy...";
 
stoplimit по инструкции не надоуказывать, это в случает отложки при достижении определенной цены как я понимаю, в этой структуре половина параметров лишние и зависит от типа посылаемого сигнала
 
Mikalas:

Какие цены я должен указать в структуре  MqlTradeRequest (double   price;  double   stoplimit;)

перед посылкой команды OrderSend(), чтобы выставленный ордер сразу сработал, как указано в справке?

Допустим, я хочу купить 5 фьючерсов BR-5.13 по цене  Ask 

Вам не нужен стоп-лимит.

Поставьте бай-лимит по заведомо худшей цене (Аск + N пунктов), и он тут же будет исполнен. 

Либо, если хотите войти точно по текущему Аску, на него бай-лимит и ставьте. Но тогда не факт, что он тут же сработает. 

 
Mikalas:

 Обратите внимание на выделенный текст в вашем запросе.

MqlTradeRequest request;

request.action       = TRADE_ACTION_PENDING;
request.magic        = 123456;
request.order        = 0;
request.symbol       = _Symbol;
request.volume       = 5;
request.price        = Ask ???
request.stoplimit    = Ask ???
request.sl           = 0;
request.tp           = 0;
request.deviation    = 0;
request.type         = ORDER_TYPE_BUY;
request.type_filling = ORDER_FILLING_FOK;
request.type_time    = ORDER_TIME_GTC;
request.expiration   = 0;
request.comment      = "Buy..."

 На форуме этот вопрос уже поднимался, ниже приведен пример выставления лимитного ордера на покупку.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

МТ5 на бирже: ошибки, баги, вопросы.

Yurich, 2013.02.26 07:33

void OnStart()
{
   MqlTick tick;
   MqlTradeRequest   request;
   MqlTradeResult    result;
   
   ZeroMemory(request);
   ZeroMemory(result);
   
   SymbolInfoTick(_Symbol,tick);
   
   request.action      =TRADE_ACTION_PENDING;
   request.symbol      =_Symbol;
   request.volume      =1;
   request.type        =ORDER_TYPE_BUY_LIMIT;
   request.price       =NormalizeDouble(tick.ask-100*_Point,_Digits);//на 100 пунктов ниже Ask
   request.type_filling=ORDER_FILLING_RETURN;
   request.type_time   =ORDER_TIME_DAY;

   OrderSend(request,result);
}


 
Yurich:

 Обратите внимание на выделенный текст в вашем запросе.

 На форуме этот вопрос уже поднимался, ниже приведен пример выставления лимитного ордера на покупку.

 

Добрый день, Yurich и komposter!

Вы, наверное, не прочитали моё первое сообщение.

Я спрашивал не о выставлении отложенного ордера(TRADE_ACTION_PENDING), а о том как

правильно заполнить структуру( MqlTradeRequest ), чтобы лимитированный ордер сразу исполнился ПО МОЕЙ ЦЕНЕ

( как это описано в справке по ТЕРМИНАЛУ) в режиме биржевого исполнения. 

 

request.action       = TRADE_ACTION_DEAL;
request.magic        = MagicNumber;
request.order        = 0;
request.symbol       = _Symbol;
request.volume       = MY_volume;
request.price        = MY_price;//???????????
request.stoplimit    = MY_price;//??????????????
request.sl           = 0;
request.tp           = 0;
request.deviation    = 0;
request.type         = ORDER_TYPE_BUY_LIMIT;
request.type_filling = ORDER_FILLING_FOK;
request.type_time    = ORDER_TIME_GTC;
request.comment      = "Buy...";

 

 
Mikalas:
Посмотрите внимательно мой пример и поставьте нужную цену в поле price, в вашем случае заведомо худшую.
 

Добрый день, Yurich!

Я сделал, как Вы написали, но ордер исполняется не сразу.

Так как же сделать так, как указано в справке по терминалу?  

 
Mikalas:

Добрый день, Yurich!

Я сделал, как Вы написали, но ордер исполняется не сразу.

Так как же сделать так, как указано в справке по терминалу?  

Сейчас попробовал выставить лимитный ордер на покупку Ask+100 пунктов. Ордер исполнился сразу.

OK      0       22:20:40        Scripts script test_ordersend (RTS-6.13,M30) loaded successfully
RS      0       22:20:40        Trades  '1001270': buy limit 1.00 RTS-6.13 at 139710
IH      0       22:20:41        Trades  '1001270': buy limit 1.00 RTS-6.13 at 139710 placed for execution
RH      0       22:20:41        Scripts script test_ordersend (RTS-6.13,M30) removed
FR      0       22:20:41        Trades  '1001270': deal #237744 buy 1.00 RTS-6.13 at 139610 done (based on order #3009564)
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 

Yurich!

Мне нужно купить ( продать ) по моей цене, которую я беру из стакана цен с объёмом.

В режиме БИРЖЕВОГО ИСПОЛНЕНИЯ ОРДЕРОВ цена в ордере не указывается, НО в описании терминала

написано, что если выставить ЛИМИТНЫЙ ОРДЕР, то он исполнится ПО МОЕЙ ЦЕНЕ( как рыночный )! 

И такая возможность должна быть( торговля фьючерсами), ведь в стакане цен есть МОЯ цена и МОЙ объём! 

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 
Mikalas:

Yurich!

1) Мне нужно купить ( продать ) по моей цене, которую я беру из стакана цен с объёмом.

2) В режиме БИРЖЕВОГО ИСПОЛНЕНИЯ ОРДЕРОВ цена в ордере не указывается, НО в описании терминала

написано, что если выставить ЛИМИТНЫЙ ОРДЕР, то он исполнится ПО МОЕЙ ЦЕНЕ( как рыночный )! 

1) И что мешает?

2) Лимитный ордер исполнится, как "рыночный", если текущая цена(BestAsk/BestBid) лучше, чем цена в лимитном ордере, в противном случае будете ждать встречную заявку.

 
Yurich:

1) И что мешает?

2) Лимитный ордер исполнится, как "рыночный", если текущая цена(BestAsk/BestBid) лучше, чем цена в лимитном ордере, в противном случае будете ждать встречную заявку.

 

Yurich,

А скажите могу ли я в отложенном ордере request.action = TRADE_ACTION_PENDING;

указать его тип request.type = ORDER_TYPE_BUY; ?

 

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций - Документация по MQL5
Причина обращения: