Всем привет!
Столкнулся с такой проблемой: простецкий код индикатора
Запускаю, см. журнал
2018.02.02 08:58:34.564 test EURUSD.m,H4: initialized
2018.02.02 08:58:34.564 test EURUSD.m,H4: UserLogin=2302693
2018.02.02 08:58:33.580 Custom indicator test EURUSD.m,H4: loaded successfully
Все ок - работает
Закрываю терминал. Запускаю его заново. И... брюки превращаются...
2018.02.02 09:00:16.016 Custom indicator test EURUSD.m,H4: removed
2018.02.02 09:00:16.016 test EURUSD.m,H4: uninit reason 8
2018.02.02 09:00:16.016 test EURUSD.m,H4: initialization failed (1)
2018.02.02 09:00:16.016 test EURUSD.m,H4: Alert: Номер счета = 0!
2018.02.02 09:00:16.016 test EURUSD.m,H4: UserLogin=0
2018.02.02 09:00:16.000 Custom indicator test EURUSD.m,H4: loaded successfully
Это я такой "умный" или так задумано разработчиком? Что не так в коде?
Сам процесс подключения занимает какое-то время. Плюс может быть ситуация, когда нет интернет соединения - как думаете, что в таком случае вернёт функция AccountInfoInteger(ACCOUNT_LOGIN) ?
Попробуйте этот код:
//+------------------------------------------------------------------+ //| test.mq4 | //+------------------------------------------------------------------+ #property strict #property indicator_chart_window //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping long UserLogin=AccountInfoInteger(ACCOUNT_LOGIN); Print(__FUNCTION__,", UserLogin=",UserLogin); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //--- long UserLogin=AccountInfoInteger(ACCOUNT_LOGIN); Print(__FUNCTION__,", UserLogin=",UserLogin); //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+
прикрепите индикатор и перезагрузите терминал. Затем отключите интернет и снова запустите терминал
Сам процесс подключения занимает какое-то время. Плюс может быть ситуация, когда нет интернет соединения - как думаете, что в таком случае вернёт функция AccountInfoInteger(ACCOUNT_LOGIN) ?
Попробуйте этот код:
прикрепите индикатор и перезагрузите терминал. Затем отключите интернет и снова запустите терминал
Ок, результат такой - понадобилось 2 тика, чтобы получить номер счета
0 11:01:04.890 Custom indicator test EURUSD.m,M5: loaded successfully
0 11:01:07.327 test EURUSD.m,M5: OnInit, UserLogin=2302693
0 11:01:07.327 test EURUSD.m,M5: initialized
0 11:01:07.327 test EURUSD.m,M5: OnCalculate, UserLogin=2302693
0 11:01:08.046 test EURUSD.m,M5: OnCalculate, UserLogin=2302693
....
0 11:01:58.049 test EURUSD.m,M5: OnCalculate, UserLogin=2302693
0 11:01:58.346 test EURUSD.m,M5: uninit reason 9
0 11:01:58.555 Custom indicator test EURUSD.m,M5: removed
перезапуск терминала
0 11:03:40.703 Custom indicator test EURUSD.m,M5: loaded successfully
0 11:03:40.719 test EURUSD.m,M5: OnInit, UserLogin=0
0 11:03:40.719 test EURUSD.m,M5: initialized
0 11:03:40.719 test EURUSD.m,M5: OnCalculate, UserLogin=0
0 11:03:42.051 test EURUSD.m,M5: OnCalculate, UserLogin=0
0 11:03:43.140 test EURUSD.m,M5: OnCalculate, UserLogin=2302693
0 11:03:43.140 test EURUSD.m,M5: OnCalculate, UserLogin=2302693
Понял - подключение к счету и загрузка кода идет асинхронно. будем работать с тем что есть.
Спасибо за подсказку.
Сам процесс подключения занимает какое-то время. Плюс может быть ситуация, когда нет интернет соединения - как думаете, что в таком случае вернёт функция AccountInfoInteger(ACCOUNT_LOGIN) ?
Попробуйте этот код:
прикрепите индикатор и перезагрузите терминал. Затем отключите интернет и снова запустите терминал
Обращение к AccountInfoInteger(ACCOUNT_LOGIN) один раз:
//+------------------------------------------------------------------+ //| test.mq4 | //+------------------------------------------------------------------+ #property strict #property indicator_chart_window //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping long UserLogin=AccountInfoInteger(ACCOUNT_LOGIN); Print(__FUNCTION__,", UserLogin=",UserLogin); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //--- if(UserLogin <= 0) OnInit(); Print(__FUNCTION__,", UserLogin=",UserLogin); //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+
Обращение к AccountInfoInteger(ACCOUNT_LOGIN) один раз:
Ну как же - один раз? На каждом тике все равно обращаемся. Правда, непонятно, что это за UserLogin в OnCalculate. Переменная нигде не объявлена. А та переменная UserLogin, что в OnInit, с ним и пропадает.

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Всем привет!
Столкнулся с такой проблемой: простецкий код индикатора
Запускаю, см. журнал
2018.02.02 08:58:34.564 test EURUSD.m,H4: initialized
2018.02.02 08:58:34.564 test EURUSD.m,H4: UserLogin=2302693
2018.02.02 08:58:33.580 Custom indicator test EURUSD.m,H4: loaded successfully
Все ок - работает
Закрываю терминал. Запускаю его заново. И... брюки превращаются...
2018.02.02 09:00:16.016 Custom indicator test EURUSD.m,H4: removed
2018.02.02 09:00:16.016 test EURUSD.m,H4: uninit reason 8
2018.02.02 09:00:16.016 test EURUSD.m,H4: initialization failed (1)
2018.02.02 09:00:16.016 test EURUSD.m,H4: Alert: Номер счета = 0!
2018.02.02 09:00:16.016 test EURUSD.m,H4: UserLogin=0
2018.02.02 09:00:16.000 Custom indicator test EURUSD.m,H4: loaded successfully
Это я такой "умный" или так задумано разработчиком? Что не так в коде?