Какие цены я должен указать в структуре MqlTradeRequest (double price; double stoplimit;)
перед посылкой команды OrderSend(), чтобы выставленный ордер сразу сработал, как указано в справке?
Допустим, я хочу купить 5 фьючерсов BR-5.13 по цене Ask
Вам не нужен стоп-лимит.
Поставьте бай-лимит по заведомо худшей цене (Аск + N пунктов), и он тут же будет исполнен.
Либо, если хотите войти точно по текущему Аску, на него бай-лимит и ставьте. Но тогда не факт, что он тут же сработает.
Обратите внимание на выделенный текст в вашем запросе.
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 и 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...";
Добрый день, Yurich!
Я сделал, как Вы написали, но ордер исполняется не сразу.
Так как же сделать так, как указано в справке по терминалу?
Добрый день, 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)
- www.mql5.com
Yurich!
Мне нужно купить ( продать ) по моей цене, которую я беру из стакана цен с объёмом.
В режиме БИРЖЕВОГО ИСПОЛНЕНИЯ ОРДЕРОВ цена в ордере не указывается, НО в описании терминала
написано, что если выставить ЛИМИТНЫЙ ОРДЕР, то он исполнится ПО МОЕЙ ЦЕНЕ( как рыночный )!
И такая возможность должна быть( торговля фьючерсами), ведь в стакане цен есть МОЯ цена и МОЙ объём!
- www.mql5.com
Yurich!
1) Мне нужно купить ( продать ) по моей цене, которую я беру из стакана цен с объёмом.
2) В режиме БИРЖЕВОГО ИСПОЛНЕНИЯ ОРДЕРОВ цена в ордере не указывается, НО в описании терминала
написано, что если выставить ЛИМИТНЫЙ ОРДЕР, то он исполнится ПО МОЕЙ ЦЕНЕ( как рыночный )!
1) И что мешает?
2) Лимитный ордер исполнится, как "рыночный", если текущая цена(BestAsk/BestBid) лучше, чем цена в лимитном ордере, в противном случае будете ждать встречную заявку.
1) И что мешает?
2) Лимитный ордер исполнится, как "рыночный", если текущая цена(BestAsk/BestBid) лучше, чем цена в лимитном ордере, в противном случае будете ждать встречную заявку.
Yurich,
А скажите могу ли я в отложенном ордере request.action = TRADE_ACTION_PENDING;
указать его тип request.type = ORDER_TYPE_BUY; ?
- www.mql5.com
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день!
В справке по терминалу написано:
В режиме биржевого исполнения цена, указываемая при выставлении лимитных ордеров, не проверяется.
Ее можно указать выше текущей цены Ask (для ордеров на покупку) и ниже цены Sell (для ордеров на продажу).
При выставлении ордера с такой ценой он практически сразу срабатывает и превращается в рыночный.
Однако в отличие от рыночных ордеров, где трейдер фактически соглашается на сделку по неуказанной текущей рыночной цене,
лимитный ордер будет исполнен по цене не худшей, чем указанная.
Какие цены я должен указать в структуре MqlTradeRequest (double price; double stoplimit;)
перед посылкой команды OrderSend(), чтобы выставленный ордер сразу сработал, как указано в справке?
Допустим, я хочу купить 5 фьючерсов BR-5.13 по цене Ask