Новая версия платформы MetaTrader 5 build 3490: мобильная версия веб-терминала и новые методы матриц в MQL5 - страница 13

 
Nikolai Semko #:

Если честно, то я не понимаю зачем при сортировке массива сложных объектов, необходимо их свопить.

Примеры с operator= приводил выше.

ЗЫ Функция получилась раздутой, т.к. не нашел способа создать несколько переменных, которые ссылаются на один массив в памяти. Может кто подскажет?

void Func( int &Array[], int &Array2[] ) {}

void OnStart()
{
  int Array[];
  
  Func(Array, Array);
}
 
Alexandr Gavrilin #:

Сломались текстовые метки!!!! OBJ_TEXT

При сдвиге графика, метка привязанная к цене и времени, не смещается!!!!

спасибо, оперативно исправили. билд 3490

 

Не работает профилировщик на исторических данных.

В редакторе вроде бы как все запускается, по крайней мере интерфейс выглядит так, как будто процесс пошел. В самом терминале ничего не происходит.

2022.11.06 10:47:45.510 Terminal        MetaTrader 5 x64 build 3490 started for MetaQuotes Software Corp.
2022.11.06 10:47:45.510 Terminal        Windows 10 build 19044 on Hyper-V, 4 x Intel Xeon  E5-2650 v2 @ 2.60GHz, AVX, 4 / 7 Gb memory, 99 / 126 Gb disk, RDP, UAC, GMT+7

Журнал терминала:

CS      0       11:16:03.035    Tester  AUDCAD: history data begins from 2016.10.19 00:00
CS      0       11:16:03.035    Tester  AUDCAD: ticks data begins from 2018.06.04 00:00
CS      0       11:16:03.035    Tester  AUDUSD: history data begins from 2018.10.19 00:00
CS      0       11:16:03.035    Tester  AUDUSD: ticks data begins from 2020.11.05 00:00
CS      0       11:16:03.036    Tester  USDCAD: history data begins from 2018.10.19 00:00
CS      0       11:16:03.036    Tester  USDCAD: ticks data begins from 2020.11.05 00:00
CS      0       11:16:03.036    Core 1  connecting to 127.0.0.1:3000
CS      0       11:16:03.036    Core 1  connected
CS      0       11:16:03.052    Core 1  authorized (agent build 3490)
CS      0       11:16:03.066    Tester  AUDCAD,Daily (RoboForex-Pro): testing of Experts\noIndy\noIndy\noIndy_One.ex5 from 2021.11.05 00:00 to 2022.11.05 00:00
CS      0       11:16:03.072    Core 1  common synchronization completed
CS      0       11:16:03.084    Core 1  test Experts\noIndy\noIndy\noIndy_One.ex5 on AUDCAD,Daily thread finished
CS      0       11:16:03.084    Core 1  prepare for shutdown
CS      0       11:16:03.084    Core 1  login (build 3490)
CS      0       11:16:03.084    Core 1  account info found with currency USD
CS      0       11:16:03.084    Core 1  354 bytes of symbols list loaded (57 symbols)
CS      0       11:16:03.084    Core 1  expert file added: Experts\noIndy\noIndy\noIndy_One.ex5. 52768 bytes loaded
CS      0       11:16:03.084    Core 1  initial deposit 10000.00 USD, leverage 1:200
CS      0       11:16:03.084    Core 1  successfully initialized
CS      0       11:16:03.084    Core 1  51 Kb of total initialization data received
CS      0       11:16:03.084    Core 1  Intel Xeon  E5-2650 v2 @ 2.60GHz, 7934 MB
CS      2       11:16:03.097    Core 1  disconnected
CS      0       11:16:03.097    Core 1  connection closed
 
Aliaksandr Hryshyn #:

Сортировка согласно подсказке Алексея:

Это изменение кода Николая MySortMqlTick.mq5, убрал лишнее, мой код между ///////////

Результаты в сравнении:

Это основной принцип сортировки структур, который уменьшает количество перемещений данных в памяти, это основная оптимизация

Да, согласен, спасибо. Проверил - действительно перемещений структур почти в 20 раз больше, чем размер массива. Конечно так намного целесообразней.

 
fxsaber #:
Дополню Ваш конструктив.


Radix уверенно опережает.

Очень хорошая находка. Спасибо! Положил Radix себе в копилку.

 
fxsaber #:
void Func( int &Array[], int &Array2[] ) {}

void OnStart()
{
  int Array[];
  
  Func(Array, Array);
}

Ах, ну да ))) Вполне себе вариант.
Спасибо!

 
Nikolai Semko #:

Очень хорошая находка. Спасибо! Положил Radix себе в копилку.

Если целые числа в массиве не очень большие и нет отрицательных, то рекомендую переходить на uint-сортировку.

Alert: Bench_Stack = 0, 1 <= Time[Test9.mq5 42 in "void OnStart()"::Sort_Bench<uint>: ArraySort(Array_ArraySort)] = 1061732 mcs.
Alert: Bench_Stack = 0, 1 <= Time[Test9.mq5 43 in "void OnStart()"::Sort_Bench<uint>: RadixSort(Array_RadixSort)] = 167027 mcs.
ArrayCompare(Array_ArraySort,Array_RadixSort) = 0

Alert: Bench_Stack = 0, 1 <= Time[Test9.mq5 42 in "void OnStart()"::Sort_Bench<int>: ArraySort(Array_ArraySort)] = 1061979 mcs.
Alert: Bench_Stack = 0, 1 <= Time[Test9.mq5 43 in "void OnStart()"::Sort_Bench<int>: RadixSort(Array_RadixSort)] = 221939 mcs.
ArrayCompare(Array_ArraySort,Array_RadixSort) = 0

Связано с тем, что нулевых байтов в представлении uint гораздо больше. На этом алгоритм выигрывает.

 
fxsaber #:

Если целые числа в массиве не очень большие и нет отрицательных, то рекомендую переходить на uint-сортировку.

Связано с тем, что нулевых байтов в представлении uint гораздо больше. На этом алгоритм выигрывает.

интересное наблюдение. Спасибо!

 

Далеко не всегда автоматически обновляются данные вкладки история за текущий день. Особенно, если одновременно по тейк-профиту закрывается серия позиций. 

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

Так было и во всех прошлых версиях.

 

Как узнать основной источник потребления памяти? Сейчас по той же памяти предоставляемые данные сравнимы с TaskManager Windows. Раньше можно было четко локализовывать проблемы. Теперь - нет. Что-то будет меняться в этом направлении? Если предоставление этих данных тормозит, то предлагаю обновлять их раз в 5-10 секунд.