Всем привет.
Помогите разобраться начинающему. Почему функция MarketBookAdd в OnInit может возвращать false? Счёт реал в Открытии. Пробовал на демо в БКС - тоже самое. Судя по документации, такой код должен отрабатывать нормально, а у меня не работает.
Добрый день!
Сделайте так (чтобы посмотреть код ошибки):
int OnInit() { ResetLastError(); if(!MarketBookAdd(_Symbol)) { printf("Не добавлен стакан по символу "+_Symbol); Print( "Error code", GetLAstError() ); return( INIT_FAILED ); } return(INIT_SUCCEEDED); }
Ошибка 4901 - Стакан цен не может быть добавлен.
Это я и сам понимаю, что он не может добавиться :) Вопрос почему?
Ошибка 4901 - Стакан цен не может быть добавлен.
Это я и сам понимаю, что он не может добавиться :) Вопрос почему?
А инструмент какой?
И какой у Вас билд терминала?
А инструмент какой?
А инструмент какой?
И какой у Вас билд терминала?
RTS-12.15. Пробовал и на Si-12.15 - результат тот же :(
какой у Вас билд терминала?
и билд редактора?
Вы всё правильно делаете.
И включили ли Вы автоторговлю?
какой у Вас билд терминала?
и билд редактора?
Вы всё правильно делаете.
Редактор тоже 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 при добавлении стакана. Мистика...
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Всем привет.
Помогите разобраться начинающему. Почему функция MarketBookAdd в OnInit может возвращать false? Счёт реал в Открытии. Пробовал на демо в БКС - тоже самое. Судя по документации, такой код должен отрабатывать нормально, а у меня не работает.