Советник сам уходит с графика

 

Здравствуйте, такая проблема:

Если советник прокручивает через цикл таймфреймы и инструменты, не используя какие-либо технические индикаторы, то все ок, все работает. Но стоит мне подключить любой индикаторный буффер, как проходит только один прогон по иксу, а после этого советник вылетает. В прямом смысле, он убегает с графика. Функция де инит - пустая, там есть только стандартный EventKillTimer()

Терминалы переустанавливал, пользовательские данные удалял. Повторюсь, советник отлично работал больше недели 24/7, а потом взял и перестал производить запросы к базе. В итоге - сейчас сервис крутится на более примитивной логике, без использования каких-либо технических индикаторов

 Помогите, пожалуйста, советник связан с подачей торговых сигналов, все работало до 12-30 по мск вчера, после чего все отказывается работать (как только подключаешь индикатор - один прогон по иксу - и индикатор вылетел).

 
Эдуард Климуш:

Здравствуйте, такая проблема:

Если советник прокручивает через цикл таймфреймы и инструменты, не используя какие-либо технические индикаторы, то все ок, все работает. Но стоит мне подключить любой индикаторный буффер, как проходит только один прогон по иксу, а после этого советник вылетает. В прямом смысле, он убегает с графика. Функция де инит - пустая, там есть только стандартный EventKillTimer()

Терминалы переустанавливал, пользовательские данные удалял. Повторюсь, советник отлично работал больше недели 24/7, а потом взял и перестал производить запросы к базе. В итоге - сейчас сервис крутится на более примитивной логике, без использования каких-либо технических индикаторов

 Помогите, пожалуйста, советник связан с подачей торговых сигналов, все работало до 12-30 по мск вчера, после чего все отказывается работать (как только подключаешь индикатор - один прогон по иксу - и индикатор вылетел).

А версия 1502? Я посмотрел, терминал в ту пятницу обновился, может из-за этого...
 
Эдуард Климуш:

Здравствуйте, такая проблема:

Если советник прокручивает через цикл таймфреймы и инструменты, не используя какие-либо технические индикаторы, то все ок, все работает. Но стоит мне подключить любой индикаторный буффер, как проходит только один прогон по иксу, а после этого советник вылетает. В прямом смысле, он убегает с графика. Функция де инит - пустая, там есть только стандартный EventKillTimer()

Терминалы переустанавливал, пользовательские данные удалял. Повторюсь, советник отлично работал больше недели 24/7, а потом взял и перестал производить запросы к базе. В итоге - сейчас сервис крутится на более примитивной логике, без использования каких-либо технических индикаторов

 Помогите, пожалуйста, советник связан с подачей торговых сигналов, все работало до 12-30 по мск вчера, после чего все отказывается работать (как только подключаешь индикатор - один прогон по иксу - и индикатор вылетел).

К чему, какой, вы подключаете индикаторный буфер? Что за чудеса?

Вставляете вызов индикатора в код советника?

Накладываете индикатор на график с советником?

Какой прогон, по какому иксу?

В журнале-то что написано после завершения работы советника?

 

Сейчас советник перестал пропадать, однако в другом - все осталось как и было.

вот код инициализации советника, если запустить - то алерты идут только на пару EURUSD по всем таймфреймам, дальше - нет.

int OnInit()
  {
  EventSetTimer(Timer);  
char           data[];
char           result[];
string         aQuery;
string         headers;
int            handle;
double         buffer[];
int MA_handle [23][9];
         double MA_buffer[];
for (int x=0; x<23; x++)
{
   for (int y=0; y<9; y++)
      {
         MA_handle[x][y]= iMA(aSymbol(x),tf(y),21,0,MODE_SMA,PRICE_CLOSE);
         CopyBuffer(MA_handle[x][y],0,0,100,MA_buffer);
         ArraySetAsSeries (MA_buffer, true);
         Alert (aSymbol (x)+ " " + tfs(y) + " " + DoubleToString (MA_buffer[0], 8));
      }
}
return(0);
   return(INIT_SUCCEEDED);
  }
Укоротил инициализацию до такого размера, чтобы наглядно было. Если мы закомментируем первые три строчки внутри цикла и уберем из алерта буфер - пойдет прогон всех таймфреймов и инструментов, быстро, достаточно быстро. Если же мы оставим все как есть - в алертах будут появляться значения раз в несколько десятков секунд. Почему - для меня загадка
 
Эдуард Климуш:

вот код инициализации советника, если запустить - то алерты идут только на пару EURUSD по всем таймфреймам, дальше - нет.

  1. Зачем на каждой итерации цикла производится одно и то же действие - ArraySetAsSeries?
  2. Почему нет проверки результата iMA и CopyBuffer? Ведь обращение производится к разным символам и таймфреймам. А данные по ним вряд ли готовы прямо сейчас. В справке прямо об этом указано:

Примечание

При запросе данных из индикатора, если запрашиваемые таймсерии еще не построены или их необходимо загрузить с сервера, то функция сразу же вернет -1, но при этом сам процесс загрузки/построения будет инициирован.

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



 
Ihor Herasko:
  1. Зачем на каждой итерации цикла производится одно и то же действие - ArraySetAsSeries?
  2. Почему нет проверки результата iMA и CopyBuffer? Ведь обращение производится к разным символам и таймфреймам. А данные по ним вряд ли готовы прямо сейчас. В справке прямо об этом указано:


Спасибо, тогда вопрос простой - каким образом нам избежать такой ошибки? Прогрузить локально все эти символы и таймфреймы? И почему такая ситуация произошла именно после недели стабильной работы? Просто в дальнейшем у нас в функции OnTimer() нужно будет использовать значение индикатора по предыдущему бару на всех инструментах и всех таймфреймах
 
Эдуард Климуш:
Спасибо, тогда вопрос простой - каким образом нам избежать такой ошибки? Прогрузить локально все эти символы и таймфреймы? И почему такая ситуация произошла именно после недели стабильной работы? Просто в дальнейшем у нас в функции OnTimer() нужно будет использовать значение индикатора по предыдущему бару на всех инструментах и всех таймфреймах
Ошибок избежать невозможно, а вот учесть их последствия - работа программиста. Так, если данные не были получены в OnInit, то нужно продолжить их подгрузку в другой функции (OnTick или OnTimer). До тех пор, пока не получены все необходимые данные, основной код не должен запускаться.
 
Ihor Herasko:
Ошибок избежать невозможно, а вот учесть их последствия - работа программиста. Так, если данные не были получены в OnInit, то нужно продолжить их подгрузку в другой функции (OnTick или OnTimer). До тех пор, пока не получены все необходимые данные, основной код не должен запускаться.
как тогда могло получиться так, что все работало как часы больше недели, а сейчас - не работает? Просто в один прекрасный момент я увидел, что в сервис больше не поступают данные, проверил советника - а он пишет, что не может найти данные индикатора
 
Эдуард Климуш:
как тогда могло получиться так, что все работало как часы больше недели, а сейчас - не работает? Просто в один прекрасный момент я увидел, что в сервис больше не поступают данные, проверил советника - а он пишет, что не может найти данные индикатора

Просто сейчас они подгружаются уже больше 10 минут, а раньше все работало сразу - при инициализации сразу же и сигналы формировались, и запросы в сервис отправлялись и все было хорошо, с чем связано нынешнее состояние - не могу понять 

 
Эдуард Климуш:
как тогда могло получиться так, что все работало как часы больше недели, а сейчас - не работает? Просто в один прекрасный момент я увидел, что в сервис больше не поступают данные, проверил советника - а он пишет, что не может найти данные индикатора

так вы бы журнал и прислали.

Если советник вылетает, то скорей всего попали на критикал ерор в ините или в Онтаймере, или в ОнТике. До Деинита он просто не дошел, поэтому пустой или нет - неважно 

 
Galina Bobro:

так вы бы журнал и прислали.

Если советник вылетает, то скорей всего попали на критикал ерор в ините или в Онтаймере, или в ОнТике. До Деинита он просто не дошел, поэтому пустой или нет - неважно 

В общем, убрал из цикла месячные графики (на них грузилось все нереально долго) - и все заработало, терминал успевает отдавать сигналы до следующего запроса. Но почему он месячные графики так долго грузит - вопрос открыт
Причина обращения: