Неполные сведения FOK заявки

 

Всем привет. Пишу советника для Forts. Никак не могу открыть Бай лимит

trade.BuyLimit(volume,price,symbol,SL,TP,ORDER_TIME_GTC,expiration,comment)

- не помогает.

В журнале в комментарий пишет Неполные сведения FOK заявки. Если в переменную price передаю   цену выше текущей - покупает по рынку, а если ниже(что по идее у BuyLimit и должно) то пишет Неполные сведения FOK заявки. В чем проблема кто - нибудь может подсказать?

 Другие функции OrderOpen, PositionOpen с параметром тип ордера  ORDER_TYPE_BUY_LIMIT тоже не получается.

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

Всем привет. Пишу советника для 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.

Режим заключения сделок по выбранному инструменту у твоего брокера может запрещать отложенные ордера в принципе.
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 
Interesting:

Fill-or-kill заявка (FOK) - обычно лимитные заявки, которые должны быть исполнены или отменены немедленно. В отличии от IOC заявок, FOK заявки требую всего количества для исполнения.

Immediate-or-cancel заявка (IOC) - заявка исполняющаяся немедленно или отменяющаяся биржей. В отличии от FOK(fill or kill) заявки, IOC ордера позволяют частичное исполнение.


Скорей всего, Вы просите у брокера тот объем который он не может Вам дать по указанной цене.

Прикрепил скрин из журнала. Объем всего 1 контракт. Цена ниже текущей. Вроде все параметры передаются корректно. Наверно при торговле на ФОРТС есть какие-то ньюансы
Файлы:
yltjd.JPG  164 kb
 
MoneyJinn:
Вот это тебе поможет. Чистое решение без ООП.

Заодно проверь свойство ENUM_SYMBOL_TRADE_EXECUTION.

Режим заключения сделок по выбранному инструменту у твоего брокера может запрещать отложенные ордера в принципе.
Спасибо проверю. Но думаю что проблема не в этом. Руками то я могу выставлять отложки
 
Ed5550:

Всем привет. Пишу советника для Forts. Никак не могу открыть Бай лимит

trade.BuyLimit(volume,price,symbol,SL,TP,ORDER_TIME_GTC,expiration,comment)

Ed5550:
Прикрепил скрин из журнала. Объем всего 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.

 
pollax:

Согласно документации по MT5, и FOC-, и IOC- ордера сразу после выставления удаляются, т.е. в стакане не живут.

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

Если Вы используете класс CTrade, то для установки такого типа ордера в нём предусмотрен метод SetTypeFilling.

Добрый день

Имеется та же проблема с BCS

Подскажите, как в советнике созданном через Wizard можно изменить тип ордеров?

Насколько я понимаю, по-умолчанию выставляется ордер типа FOK.

В файле Trade.mqh  в public есть указанный SetTypeFilling с определением переменной ENUM_ORDER_TYPE_FILLING

Пока не разобрался, где именно определяется тип ордера при выставлении заявки?

 
Paulo74:

Добрый день

Имеется та же проблема с 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)