Ошибка [unsupported filling mode] у БКС. - страница 3

 
Karputov Vladimir:
В таких случаях нужно брать дубину и вежливо попросить автора такого безобразия немедленно исправить ошибку.
Автор не обязан знать на истории каких брокеров с каким типом ордера я буду пытаться тестить его произведение.
 
Youri Tarshecki:
Автор не обязан знать на истории каких брокеров я буду пытаться тестить его произведение.
Программист обязан обрабатывать ошибки и выстраивать логику программу в этом соответствии.
 
Karputov Vladimir:
Программист обязан обрабатывать ошибки и выстраивать логику программу в этом соответствии.
Но тогда и биржевой брокер должен выкладывать ИСТОРИЮ всегоСТАКАНА, а не просто тики с объемами.
 
Youri Tarshecki:
Но тогда и биржевой брокер должен выкладывать ИСТОРИЮ СТАКАНА, а не просто тики с объемами.
У Вас Стокгольмский синдром применительно к покупателю недоделанного продукта из Маркета :)
 
Karputov Vladimir:
У Вас Стокгольмский синдром применительно к покупателю недоделанного продукта из Маркета :)
Да нет, я стараюсь сам писать, но выявилась проблема тестировки истории биржевых котировок и тут явно нужен какой-то компромисс.:) Те если выкладываешь плоскую историю, то и нечего требовать правдоподобныхх ордеров для обычного тестирования.
 
Youri Tarshecki:
Автор не обязан знать на истории каких брокеров с каким типом ордера я буду пытаться тестить его произведение.

Обязан. Нормальный автор сначала проверит, что поддерживает брокер.

Например так:

//+------------------------------------------------------------------+
//| Expert Check Market Parameters function                          |
//+------------------------------------------------------------------+
bool CheckMarketParam( const string a_symbol )
{
//--- 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 )
  {
    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 );
} 
 

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

Ошибка [unsupported filling mode] у БКС.

Михаил, 2015.09.03 19:42

Обязан. Нормальный автор сначала проверит, что поддерживает брокер.

Например так:

//+------------------------------------------------------------------+
//| Expert Check Market Parameters function                          |
//+------------------------------------------------------------------+
bool CheckMarketParam( const string a_symbol )
{
//--- 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 )
  {
    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 );
} 

Зафиксирую. Чтобы не удалили потом :)
 
Karputov Vladimir:

Зафиксирую. Чтобы не удалили потом :)
У Вас всё в порядке?
 

Недавно
у меня тоже возникла эта проблема с брокером БКС Форекс - непонятно, как правильно задать политику исполнения при отправке торгового запроса. Перепробовал все возможные варианты заполнения этого поля:

ORDER_FILLING_FOK

Данная политика исполнения означает, что ордер может быть исполнен исключительно в указанном объеме. Если на рынке в данный момент не присутствует достаточного объема финансового инструмента, то ордер не будет исполнен. Необходимый объем может быть составлен из нескольких предложений, доступных в данный момент на рынке.

ORDER_FILLING_IOC

Означает согласие совершить сделку по максимально доступному на рынке объему в пределах указанного в ордере. В случае невозможности полного исполнения ордер будет исполнен на доступный объем, а неисполненный объем ордера будет отменен.

ORDER_FILLING_RETURN

Данный режим используется для рыночных (ORDER_TYPE_BUY и ORDER_TYPE_SELL), лимитных и стоп-лимитных ордеров (ORDER_TYPE_BUY_LIMIT, ORDER_TYPE_SELL_LIMIT, ORDER_TYPE_BUY_STOP_LIMIT и ORDER_TYPE_SELL_STOP_LIMIT) и только в режимах "Исполнение по рынку" и "Биржевое исполнение". В случае частичного исполнения рыночный или лимитный ордер с остаточным объемом не снимается, а продолжает действовать.


Но при любом выборе торговый запрос не проходил предварительную проверку перед отправкой с помощью функции OrderCheck()

Код ошибки #4002 Ошибочный параметр при внутреннем вызове функции клиентского терминала
Код ответа #10030 Указан неподдерживаемый тип исполнения ордера по остатку

Причем с
оветник работает без ошибок в терминалах МТ5 у других брокеров, причем как биржевых, так и форексных, включая терминал MT5 биржевого брокера БКС. Я отправил свой вопрос форексному брокеру БКС, но письменного ответа я так и не получил. Через две недели я напомнил о своем вопросе по телефону. После этого мне перезвонили и порекомендовали отключить предварительную проверку торгового запроса перед отправкой запроса на сервер. Отключил предварительную проверку, не помогло, советник по-прежнему получает ошибку #10030 "Указан не поддерживаемый тип исполнения ордера по остатку".

После повторного письма, меня поблагодарили за обращение и сказали, что "компания БКС Форекс не осуществляет поддержку по вопросам работы торговых экспертов и не консультирует по языковой среде mql. Для консультаций и разъяснений по обозначенным Вами вопросам, компанией-разработчиком торговой платформы Metatrader был создал специальный форум, куда мы Вам и рекомендуем обратиться. В случае возникновения дополнительных вопросов, пожалуйста, обращайтесь в службу поддержки, мы всегда рады Вам помочь! С уважением, Отдел по работе с клиентами БКС-Форекс".

И вот я здесь, и прошу ответить знающую публику, какими должны быть рабочие параметры торгового запроса, чтобы он прошел проверку на политику исполнения ордера по остатку?


 
Eugene Myzrov:

Недавно
у меня тоже возникла эта проблема с брокером БКС Форекс - непонятно, как правильно задать политику исполнения при отправке торгового запроса. Перепробовал все возможные варианты заполнения этого поля:

ORDER_FILLING_FOK

Данная политика исполнения означает, что ордер может быть исполнен исключительно в указанном объеме. Если на рынке в данный момент не присутствует достаточного объема финансового инструмента, то ордер не будет исполнен. Необходимый объем может быть составлен из нескольких предложений, доступных в данный момент на рынке.

ORDER_FILLING_IOC

Означает согласие совершить сделку по максимально доступному на рынке объему в пределах указанного в ордере. В случае невозможности полного исполнения ордер будет исполнен на доступный объем, а неисполненный объем ордера будет отменен.

ORDER_FILLING_RETURN

Данный режим используется для рыночных (ORDER_TYPE_BUY и ORDER_TYPE_SELL), лимитных и стоп-лимитных ордеров (ORDER_TYPE_BUY_LIMIT, ORDER_TYPE_SELL_LIMIT, ORDER_TYPE_BUY_STOP_LIMIT и ORDER_TYPE_SELL_STOP_LIMIT) и только в режимах "Исполнение по рынку" и "Биржевое исполнение". В случае частичного исполнения рыночный или лимитный ордер с остаточным объемом не снимается, а продолжает действовать.


Но при любом выборе торговый запрос не проходил предварительную проверку перед отправкой с помощью функции OrderCheck()

Код ошибки #4002 Ошибочный параметр при внутреннем вызове функции клиентского терминала
Код ответа #10030 Указан неподдерживаемый тип исполнения ордера по остатку

Причем с
оветник работает без ошибок в терминалах МТ5 у других брокеров, причем как биржевых, так и форексных, включая терминал MT5 биржевого брокера БКС. Я отправил свой вопрос форексному брокеру БКС, но письменного ответа я так и не получил. Через две недели я напомнил о своем вопросе по телефону. После этого мне перезвонили и порекомендовали отключить предварительную проверку торгового запроса перед отправкой запроса на сервер. Отключил предварительную проверку, не помогло, советник по-прежнему получает ошибку #10030 "Указан не поддерживаемый тип исполнения ордера по остатку".

После повторного письма, меня поблагодарили за обращение и сказали, что "компания БКС Форекс не осуществляет поддержку по вопросам работы торговых экспертов и не консультирует по языковой среде mql. Для консультаций и разъяснений по обозначенным Вами вопросам, компанией-разработчиком торговой платформы Metatrader был создал специальный форум, куда мы Вам и рекомендуем обратиться. В случае возникновения дополнительных вопросов, пожалуйста, обращайтесь в службу поддержки, мы всегда рады Вам помочь! С уважением, Отдел по работе с клиентами БКС-Форекс".

И вот я здесь, и прошу ответить знающую публику, какими должны быть рабочие параметры торгового запроса, чтобы он прошел проверку на политику исполнения ордера по остатку?


Два раза написано:

https://www.mql5.com/ru/forum/63657/page3#comment_1875787 

Ошибка [unsupported filling mode] у БКС.
Ошибка [unsupported filling mode] у БКС.
  • www.mql5.com
Открыл у БКС демосчет, а на нем невозможно протестить никакой советник. - Страница 3 - Категория: автоматические торговые системы