Возможна ли автоматизация для FILLING_MODE?

 

В своих советниках для биржевого исполнения использовал принудительное включение того или иного исполнения ордеров.

input ENUM_ORDER_TYPE_FILLING Filling=ORDER_FILLING_IOC;

А возможно ли это автоматизировать в модуле Инит, например так

ENUM_ORDER_TYPE_FILLING Filling;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Filling=(ENUM_ORDER_TYPE_FILLING)SymbolInfoInteger(_Symbol,SYMBOL_FILLING_MODE);
  
//---
   return(INIT_SUCCEEDED);
  }
 
Gennady Mazur:

В своих советниках для биржевого исполнения использовал принудительное включение того или иного исполнения ордеров.

input ENUM_ORDER_TYPE_FILLING Filling=ORDER_FILLING_IOC;

А возможно ли это автоматизировать в модуле Инит, например так

ENUM_ORDER_TYPE_FILLING Filling;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Filling=(ENUM_ORDER_TYPE_FILLING)SymbolInfoInteger(_Symbol,SYMBOL_FILLING_MODE);
  
//---
   return(INIT_SUCCEEDED);
  }

думаю что возможно, если будете использовать класс CTrade, то можно так попробовать

trade.SetTypeFilling((ENUM_ORDER_TYPE_FILLING)SymbolInfoInteger(_Symbol,SYMBOL_FILLING_MODE));


 по умолчанию в конструкторе  класса CTrade задается тип ORDER_FILLING_FOK

CTrade::CTrade(void) : m_async_mode(false),
                       m_magic(0),
                       m_deviation(10),
                       m_type_filling(ORDER_FILLING_FOK),
                       m_log_level(LOG_LEVEL_ERRORS)


 

 
Sergey Gritsay:

думаю что возможно, если будете использовать класс CTrade, то можно так попробовать

trade.SetTypeFilling((ENUM_ORDER_TYPE_FILLING)SymbolInfoInteger(_Symbol,SYMBOL_FILLING_MODE));


 по умолчанию в конструкторе  класса CTrade задается тип ORDER_FILLING_FOK

CTrade::CTrade(void) : m_async_mode(false),
                       m_magic(0),
                       m_deviation(10),
                       m_type_filling(ORDER_FILLING_FOK),
                       m_log_level(LOG_LEVEL_ERRORS)


 

Спасибо.
 
Gennady Mazur:

В своих советниках для биржевого исполнения использовал принудительное включение того или иного исполнения ордеров.

input ENUM_ORDER_TYPE_FILLING Filling=ORDER_FILLING_IOC;

А возможно ли это автоматизировать в модуле Инит, например так

ENUM_ORDER_TYPE_FILLING Filling;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Filling=(ENUM_ORDER_TYPE_FILLING)SymbolInfoInteger(_Symbol,SYMBOL_FILLING_MODE);
  
//---
   return(INIT_SUCCEEDED);
  }
А разве это не зависит от SYMBOL_TRADE_EXEMODE из перечисления ENUM_SYMBOL_TRADE_EXECUTION

Может так и определяется?
 
Gennady Mazur:
Посмотрите в СTrade функцию FillingCheck(). Может поможет.
 
Alexey Kozitsyn:
Посмотрите в СTrade функцию FillingCheck(). Может поможет.
Что то я не нашел такую...(
 
Alexey Viktorov:
А разве это не зависит от SYMBOL_TRADE_EXEMODE из перечисления ENUM_SYMBOL_TRADE_EXECUTION

Может так и определяется?

Может и зависит, и скорее всего что да... но режим филлинга тоже очень важен, без его определения, если неправильно, не будет сделок.
А разные брокеры используют разные режимы, например на Финаме и Открытие ORDER_FILLING_IOC,

а у БКС   ORDER_FILLING_RETURN...

 
Gennady Mazur:

Может и зависит, и скорее всего что да... но режим филлинга тоже очень важен, без его определения, если неправильно, не будет сделок.
А разные брокеры используют разные режимы, например на Финаме и Открытие ORDER_FILLING_IOC,

а у БКС   ORDER_FILLING_RETURN...

Не знаю про ФОРТС ничего, но по форексу есть разница и я определяю именно по SYMBOL_TRADE_EXEMODE и именно по его значению заполняется поле структуры либо ORDER_FILLING_FOK либо ORDER_FILLING_RETURN, но ORDER_FILLING_IOC на форексе не используется, потому и предложение было осторожным. Проверь на разных вариантах. Ведь достаточно сляпать скрипт с получением одного единственного значения.

 
Alexey Viktorov:
Не знаю про ФОРТС ничего, но по форексу есть разница и я определяю именно по SYMBOL_TRADE_EXEMODE и именно по его значению заполняется поле структуры либо ORDER_FILLING_FOK либо ORDER_FILLING_RETURN, но ORDER_FILLING_IOC на форексе не используется, потому и предложение было осторожным. Проверь на разных вариантах. Ведь достаточно сляпать скрипт с получением одного единственного значения.

Я сам часто тестирую на форексе изначально стратегию, только потом переношу ее на биржу....Вот поэтому и хочу автоматизировать на все случаи сразу.
Написал один раз модуль, он тебе автоматом определил и не паришься.
 
Gennady Mazur:
Что то я не нашел такую...(
Какой билд терминала? Вероятно, плохо искали. Как раз пример из СБ как там обрабатывается политика исполнения.
 
Gennady Mazur:
Что то я не нашел такую...(
Alexey Kozitsyn:
Какой билд терминала? Вероятно, плохо искали. Как раз пример из СБ как там обрабатывается политика исполнения.
Видимо плохо. Как раз о том-же и я говорил. Вот весь код из СБ.

//+------------------------------------------------------------------+
//| Checks and corrects type of filling policy                       |
//+------------------------------------------------------------------+
bool CTrade::FillingCheck(const string symbol)
  {
//--- get execution mode of orders by symbol
   ENUM_SYMBOL_TRADE_EXECUTION exec=(ENUM_SYMBOL_TRADE_EXECUTION)SymbolInfoInteger(symbol,SYMBOL_TRADE_EXEMODE);
//--- check execution mode
   if(exec==SYMBOL_TRADE_EXECUTION_REQUEST || exec==SYMBOL_TRADE_EXECUTION_INSTANT)
     {
      //--- neccessary filling type will be placed automatically
      return(true);
     }
//--- get possible filling policy types by symbol
   uint filling=(uint)SymbolInfoInteger(symbol,SYMBOL_FILLING_MODE);
//--- check execution mode again
   if(exec==SYMBOL_TRADE_EXECUTION_MARKET)
     {
      //--- for the MARKET execution mode
      //--- analyze order
      if(m_request.action!=TRADE_ACTION_PENDING)
        {
         //--- in case of instant execution order
         //--- if the required filling policy is supported, add it to the request
         if(m_type_filling==ORDER_FILLING_FOK && (filling & SYMBOL_FILLING_FOK)!=0)
           {
            m_request.type_filling=m_type_filling;
            return(true);
           }
         if(m_type_filling==ORDER_FILLING_IOC && (filling & SYMBOL_FILLING_IOC)!=0)
           {
            m_request.type_filling=m_type_filling;
            return(true);
           }
         //--- wrong filling policy, set error code
         m_result.retcode=TRADE_RETCODE_INVALID_FILL;
         return(false);
        }
      return(true);
     }
//--- EXCHANGE execution mode
   switch(m_type_filling)
     {
      case ORDER_FILLING_FOK:
         //--- analyze order
         if(m_request.action==TRADE_ACTION_PENDING)
           {
            //--- in case of pending order
            //--- add the expiration mode to the request
            if(!ExpirationCheck(symbol))
               m_request.type_time=ORDER_TIME_DAY;
            //--- stop order?
            if(m_request.type==ORDER_TYPE_BUY_STOP || m_request.type==ORDER_TYPE_SELL_STOP)
              {
               //--- in case of stop order
               //--- add the corresponding filling policy to the request
               m_request.type_filling=ORDER_FILLING_RETURN;
               return(true);
              }
            }
         //--- in case of limit order or instant execution order
         //--- if the required filling policy is supported, add it to the request
         if((filling & SYMBOL_FILLING_FOK)!=0)
           {
            m_request.type_filling=m_type_filling;
            return(true);
           }
         //--- wrong filling policy, set error code
         m_result.retcode=TRADE_RETCODE_INVALID_FILL;
         return(false);
      case ORDER_FILLING_IOC:
         //--- analyze order
         if(m_request.action==TRADE_ACTION_PENDING)
           {
            //--- in case of pending order
            //--- add the expiration mode to the request
            if(!ExpirationCheck(symbol))
               m_request.type_time=ORDER_TIME_DAY;
            //--- stop order?
            if(m_request.type==ORDER_TYPE_BUY_STOP || m_request.type==ORDER_TYPE_SELL_STOP)
              {
               //--- in case of stop order
               //--- add the corresponding filling policy to the request
               m_request.type_filling=ORDER_FILLING_RETURN;
               return(true);
              }
           }
         //--- in case of limit order or instant execution order
         //--- if the required filling policy is supported, add it to the request
         if((filling & SYMBOL_FILLING_IOC)!=0)
           {
            m_request.type_filling=m_type_filling;
            return(true);
           }
         //--- wrong filling policy, set error code
         m_result.retcode=TRADE_RETCODE_INVALID_FILL;
         return(false);
      case ORDER_FILLING_RETURN:
         //--- add filling policy to the request
         m_request.type_filling=m_type_filling;
         return(true);
     }
//--- unknown execution mode, set error code
   m_result.retcode=TRADE_RETCODE_ERROR;
   return(false);
  }
Причина обращения: