Особенности языка mql5, тонкости и приёмы работы - страница 139

 
fxsaber:

Такой вариант не работает

Поправил код, теперь всё ок.
 
Alexey Navoykov:
Поправил код, теперь всё ок.

Что-то Вы с ошибкой запостили, т.к. не компилируется совсем.

 
fxsaber:

Что-то Вы с ошибкой запостили, т.к. не компилируется совсем.

Да, опечатался.  Исправил.
 
Alexey Navoykov:
Да, опечатался.  Исправил.

Спасибо, работает. Осталось посмотреть влияние на производительность.

 
Тем, кто использует динамические ресурсы (например, Канвас), рекомендую ускорить заполнение массивов таким способом

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

fxsaber, 2019.07.09 18:36

void FillArray1( int &Array[] )
{
  const int Size = ArraySize(Array);
  
  for (int i = 0; i < Size; i++)
    Array[i] = i;
}

#define ARRAY_SIZE 10000

void FillArray2( int &Array[] )
{
  int ArrayStatic[ARRAY_SIZE];
  
  const int Size = ArraySize(Array);
  
  for (int i = 0; i < Size;)
  {
    const int Size2 = i + ARRAY_SIZE < Size ? ARRAY_SIZE : Size - i;
    
    for (int j = 0; j < Size2; j++)
      ArrayStatic[j] = i++;
      
    if (Size2)
      ArrayCopy(Array, ArrayStatic, i - Size2, 0, Size2);
  }
}

#define BENCH(A)                                                               \
{                                                                              \
  const ulong _StartTime = GetMicrosecondCount();                              \
  A;                                                                           \
  Print("Time[" + #A + "] = " + (string)(GetMicrosecondCount() - _StartTime)); \
}

void OnStart()
{
  int Array1[];
  ArrayResize(Array1, 1e7);

  int Array2[];
  ArrayResize(Array2, 1e7);
  
  BENCH(FillArray1(Array1));
  BENCH(FillArray2(Array2));
}
Ускорение на десятки процентов.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

fxsaber, 2019.07.09 19:40

Time[FillArray1(Array1)] = 39501
Time[FillArray2(Array2)] = 30304

Release-версию запускаю. Оптимизация включена.


ЗЫ Опытным путем нашел оптимальный размер статического массива

#define ARRAY_SIZE 256
 
fxsaber:
Тем, кто использует динамические ресурсы (например, Канвас), рекомендую ускорить заполнение массивов таким способом
Ускорение на десятки процентов.


ЗЫ Опытным путем нашел оптимальный размер статического массива

а если сравнить с ArrayFill из mql5, то выигрыш в скорости будет или нет?

 

Всю тему не прочитал, возможно есть уже ответ на этот вопрос, МТ5 не понятно ведет себя с графическими объектами.Терминал некоторое время закрыт и обьекты остаются привязанными к каким то не понятным точкам.  Как вы с этим боритесь? Для тех случаев когда окно графика открыто это сделать не сложно. Я лично добавил в OnInit()переход в OnDeinit но если окно в закладках это не решает проблему. Да и возможно кто то подскажет где можно "озвучить" пожелания к создателям МТ5.

.

 
Alexander Lasygin:

Всю тему не прочитал, возможно есть уже ответ на этот вопрос, МТ5 не понятно ведет себя с графическими объектами.Терминал некоторое время закрыт и обьекты остаются привязанными к каким то не понятным точкам.  Как вы с этим боритесь? Для тех случаев когда окно графика открыто это сделать не сложно. Я лично добавил в OnInit()переход в OnDeinit но если окно в закладках это не решает проблему. Да и возможно кто то подскажет где можно "озвучить" пожелания к создателям МТ5.

.

Предоставьте точные данные для воспроизведения: например шаблон графика с объектами. 

Подозреваю, что объекты у Вас всё-таки рисует индикатор и именно он некорректно отслеживает prev_calculated.

 
Konstantin:

а если сравнить с ArrayFill из mql5, то выигрыш в скорости будет или нет?

Думаю, не будет.

 
fxsaber:

Думаю, не будет.

так а зачем тогда изобретать собственный лисапед, если уже есть производительная функция?

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