Ошибки, баги, вопросы - страница 2584

 
Georgiy Merts:

А такой вопрос.

Иногда у меня при оптимизации, при определенном наборе параметров возникает ошибка выхода за границы массива. Ошибка возникает достаточно редко, воспроизвести ее не удается. Нужно знать набор параметров, при котором возникает эта ошибка.  Как этот набор параметров определить ? В логе тестера есть номер прохода, но в отчете этого набора параметров нет. Где поглядеть, какие параметры в этом проходе использовались ?

Модифицируйте эту библу на запись принтов в Common-файл.

 
И еще ошибка - если в параметрах одним из параметров является период ENUM_TIMEFRAMES, то на графике 1D или 2D по этому параметру - у меня почему-то нет отображения. Это только у меня так ?
 
fxsaber:

Модифицируйте эту библу на запись принтов в Common-файл.

Да, если других вариантов нет - это нормальное решение. Спасибо.

И давай на "ты", мы ж давно виртуально знаем друг друга.

 
Я правильно понимаю, что в mql указатели на переменную не работают?
void OnStart()
{ 
   int *ptr;
}

Компилятор говорит, указатель не может быть использован.

 
Roman:
Я правильно понимаю, что в mql указатели на переменную не работают?

Компилятор говорит, указатель не может быть использован.

Вроде как указатели могут быть только на объекты, и получены путем вызова GetPointer()

 
Georgiy Merts:

Вроде как указатели могут быть только на объекты, и получены путем вызова GetPointer()

Благодарю. Да, с объектами класса проблем нет, по этому и удивился, что с переменными не работает, печалька однако.

 

У меня в ЛК некуда прописать брокерские счета.

Когда открываю "Избранное", то там просто белая страница.

В чём дело?

Не могу ни посмотреть счета на mql5, ни подписаться к кому-либо.

 

В индикаторе не происходит вызов OnDeinit при удалении индикатора, если в нем присутсвует функция ChartIndicatorGet, которая просто считывает хэндл самого себя даже без занесения хэндла в переменную.

#property indicator_chart_window

int OnInit() {
   for (int i=0; i<ChartIndicatorsTotal(0,0); i++)  
       ChartIndicatorGet(0,0,ChartIndicatorName(0,0,i));
   return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+

void OnDeinit(const int reason) {
   Print("Deinit");
}

//+------------------------------------------------------------------+

int OnCalculate(const int rates_total, const int prev_calculated, const int begin, const double &price[]) {
   return(rates_total);
}

Причем, если после удаления индикатора произвести перекомпиляцию индикатора, то запоздалый вызов OnDeinit происходит (выполняется печать Print("Deinit");).

Разве это ОК?


Билд 2168

Файлы:
 
Nikolai Semko:

В индикаторе не происходит вызов OnDeinit при удалении индикатора, если в нем присутсвует функция ChartIndicatorGet, которая просто считывает хэндл самого себя даже без занесения хэндла в переменную.

Обязателен IndicatorRelease, если получали свой хендл.

 
fxsaber:

Обязателен IndicatorRelease, если получали свой хендл.

Хм...
А где и в какой момент удалять хэндл индикатора?

Логично было бы в OnDeinit, но он же не работает.

ЗЫ Странная картина получается.
Я попробовал: если удалять хэндл сразу после его получения, то он удаляется, но сам индикатор нет, имя остается, и у него уже становится новый хэндл и он продолжает работать. И, действительно, потом при удалении индикатора OnDeinit запускается. 

Правда я пробовал с безбуферным индикатором. Не знаю, как поведет себя буфер с данными при удалении хэндла.
Ничего не понимаю...


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