Мы специально не пропускаем небрежно заполненные транзакции.
Renat:
Неиспользуемые поля должны быть занулены в обязательном порядке, чтобы ордер прошел жесткую проверку.
Мы специально не пропускаем небрежно заполненные транзакции.
Renat,
Если Вам не составит труда,
напишите пожалуйста, что должно быть в полях
(5)
(10)
(11)
?
Естественно, перед заполнением request я делаю
MqlTradeRequest request = {0};
MqlTradeResult result = {0};
А вот результат постановки ордера с терминала "ручками"
Комментарий нужно было добавить?
Mikalas:
А вот результат постановки ордера с терминала "ручками"
с этого обычно начинают. :)
пишите брокеру. у них некорректное поведение шлюза.
Добрый день, Renat и sergeev!
Постановка ордера "ручками" не имеет отношения
к моему изначальному вопросу, убедительная просьба
ответить на него. Что должно быть в полях
(5) (10) (11), если перед заполнением Request
выполняется:
MqlTradeRequest request = {0};
MqlTradeResult result = {0};
- www.mql5.com
Указав это Вы автоматически присвоили
(10) ORDER_TIME_GTC
это такое недоразумение MT5
Добрый день, Renat и sergeev!
Постановка ордера "ручками" не имеет отношения
к моему изначальному вопросу, убедительная просьба
ответить на него.
Mikalas ! У меня такая же проблема! Вручную все выставляется, а советник не может выставить - ошибка "инвалид экспирэйшен", Вы разобрались с этой проблемой??? Я заполняю структуру таким образом...что я делаю не так?
ZeroMemory(mrequest);
mrequest.action = TRADE_ACTION_PENDING;
mrequest.magic = magic;
mrequest.symbol = _Symbol;
mrequest.type_filling = ORDER_FILLING_RETURN;
mrequest.deviation=NormalizeDouble(Deviation*_Point,_Digits);
mrequest.type_time=ORDER_TIME_SPECIFIED;
mrequest.expiration=TimeCurrent()+6000;
mrequest.volume = lot;
mrequest.sl = 0;
mrequest.tp = 0;
mrequest.price = prise;
mrequest.type = ORDER_TYPE_BUY_STOP;
pako,
Зачем ВЫ написали своё сообщение(что бы было)?
Прочтите начало топика!
А100!
Большое спасибо, т.е в терминале автоматически подставляется ORDER_TIME_DAY :)
Вообще-то исходя из общепринятой логики заявка типа ORDER_FILLING_FOK
не должна иметь ВРЕМЕННОГО интервала ( ВСЁ ИЛИ НИЧЕГО ),
что кстати и отражается, когда ставишь заявку "ручками" в терминале поля (10) и (11) не доступны
на первом скриншоте!
FinEgineer!
У Вас не такая же проблема!
Дело в том, что заявка ORDER_TYPE_BUY_STOP ИМЕЕТ временной интервал,
но не имеет type_filling (в терминале этого поля вовсе нет, если выбрать ORDER_TYPE_BUY_STOP ).
Кстати, где-то на форуме разработчики писали, что лучше использовать mrequest = {0} , нежели ZeroMemory(mrequest);
Проверил (подставил request.type_time = ORDER_TIME_DAY; ) и УРА!
ордер размещается, НО новый поворот!
bool GetStakanValues( const string aSymbol, const bool buy_sell, double &price, long &volume ) { MqlBookInfo a_price[]; //--- Get stakan bool getBook = MarketBookGet( aSymbol, a_price ); if ( getBook ) { int size = ArraySize( a_price ); if ( size > 0 ) { for( int i = 0; i < size; i++ ) { if ( buy_sell ) { if ( a_price[i].type == BOOK_TYPE_BUY ) { if ( a_price[i].price > price ) { price = a_price[i].price; volume = a_price[i].volume; } } } else { if ( a_price[i].type == BOOK_TYPE_SELL ) { if ( a_price[i].price < price ) { price = a_price[i].price; volume = a_price[i].volume; } } } } return( true ); } } return( false ); } void OnBookEvent ( const string &aSymbol ) { double price = 0; long volume = 0; if ( GetStakanValues( _Symbol, true, price, volume ) ) { if ( ( price != 0 ) && ( volume != 0 ) ) { MqlTradeRequest request = {0}; MqlTradeResult result = {0}; ulong order_ticket; request.action = TRADE_ACTION_PENDING; request.magic = MagicNumber; request.symbol = aSymbol; request.volume = volume; request.price = price; request.stoplimit = 0; request.sl = 0; request.tp = 0; request.type = ORDER_TYPE_SELL_LIMIT; request.type_filling = ORDER_FILLING_FOK; request.type_time = ORDER_TIME_DAY; request.comment = "Sell..."; if SendOrder( request, result ) { if ( ( result.retcode == TRADE_RETCODE_PLACED ) || ( result.retcode == TRADE_RETCODE_DONE ) || ( result.retcode == TRADE_RETCODE_DONE_PARTIAL ) ) { order_ticket = result.order; } } } } }
order_ticket > 0 - принят сервером, а вот дальше, УВЫ!
Цена и объём, взятые из стакана цен по инструменту отклоняются сервером,
при этом выдаётся сообщение
Как видно из скриншота заявка выставлялась ДВА РАЗА,
это говорит о том, что ЦЕНА в стакане НЕ ИЗМЕНИЛАСЬ,
так почему же заявка не исполняется?
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день!
Из справки MQL5:
Pending Order - Торговый приказ на установку отложенного ордера. Требуется указание 11 полей:
·1. action
·2. symbol
·3. volume
·4. price
·5. stoplimit
·6. sl
·7. tp
·8. type
·9. type_filling
·10. type_time
·11. expiration
Можно также задать значения полей 12. magic и 13. comment.
Скриншот терминала на установку отложенного ордера:
Из моего кода:
Вопрос:
Почему, после отправки команды OrderSend()
result.retcode == TRADE_RETCODE_INVALID_EXPIRATION (10022 - Неверная дата истечения ордера в запросе ),
хотя на скриншоте ясно видно, что ни Истечение(10), ни Дата истечения(11) - не доступны?
Как же правильно заполнить структуру MqlTradeRequest ?