Всем привет. Пишу советника для Forts. Никак не могу открыть Бай лимит
trade.BuyLimit(volume,price,symbol,SL,TP,ORDER_TIME_GTC,expiration,comment)
- не помогает.
В журнале в комментарий пишет Неполные сведения FOK заявки. Если в переменную price передаю цену выше текущей - покупает по рынку, а если ниже(что по идее у BuyLimit и должно) то пишет Неполные сведения FOK заявки. В чем проблема кто - нибудь может подсказать?
Другие функции OrderOpen, PositionOpen с параметром тип ордера ORDER_TYPE_BUY_LIMIT тоже не получается.
Fill-or-kill заявка (FOK) - обычно лимитные заявки, которые должны быть исполнены или отменены немедленно. В отличии от IOC заявок, FOK заявки требую всего количества для исполнения.
Immediate-or-cancel заявка (IOC) - заявка исполняющаяся немедленно или отменяющаяся биржей. В отличии от FOK(fill or kill) заявки, IOC ордера позволяют частичное исполнение.
Скорей всего, Вы просите у брокера тот объем который он не может Вам дать по указанной цене.
MqlTradeRequest request; MqlTradeResult result; ZeroMemory(request); ZeroMemory(result); request.action=TRADE_ACTION_PENDING; request.symbol=Symbol(); request.volume=Lot; request.deviation=0; request.magic=Magic; request.type_filling=ORDER_FILLING_FOK; request.sl=SL; request.tp=TP; request.type=ORDER_TYPE_BUY_LIMIT; request.price=Price; OrderSend(request,result);
Заодно проверь свойство ENUM_SYMBOL_TRADE_EXECUTION.
Режим заключения сделок по выбранному инструменту у твоего брокера может запрещать отложенные ордера в принципе.- www.mql5.com
Fill-or-kill заявка (FOK) - обычно лимитные заявки, которые должны быть исполнены или отменены немедленно. В отличии от IOC заявок, FOK заявки требую всего количества для исполнения.
Immediate-or-cancel заявка (IOC) - заявка исполняющаяся немедленно или отменяющаяся биржей. В отличии от FOK(fill or kill) заявки, IOC ордера позволяют частичное исполнение.
Скорей всего, Вы просите у брокера тот объем который он не может Вам дать по указанной цене.
Вот это тебе поможет. Чистое решение без ООП.
Заодно проверь свойство ENUM_SYMBOL_TRADE_EXECUTION.
Режим заключения сделок по выбранному инструменту у твоего брокера может запрещать отложенные ордера в принципе.Всем привет. Пишу советника для Forts. Никак не могу открыть Бай лимит
trade.BuyLimit(volume,price,symbol,SL,TP,ORDER_TIME_GTC,expiration,comment)
Прикрепил скрин из журнала. Объем всего 1 контракт. Цена ниже текущей. Вроде все параметры передаются корректно. Наверно при торговле на ФОРТС есть какие-то ньюансы
int filling_mode = ( int )SymbolInfoInteger( _Symbol, SYMBOL_FILLING_MODE ); if ( ( SYMBOL_FILLING_IOC & filling_mode ) != SYMBOL_FILLING_IOC ) { MessageBox( "On symbol " + _Symbol + " order filling IOC not supported!", "Information", MB_OK | MB_ICONINFORMATION ); return( -11 ); }
Добрый день!
И не будет работать. БКС и Открытие не поддерживают этот тип исполнения ордера
используйте
request.type_filling = ORDER_FILLING_IOC; или request.type_filling = ORDER_FILLING_RETURN;
request.type_time = ORDER_TIME_DAY;
у меня работает
А вообще-то всегда нужно, при инициализации, проверять все
у БКС на MT5 пробовал все - FOK , IOC - ничего не работает.... у ВТБ24 все работает....
request.type_filling = ORDER_FILLING_IOC;
request.type_filling = ORDER_FILLING_FOK;
задача стоит выставление лимит ордера на БКС
MqlTradeRequest request;
MqlTradeResult result;
ZeroMemory(request);
ZeroMemory(result);
request.action=TRADE_ACTION_PENDING;
request.symbol=Symbol();
request.volume=VolumeLimitOrder;
request.deviation=0;
request.magic=Magic;
request.type_filling= ORDER_FILLING_IOC;
//request.sl=0;
//request.tp=0;
request.type=ORDER_TYPE_BUY_LIMIT;
request.price=PriceBuyLimitOrder;
request.type_time = ORDER_TIME_DAY;
OrderSend(request,result);
пробовал проверять..
int filling_mode = ( int )SymbolInfoInteger( _Symbol, SYMBOL_FILLING_MODE );
if ( ( SYMBOL_FILLING_IOC & filling_mode ) != SYMBOL_FILLING_IOC )
{ Alert( "On symbol " + _Symbol + " order filling IOC NOT!!! supported!", "Information", MB_OK | MB_ICONINFORMATION ); return( -11 ); }
else { Alert( "On symbol " + _Symbol + " order filling IOC SUPPORTED!!! ", "Information", MB_OK | MB_ICONINFORMATION ); }
if ( ( SYMBOL_FILLING_FOK & filling_mode ) != SYMBOL_FILLING_FOK )
{ Alert( "On symbol " + _Symbol + " order filling FOK NOT!!! supported!", "Information", MB_OK | MB_ICONINFORMATION ); return( -11 ); }
else { Alert( "On symbol " + _Symbol + " order filling FOK SUPPORTED!!! ", "Information", MB_OK | MB_ICONINFORMATION ); }
в БКС выдает что все SUPPORTED!!! ордер отправляется и тут же удаляется (в истории - canceled) или вообще не отправляется.
Кто подскажет???? СПАСИБО!!
Согласно документации по MT5, и FOC-, и IOC- ордера сразу после выставления удаляются, т.е. в стакане не живут.
Для ситуации, изложенной в ветке, необходимо использовать третий тип ордеров - ORDER_FILLING_RETURN (в случае частичного исполнения рыночный или лимитный ордер с остаточным объемом не снимается, а продолжает действовать).
Если Вы используете класс CTrade, то для установки такого типа ордера в нём предусмотрен метод SetTypeFilling.
Согласно документации по MT5, и FOC-, и IOC- ордера сразу после выставления удаляются, т.е. в стакане не живут.
Для ситуации, изложенной в ветке, необходимо использовать третий тип ордеров - ORDER_FILLING_RETURN (в случае частичного исполнения рыночный или лимитный ордер с остаточным объемом не снимается, а продолжает действовать).
Если Вы используете класс CTrade, то для установки такого типа ордера в нём предусмотрен метод SetTypeFilling.
Добрый день
Имеется та же проблема с BCS
Подскажите, как в советнике созданном через Wizard можно изменить тип ордеров?
Насколько я понимаю, по-умолчанию выставляется ордер типа FOK.
В файле Trade.mqh в public есть указанный SetTypeFilling с определением переменной ENUM_ORDER_TYPE_FILLING
Пока не разобрался, где именно определяется тип ордера при выставлении заявки?
Добрый день
Имеется та же проблема с BCS
Подскажите, как в советнике созданном через Wizard можно изменить тип ордеров?
Насколько я понимаю, по-умолчанию выставляется ордер типа FOK.
В файле Trade.mqh в public есть указанный SetTypeFilling с определением переменной ENUM_ORDER_TYPE_FILLING
Пока не разобрался, где именно определяется тип ордера при выставлении заявки?
Если с помощью визарда собрали советника, то попробуйте дописать такой код:
//+------------------------------------------------------------------+ //| Initialization function of the expert | //+------------------------------------------------------------------+ int OnInit() { //--- Initializing expert if(!ExtExpert.Init(Symbol(),Period(),Expert_EveryTick,Expert_MagicNumber)) { //--- failed printf(__FUNCTION__+": error initializing expert"); ExtExpert.Deinit(); return(INIT_FAILED); } //--- CExpertTrade *MyTrade=new CExpertTrade; if(MyTrade==NULL) { //--- failed printf(__FUNCTION__+": error creating MyTrade"); } MyTrade.SetTypeFilling(ORDER_FILLING_RETURN); ExtExpert.InitTrade(1,MyTrade); //--- Creating signal CExpertSignal *signal=new CExpertSignal; if(signal==NULL)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Всем привет. Пишу советника для Forts. Никак не могу открыть Бай лимит
trade.BuyLimit(volume,price,symbol,SL,TP,ORDER_TIME_GTC,expiration,comment)
- не помогает.
В журнале в комментарий пишет Неполные сведения FOK заявки. Если в переменную price передаю цену выше текущей - покупает по рынку, а если ниже(что по идее у BuyLimit и должно) то пишет Неполные сведения FOK заявки. В чем проблема кто - нибудь может подсказать?
Другие функции OrderOpen, PositionOpen с параметром тип ордера ORDER_TYPE_BUY_LIMIT тоже не получается.