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

 
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 запускается. 

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


 
Nikolai Semko:

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

Сразу, как перестал быть нужен. И до OnDeinit.

 
fxsaber:

Сразу, как перестал быть нужен. И до OnDeinit.

В том-то и дело, что как-только он перестал нужет, я его удаляю. Как понять программе, что ее удаляют, если OnDeinit не работает?

 
Nikolai Semko:

В том-то и дело, что как-только он перестал нужет, я его удаляю. Как понять программе, что ее удаляют, если OnDeinit не работает?

Реальную задачу озвучьте.

 
fxsaber:

Реальную задачу озвучьте.

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

Total = ChartIndicatorsTotal(0,0);
for (int i=0; i<Total; i++) 
  {
      string name=ChartIndicatorName(0,0,i);
      if (name!=MQLInfoString(MQL_PROGRAM_NAME)) 
         handle[i] = ChartIndicatorGet(0,0,name);
  }

просто думаю: а вдруг будет нужен собственный хэндл...

были такие задачи, но не помню что-то