MarketBookAdd

 

Всем привет.

Помогите разобраться начинающему. Почему функция MarketBookAdd  в OnInit может возвращать false? Счёт реал в Открытии. Пробовал на демо в БКС - тоже самое. Судя по документации, такой код должен отрабатывать нормально, а у меня не работает.

int OnInit()
  {
   if(!MarketBookAdd(_Symbol))
     {
      printf("Не добавлен стакан по символу "+_Symbol);
      return( INIT_FAILED );
     }
   return(INIT_SUCCEEDED);
  }
 
Kuzmich:

Всем привет.

Помогите разобраться начинающему. Почему функция MarketBookAdd  в OnInit может возвращать false? Счёт реал в Открытии. Пробовал на демо в БКС - тоже самое. Судя по документации, такой код должен отрабатывать нормально, а у меня не работает.

Добрый день!

Сделайте так (чтобы посмотреть код ошибки):

int OnInit()
  {
   ResetLastError();
   if(!MarketBookAdd(_Symbol))
     {
      printf("Не добавлен стакан по символу "+_Symbol);
      Print( "Error code", GetLAstError() );
      return( INIT_FAILED );
     }
   return(INIT_SUCCEEDED);
  }
 

Ошибка 4901 - Стакан цен не может быть добавлен.

Это я и сам понимаю, что он не может добавиться :)   Вопрос почему? 


 
Kuzmich:

Ошибка 4901 - Стакан цен не может быть добавлен.

Это я и сам понимаю, что он не может добавиться :)   Вопрос почему? 


А инструмент какой?

И какой у Вас билд терминала? 

 
Михаил:
А инструмент какой?
RTS-12.15. Пробовал и на Si-12.15 - результат тот же :(
 
Михаил:

А инструмент какой?

И какой у Вас билд терминала? 

Билд 1210
 
Kuzmich:
RTS-12.15. Пробовал и на Si-12.15 - результат тот же :(

какой у Вас билд терминала?

и билд редактора? 

Вы всё правильно делаете. 

И включили ли Вы автоторговлю? 

 
Михаил:

какой у Вас билд терминала?

и билд редактора? 

Вы всё правильно делаете. 

Редактор тоже 1210. Уже голову сломал. Вроде правильно, а результата нет... :(
 
Kuzmich:
Редактор тоже 1210. Уже голову сломал. Вроде правильно, а результата нет... :(

Вызовите из OnInit эту функцию (перед установкой стакана):

//+------------------------------------------------------------------+
//| 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 );
} 
 

И ещё...

Вы в OnDeinit()

удаляете стакан?

void OnDeinit( const int reason )
{
  MarketBookRelease( _Symbol ); 

} 

 
Михаил:

Вызовите из OnInit эту функцию (перед установкой стакана):

Никаких ошибок при проверках. Счёт реал в Открытии. Там, вроде, все режимы работают.

Только ошибка 4901 при добавлении стакана. Мистика...

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