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

 
Еще раз пишу помогите!   Не знаю как получить обратно   лучшую связь , смена счета не помогает   
Файлы:
Mc3FTItT2F8.jpg  18 kb
 

При применении  ChartSetSymbolPeriod  в OnInit индикатора при отладке на текущих данных странность - в OnTick() rates_total от старого ТФ, а массивы таймсерий от нового:

datetime shift,arr[],arr2[];
void OnInit()
  {
 if (ChartPeriod()!=PERIOD_D1)
 {
     ChartSetSymbolPeriod(0,Symbol(),PERIOD_D1);
     CopyTime(Symbol(),PERIOD_D1,0,iBars(Symbol(),PERIOD_D1),arr);     
     ChartRedraw();
     Sleep(100);
  }  
 CopyTime(Symbol(),PERIOD_H1,0,iBars(Symbol(),PERIOD_H1),arr2); 
  }

Тут видно Time[x] с Днёвки, а rates_total с H1, при этом в окне отладчика ТФ графика сменился на днёвку.


 
Aleksey Mavrin:

При применении  ChartSetSymbolPeriod  в OnInit индикатора при отладке на текущих данных странность - в OnTick() rates_total от старого ТФ, а массивы таймсерий от нового:

Тут видно Time[x] с Днёвки, а rates_total с H1, при этом в окне отладчика ТФ графика сменился на днёвку.


При смене таймфрейма индикатор полностью пересоздаётся. Т.е., удаляется хэндл предыдущего индикатора, и создаётся хэндл нового.
Но есть одно "НО". Предыдущий индикатор ещё некоторое время присутствует.

Не в этом ли причина...

 
Aleksey Mavrin:

При применении  ChartSetSymbolPeriod  в OnInit индикатора при отладке на текущих данных странность - в OnTick() rates_total от старого ТФ, а массивы таймсерий от нового:

Тут видно Time[x] с Днёвки, а rates_total с H1, при этом в окне отладчика ТФ графика сменился на днёвку.

IndicatorRelease

Документация по MQL5: Доступ к таймсериям и индикаторам / IndicatorRelease
Документация по MQL5: Доступ к таймсериям и индикаторам / IndicatorRelease
  • www.mql5.com
//|                                        Test_IndicatorRelease.mq5 | //|                        Copyright 2010, MetaQuotes Software Corp. | //|                                             https://www.mql5.com | //| Expert initialization function                                   |...
 
Artyom Trishkin:

При смене таймфрейма индикатор полностью пересоздаётся. Т.е., удаляется хэндл предыдущего индикатора, и создаётся хэндл нового.
Но есть одно "НО". Предыдущий индикатор ещё некоторое время присутствует.

Не в этом ли причина...

Да, как я понял по экспериментам, после ChartSetSymbolPeriod  довыполняется OnInit и один раз (в режиме отладки как минимум) выполняется OnCalculate (в этот момент то и отлавливается). после этого индикатор релизится и запускается OnInit уже на новом ТФ. Т.е. В онлайне работе не мешает.

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

 
Это недоработка ArraySwap?
void OnStart()
{
  int ArrayStatic[1];
  int ArrayDynamic[];
  
  ArrayResize(ArrayDynamic, ArraySize(ArrayStatic));
  
  Print(ArraySwap(ArrayStatic, ArrayDynamic)); // false
}
 
fxsaber:
Это недоработка ArraySwap?

As designed

Обменивает между собой содержимое двух динамических массивов одного типа

 
Slava:

As designed

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

Например, в какую-нибудь функцию сортировки.


ЗЫ Интересно, какой самый дешевый способ определить статичность массива?

 
fxsaber:

ЗЫ Интересно, какой самый дешевый способ определить статичность массива?

А какие есть варианты кроме ArrayIsDynamic?

 
Stanislav Korotky:

А какие есть варианты кроме ArrayIsDynamic?

template <typename T>
bool IsStatic( T &Array[] )
{
  T ArrayTmp[];

  return(!(ArraySwap(Array, ArrayTmp) && ArraySwap(Array, ArrayTmp)));
}


Про ArrayIsDynamic не знал, спасибо.