Есть ли решение на MT5 по переносу отложенных ордеров через клиринги Мосбиржи?

 

Здравствуйте, уважаемые коллеги.

Возможно кто-то сталкивался с подобной проблемой.

Есть ли решение на MT5 по переносу отложенных ордеров через клиринги Мосбиржи?

Как избавиться от рутинных действий по переустановке своих отложенных ордеров при каждом клиринге?

Дело в том, что некоторые мои отложенные ордера актуальны по несколько дней.


P.S. Как известно Good Till Cancel (действует до отмены) на Мосбирже не работает, а во время клиринга отложенные ордера автоматически удаляются самой Биржей.

 
Sergei Stefanskii:

Здравствуйте, уважаемые коллеги.

Возможно кто-то сталкивался с подобной проблемой.

Есть ли решение на MT5 по переносу отложенных ордеров через клиринги Мосбиржи?

Как избавиться от рутинных действий по переустановке своих отложенных ордеров при каждом клиринге?

Дело в том, что некоторые мои отложенные ордера актуальны по несколько дней.


P.S. Как известно Good Till Cancel (действует до отмены) на Мосбирже не работает, а во время клиринга отложенные ордера автоматически удаляются самой Биржей.

Есть.

 
Dmi3:

Есть.

 А расскажите, пожалуйста, поподробней.

 
Sergei Stefanskii:

 А расскажите, пожалуйста, поподробней.

Использую для проброса ордеров через вечерний клиринг на FORTS:

ORDER_TIME_SPECIFIED_DAY

Ордер будет действовать до 23:59:59 указанного дня. Если это время не попадает на торговую сессию, истечение наступит в ближайшее торговое время.


Есть более продолжительный вариант, но им не пользовался, так как таких потребностей у меня нет:

ORDER_TIME_SPECIFIED

Ордер будет действовать до даты истечения

 
Dmi3:

Использую для проброса ордеров через вечерний клиринг на FORTS:

ORDER_TIME_SPECIFIED_DAY

Ордер будет действовать до 23:59:59 указанного дня. Если это время не попадает на торговую сессию, истечение наступит в ближайшее торговое время.


Есть более продолжительный вариант, но им не пользовался, так как таких потребностей у меня нет:

ORDER_TIME_SPECIFIED

Ордер будет действовать до даты истечения

Я MQL5 пока не освоил, не пробовал на FORTS, но на Фондовой секции(акции) другую дату истечения ордера установить не получается (ругается, выдаёт ошибку),

И 23:50 и 18:45 Мосбиржа автоматом удаляет все мои отложки. То есть сейчас мне приходится выставлять их после 10ч(с началом основной сессии) и второй раз после 19ч(с началом вечерней сессии).

А утром всё по новой, всё с начала )


P.S. Кстати, на демо счете Фондовой секции такой проблемы нет, хоть на месяц вперед истечение можно выставить и ничего не трётся, ордера прекрасно живут изо дня в день.

Плохо, что эмуляцию клиринга для демо не сделали, было бы более правдоподобно и ближе к реалу (((

 
Sergei Stefanskii:

Здравствуйте, уважаемые коллеги.

Возможно кто-то сталкивался с подобной проблемой.

Есть ли решение на MT5 по переносу отложенных ордеров через клиринги Мосбиржи?

Как избавиться от рутинных действий по переустановке своих отложенных ордеров при каждом клиринге?

Дело в том, что некоторые мои отложенные ордера актуальны по несколько дней.


P.S. Как известно Good Till Cancel (действует до отмены) на Мосбирже не работает, а во время клиринга отложенные ордера автоматически удаляются самой Биржей.

С начала, при инициализации советника, нужно проверить какой режим экспирации ордеров поддерживается Биржей.

(В Вашем случае так)


int symbol_exp_type = int( SymbolInfoInteger(a_symbol, SYMBOL_EXPIRATION_MODE));
if
((symbol_exp_type & SYMBOL_EXPIRATION_SPECIFIED_DAY) != SYMBOL_EXPIRATION_SPECIFIED_DAY)   {     MessageBox("Символ " + a_symbol + " не поддерживает экспирацию SPECIFIED DAY!", "Ошибка", MB_OK | MB_ICONHAND);     return(false);   }

Если режим 

SYMBOL_EXPIRATION_SPECIFIED_DAY

поддерживается Биржей

То при заполнении массива request ордера вводите этот тип экспирации и желаемое время

request.type_time = ORDER_TIME_SPECIFIED_DAY;
request.expiration = TimeTradeServer() + datetime(24*3600); //В данном случае до конца вечерней сессии завтрашнего дня

Функция проверки для ФОРТС

//+------------------------------------------------------------------+
//| Expert Check Market Parameters function                          |
//+------------------------------------------------------------------+
bool CheckMarketParam(const string a_symbol)
{
//--- Check real accaunt
  ENUM_ACCOUNT_TRADE_MODE acc_trade_mode = ENUM_ACCOUNT_TRADE_MODE(AccountInfoInteger(ACCOUNT_TRADE_MODE));
#ifdef DEBUG
  if(acc_trade_mode != ACCOUNT_TRADE_MODE_DEMO)
  {
    MessageBox("Эксперт запущен не на демо-счёте!", "Ошибка", MB_OK | MB_ICONHAND);
    return(false);
  }
#else
  if(acc_trade_mode != ACCOUNT_TRADE_MODE_REAL)
  {
    MessageBox("Эксперт запущен не на реальном счёте!", "Ошибка", MB_OK | MB_ICONHAND);
    return(false);
  }
#endif  
//--- Check margine mode
  ENUM_ACCOUNT_MARGIN_MODE margin_mode = ENUM_ACCOUNT_MARGIN_MODE(AccountInfoInteger(ACCOUNT_MARGIN_MODE));
  if(margin_mode != ACCOUNT_MARGIN_MODE_RETAIL_NETTING)
  {
    MessageBox("Брокер не поддерживает биржевой расчёт маржи в режиме 'Неттинг'!", "Ошибка", MB_OK | MB_ICONHAND);
    return(false);
  }
//--- Check symbol calc mode 
  ENUM_SYMBOL_CALC_MODE calc_mode = ENUM_SYMBOL_CALC_MODE(SymbolInfoInteger(a_symbol, SYMBOL_TRADE_CALC_MODE));
  
  if((calc_mode != SYMBOL_CALC_MODE_EXCH_FUTURES_FORTS) && (calc_mode != SYMBOL_CALC_MODE_EXCH_OPTIONS_MARGIN))
  {
    MessageBox("Символ " + a_symbol + " не поддерживает расчёт фьючерсов для FORTS!", "Ошибка", MB_OK | MB_ICONHAND);
    Print("Текуший расчёт: ", EnumToString(calc_mode));
    return( false );
  } 
//--- Check for full mode
  ENUM_SYMBOL_TRADE_MODE trade_mode = ENUM_SYMBOL_TRADE_MODE(SymbolInfoInteger(a_symbol, SYMBOL_TRADE_MODE));
  
  if(trade_mode != SYMBOL_TRADE_MODE_FULL)
  {
    MessageBox("Символ " + a_symbol + " не поддерживает полную торговлю!", "Ошибка", MB_OK | MB_ICONHAND);
    return(false);
  }
//--- Check trade execution mode
  ENUM_SYMBOL_TRADE_EXECUTION market_info = ENUM_SYMBOL_TRADE_EXECUTION( SymbolInfoInteger(a_symbol, SYMBOL_TRADE_EXEMODE));
    
  if((market_info & SYMBOL_TRADE_EXECUTION_EXCHANGE) != SYMBOL_TRADE_EXECUTION_EXCHANGE)
  {
    MessageBox("Символ " + a_symbol + " не поддерживает TRADE EXECUTION EXCHANGE режим!", "Ошибка", MB_OK | MB_ICONHAND);
    return(false);
  }
//--- Check orders mode
  int order_mode = int(SymbolInfoInteger(a_symbol, SYMBOL_ORDER_MODE));
  
  if((SYMBOL_ORDER_MARKET & order_mode) != SYMBOL_ORDER_MARKET)
  {
    MessageBox("Символ " + a_symbol + " не поддерживает Market Execution режим установки ордеров!", "Ошибка", MB_OK | MB_ICONHAND);
    return(false);
  }
  
  if((SYMBOL_ORDER_LIMIT & order_mode) != SYMBOL_ORDER_LIMIT)
  {
    MessageBox("Символ " + a_symbol + " не поддерживает Limit режим установки ордеров!", "Ошибка", MB_OK | MB_ICONHAND);
    return(false);
  }
  
  if((SYMBOL_ORDER_STOP_LIMIT & order_mode) != SYMBOL_ORDER_STOP_LIMIT)
  {
    MessageBox("Символ " + a_symbol + " не поддерживает Stop Limit режим установки ордеров!", "Ошибка", MB_OK | MB_ICONHAND);
    return(false);
  }
  
  if((SYMBOL_ORDER_STOP & order_mode) != SYMBOL_ORDER_STOP)
  {
    MessageBox( "Символ " + a_symbol + " не поддерживает Stop режим установки ордеров!", "Ошибка", MB_OK | MB_ICONHAND );
    return(false);
  }
  
  if((SYMBOL_ORDER_SL & order_mode) != SYMBOL_ORDER_SL)
  {
    MessageBox( "Символ " + a_symbol + " не поддерживает Stop Loss режим установки ордеров!", "Ошибка", MB_OK | MB_ICONHAND );
    return(false);
  }
  
  if((SYMBOL_ORDER_TP & order_mode) != SYMBOL_ORDER_TP)
  {
    MessageBox( "Символ " + a_symbol + " не поддерживает Take Profit режим установки ордеров!", "Ошибка", MB_OK | MB_ICONHAND );
    return(false);
  }
//---Filing mode
  int filling_mode = int(SymbolInfoInteger(a_symbol, SYMBOL_FILLING_MODE));
  
  if((SYMBOL_FILLING_IOC & filling_mode) != SYMBOL_FILLING_IOC)
  {
    MessageBox("Символ " + a_symbol + " не поддерживает filling IOC режим исполнения ордеров!", "Ошибка", MB_OK | MB_ICONHAND);
    return(false);
  }
  
  if((SYMBOL_FILLING_FOK & filling_mode) != SYMBOL_FILLING_FOK)
  {
    MessageBox("Символ " + a_symbol + " не поддерживает filling FOK режим исполнения ордеров!", "Ошибка", MB_OK | MB_ICONHAND);
    return(false);
  }
//---Ckeck expiration
  int symbol_exp_type = int( SymbolInfoInteger(a_symbol, SYMBOL_EXPIRATION_MODE));
//---  
  if((symbol_exp_type & SYMBOL_EXPIRATION_DAY) != SYMBOL_EXPIRATION_DAY)
  {
    MessageBox("Символ " + a_symbol + " не поддерживает экспирацию DAY!", "Ошибка", MB_OK | MB_ICONHAND);
    return(false);
  }
  if((symbol_exp_type & SYMBOL_EXPIRATION_SPECIFIED_DAY) != SYMBOL_EXPIRATION_SPECIFIED_DAY)
  {
    MessageBox("Символ " + a_symbol + " не поддерживает экспирацию SPECIFIED DAY!", "Ошибка", MB_OK | MB_ICONHAND);
    return(false);
  }
  return(true);
}
 

На фортсе всегда, когда устанавливаю отложенный, задаю здесь дату +1 месяц: 



и все хорошо, ордера не исчезают после клиринга. это бкс.

 
Aleksey Sergan:

На фортсе всегда, когда устанавливаю отложенный, задаю здесь дату +1 месяц: 



и все хорошо, ордера не исчезают после клиринга. это бкс.

Я выше уже писал, что этот способ на реале Фондовой секции Мосбиржи не проходит(на демо, пожалуйста)

 
Sergei Stefanskii:

Я выше уже писал, что этот способ на реале Фондовой секции Мосбиржи не проходит(на демо, пожалуйста)

а если вместо отложенного ордера устанавливать Горизонтальную линию? или на бирже эксперты не работают?

- я к чему!? - есть эксперты которые открывают позиции от Горизонтальных или Трендовых линии.  

 
Sergei Stefanskii:

Я выше уже писал, что этот способ на реале Фондовой секции Мосбиржи не проходит(на демо, пожалуйста)

Так на фондовой секции, или на ФОРТС? Если на фондовой, то причём тут клиринг? А если ФОРТС - всё работает.

 
SanAlex:

а если вместо отложенного ордера устанавливать Горизонтальную линию? или на бирже эксперты не работают?

- я к чему!? - есть эксперты которые открывают позиции от Горизонтальных или Трендовых линии.  

Да, так можно, но в этом случае, как вы сами написали нужен эксперт.

У меня уже есть на инструменте эксперт, поэтому в моём случае пришлось бы значительно дополнять и увязывать его функционал работой от линий.

Хотелось другого решения, но возможно именно ваш способ будет работать надёжней других методов.

Причина обращения: