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

 
Alexey Viktorov:
Видимо плохо. Как раз о том-же и я говорил. Вот весь код из СБ.


Искал в документации, а надо было прямо в модуле.... Ну что ж.... спасибо
 
Из библы
ENUM_ORDER_TYPE_FILLING GetFilling( const string Symb, const uint Type = ORDER_FILLING_FOK )
{
  const ENUM_SYMBOL_TRADE_EXECUTION ExeMode = (ENUM_SYMBOL_TRADE_EXECUTION)::SymbolInfoInteger(Symb, SYMBOL_TRADE_EXEMODE);
  const int FillingMode = (int)::SymbolInfoInteger(Symb, SYMBOL_FILLING_MODE);

  return((FillingMode == 0 || (Type >= ORDER_FILLING_RETURN) || ((FillingMode & (Type + 1)) != Type + 1)) ?
         (((ExeMode == SYMBOL_TRADE_EXECUTION_EXCHANGE) || (ExeMode == SYMBOL_TRADE_EXECUTION_INSTANT)) ?
           ORDER_FILLING_RETURN : ((FillingMode == SYMBOL_FILLING_IOC) ? ORDER_FILLING_IOC : ORDER_FILLING_FOK)) :
          (ENUM_ORDER_TYPE_FILLING)Type);
}
 
fxsaber:
Из библы
ENUM_ORDER_TYPE_FILLING GetFilling( const string Symb, const uint Type = ORDER_FILLING_FOK )
{
  const ENUM_SYMBOL_TRADE_EXECUTION ExeMode = (ENUM_SYMBOL_TRADE_EXECUTION)::SymbolInfoInteger(Symb, SYMBOL_TRADE_EXEMODE);
  const int FillingMode = (int)::SymbolInfoInteger(Symb, SYMBOL_FILLING_MODE);

  return((FillingMode == 0 || (Type >= ORDER_FILLING_RETURN) || ((FillingMode & (Type + 1)) != Type + 1)) ?
         (((ExeMode == SYMBOL_TRADE_EXECUTION_EXCHANGE) || (ExeMode == SYMBOL_TRADE_EXECUTION_INSTANT)) ?
           ORDER_FILLING_RETURN : ((FillingMode == SYMBOL_FILLING_IOC) ? ORDER_FILLING_IOC : ORDER_FILLING_FOK)) :
          (ENUM_ORDER_TYPE_FILLING)Type);
}
Вот за это огромнейшее спасибо....это для любого режима подойдет.
 

у меня подобная функция джля автоматизации определения режима и его использования.

ENUM_ORDER_TYPE_FILLING InitFillingMode(string n)
     {

      m_filling_type=(ENUM_ORDER_TYPE_FILLING)SymbolInfoInteger(n,SYMBOL_FILLING_MODE);

      if(( SYMBOL_FILLING_FOK  &m_filling_type)==SYMBOL_FILLING_FOK) SetTypeFilling(ORDER_FILLING_FOK);
      else if(( SYMBOL_FILLING_IOC  &m_filling_type)==SYMBOL_FILLING_IOC) SetTypeFilling(ORDER_FILLING_IOC);
      else SetTypeFilling(ORDER_FILLING_RETURN);

      return m_filling_type;
     }
 
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_EXECUTION_EXCHANGE


) а именно такой режим на Московской бирже

Доступны 3 метода  заливки(исполнения)

Всё/ничего     FOK

Всё/частично IOC

Венуть        RETURN

Политику исполнения выбираете Вы, в зависимости от Вашей стратегии. 

 
prostotrader:

Нет, невозможно.

Н-р, При режиме заключения сделок (

SYMBOL_TRADE_EXECUTION_EXCHANGE


) а именно такой режим на Московской бирже

Доступны 3 метода  заливки(исполнения)

Всё/ничего     FOK

Всё/частично IOC

Венуть        RETURN

Политику исполнения выбираете Вы, в зависимости от Вашей стратегии. 

Понятно, значит в инит просто надо проверять нужный режим на соответствие и разрешения...
жаль что нельзя автоматизировать...хотя можно выставить приоритеты по режимам...если нужный нельзя использовать то выбираем другой и т.д.
Тогда автомат получится
 
Gennady Mazur:
Понятно, значит в инит просто надо проверять нужный режим на соответствие и разрешения...
жаль что нельзя автоматизировать...хотя можно выставить приоритеты по режимам...если нужный нельзя использовать то выбираем другой и т.д.
Тогда автомат получится

Автомат получится если Вы выбрали и далее используете только 2 режима исполнения.

Как пралило RETURN имеет смысл использовать только в отложенных ордерах, которые "стоят" в стакане

(т.е Вы хотите покупать только по заданной Вами цене),

остаётся выбрать режим для рыночных и лимитных ордеров (FOK или IOC)

А дальше всё просто, если отложенный ордер, то RETURN, а если не отложенный, то FOK или IOC ,

в зависимости, что Вы решили использовать. 

Помните, что режим FOK, из-за слабой ликвидности на МБ, может привести эффективность

Вашей торговли к нулю. :( 

Пример

Допустим Вы увидели цену в стакане 1020 с объёмом 120 контрактов.

Используя режим FOK вы хотите купить по этой цене (лимитный ордер) 90 контрактов, но когда Ваш

ордер пришел на Биржу, то объём уже изменился и стал 89 - Вы НИЧЕГО не купите, а

если использовать IOC, то Вы купите оставшиеся 89 контрактов.

Добавлено

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

их используют в одновременной торговле на двух и более инструментах.

Купив по отложенному (или лимитному) ордеру N-ое колличество контрактов по одному инструменту,

необходимо, как можно скорее (ГАРАНТИРОВАННО), совершить ответную сделку с этим же кол-ом контрактов по другому инструменту(ам),

чтобы уровнять позиции. В этом случае, используется рыночный ордер.

 
Gennady Mazur:
Понятно, значит в инит просто надо проверять нужный режим на соответствие и разрешения...
жаль что нельзя автоматизировать...хотя можно выставить приоритеты по режимам...если нужный нельзя использовать то выбираем другой и т.д.
Тогда автомат получится
Автоматизируется.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

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

fxsaber, 2017.02.04 19:35

Из библы
ENUM_ORDER_TYPE_FILLING GetFilling( const string Symb, const uint Type = ORDER_FILLING_FOK )
{
  const ENUM_SYMBOL_TRADE_EXECUTION ExeMode = (ENUM_SYMBOL_TRADE_EXECUTION)::SymbolInfoInteger(Symb, SYMBOL_TRADE_EXEMODE);
  const int FillingMode = (int)::SymbolInfoInteger(Symb, SYMBOL_FILLING_MODE);

  return((FillingMode == 0 || (Type >= ORDER_FILLING_RETURN) || ((FillingMode & (Type + 1)) != Type + 1)) ?
         (((ExeMode == SYMBOL_TRADE_EXECUTION_EXCHANGE) || (ExeMode == SYMBOL_TRADE_EXECUTION_INSTANT)) ?
           ORDER_FILLING_RETURN : ((FillingMode == SYMBOL_FILLING_IOC) ? ORDER_FILLING_IOC : ORDER_FILLING_FOK)) :
          (ENUM_ORDER_TYPE_FILLING)Type);
}
Type - это тот filling, который Вы хотите установить. Если он корректный, то он и вернется. Если же ошибочный, то вернется исправленный.
 
fxsaber:
Автоматизируется.
Type - это тот filling, который Вы хотите установить. Если он корректный, то он и вернется. Если же ошибочный, то вернется исправленный.
Да..это очень хорошо и то что надо...
 
fxsaber:
Автоматизируется.
Type - это тот filling, который Вы хотите установить. Если он корректный, то он и вернется. Если же ошибочный, то вернется исправленный.
Т.е в ходе работы советника Вы  вызывете GetFilling ?