Новая версия платформы MetaTrader 5 build 3950: Снятие/пополнение в терминале и обновленный торговый отчет - страница 5

 
Aleksey Vyazmikin #:

А вот для советника прироста не увидел

Renat Fatkhullin,Такой вопрос если в советнике есть ресурсы - индикаторы, то их так же надо перекомпилировать в ожидании какого либо эффекта? Или как бы код независимый?

Перекомпилировал все индикаторы - получилось даже чуть хуже

2023.09.11 02:04:36.327 Core 1  EURUSD,M15: 960351 ticks, 16277 bars generated. Environment synchronized in 0:00:19.204. Test passed in 0:00:02.517 (including ticks preprocessing 0:00:00.156).
2023.09.11 02:04:36.327 Core 1  EURUSD,M15: total time from login to stop testing 0:00:21.721 (including 0:00:19.204 for history data synchronization)

2023.09.11 02:06:14.818 Core 1  EURUSD,M15: 960351 ticks, 16277 bars generated. Environment synchronized in 0:00:18.819. Test passed in 0:00:02.677 (including ticks preprocessing 0:00:00.140).
2023.09.11 02:06:14.818 Core 1  EURUSD,M15: total time from login to stop testing 0:00:21.496 (including 0:00:18.819 for history data synchronization)

2023.09.11 04:12:38.475 Core 1  EURUSD,M15: 960351 ticks, 16277 bars generated. Environment synchronized in 0:00:19.248. Test passed in 0:00:02.480 (including ticks preprocessing 0:00:00.140).
2023.09.11 04:12:38.475 Core 1  EURUSD,M15: total time from login to stop testing 0:00:21.728 (including 0:00:19.248 for history data synchronization)
 

Написал короткий скрипт для проверки производительности AVX и векторов (т.к. вектора должны иметь максимальный прирост производительности при AVX)

В каждой итерации бесконечного цикла формируются три массива, каждый размером 1000000 double элементов (arr1, arr2, arr3)
Из этих массивов формируются три вектора того же размера (vec1, vec2, vec3)

Из этих массивов формируется новый массив arr4[i] = (arr1[i]+ arr2[i])/ arr3[i]
Далее из массива  arr4[i] находятся минимальный и максимальный элементы, а так же вычисляется среднее арифметическое всего массива.

Все тоже самое происходит и с векторами


Время расчета с массивами и с векторами замеряется и с каждой итерацией точность замера увеличивается из-за вычисления средних значений замеров.

#define TOSTR(A) #A + " = " + (string)(A)+" микросекунд"
#define  SIZE 1000000


//+------------------------------------------------------------------+
void OnStart() {
   string str ="CPU name: "+TerminalInfoString(TERMINAL_CPU_NAME)+"\n"+
   "CPU cores: "+string(TerminalInfoInteger(TERMINAL_CPU_CORES))+"\n"+
   "CPU architecture: "+TerminalInfoString(TERMINAL_CPU_ARCHITECTURE)+"\n"+
   "EX5 architecture: "+__CPU_ARCHITECTURE__"\n";
   double arr1[],arr2[],arr3[],arr4[];
   ArrayResize(arr1,SIZE);
   ArrayResize(arr2,SIZE);
   ArrayResize(arr3,SIZE);
   ArrayResize(arr4,SIZE);
   ulong sum_t1 = 0,sum_t2 = 0;
   int n =0;
   while(!IsStopped()) {
      for (int i = 0; i<SIZE; i++) {
         arr1[i] = rand()+rand()/32767.0;
         arr2[i] = rand()+rand()/32767.0;
         arr3[i] = 1+rand()/32767.0;
      }
      double avg1 = 0, avg2 = 0, max1=0, max2=0, min1=DBL_MAX,min2=DBL_MAX;
      vector vec1(SIZE),vec2(SIZE),vec3(SIZE),vec4(SIZE);
      vec1.Assign(arr1);
      vec2.Assign(arr2);
      vec3.Assign(arr3);

      ulong t1 = GetMicrosecondCount();
      for (int i = 0; i<SIZE; i++) {
         double a =((arr1[i]+arr2[i])/arr3[i]);
         avg1+=a;
         //if (max1<a) max1=a;
         //if (min1>a) min1=a;
         arr4[i] = a;
      }
      avg1 /= SIZE;
      max1 = arr4[ArrayMaximum(arr4)];
      min1 = arr4[ArrayMinimum(arr4)];
      sum_t1 += (GetMicrosecondCount()-t1);


      ulong t2 = GetMicrosecondCount();
      vec4 = ((vec1+vec2)/vec3);
      avg2 = vec4.Mean();
      max2 = vec4.Max();
      min2 = vec4.Min();
      sum_t2 += (GetMicrosecondCount()-t2);


      n++;
      ulong avg_time_array = sum_t1/n;
      ulong avg_time_vector = sum_t2/n;
      if (avg1 !=avg2 || max1!=max2 || min1!=min2) Print("Error: avg1 != avg2"+TOSTR(avg1)+"   " + TOSTR(avg2));
      Comment(str+TOSTR(avg_time_array)+"\n"+TOSTR(avg_time_vector));
   }
}
//+------------------------------------------------------------------+

Вот результаты этого теста в разных режимах компиляции:

X64 Regular:


AVX:


AVX2+FMA3:

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

      ulong t1 = GetMicrosecondCount();
      for (int i = 0; i<SIZE; i++) {
         double a =((arr1[i]+arr2[i])/arr3[i]);
         avg1+=a;
         if (max1<a) max1=a;
         if (min1>a) min1=a;
         //arr4[i] = a;
      }
      avg1 /= SIZE;
      //max1 = arr4[ArrayMaximum(arr4)];
      //min1 = arr4[ArrayMinimum(arr4)];
      sum_t1 += (GetMicrosecondCount()-t1);

то выигрыш расчета в массивах более чем в три раза (!!!) производительнее, чем в векторах.


Хотя, конечно, через вектора код короче:

      vec4 = ((vec1+vec2)/vec3);
      avg2 = vec4.Mean();
      max2 = vec4.Max();
      min2 = vec4.Min();

Результаты вычислений в массивах и векторах совпадают ( есть проверка)

Файлы:
 
Поддержка новых инструкций не позволит сделать вызов OnTimer чаще, чем раз в 15 мс?
 
2023.09.11 10:58:00.231 LiveUpdate check for release version
2023.09.11 10:58:07.327 LiveUpdate you are using the latest version
2023.09.11 10:58:22.938 LiveUpdate check for beta version
2023.09.11 10:58:30.018 LiveUpdate new version build 3932 (IDE: 3932, Tester: 3932) is available
2023.09.11 10:58:48.365 LiveUpdate 'mt5clw64' downloaded (36743 kb)
2023.09.11 10:58:50.728 LiveUpdate 'mt5clwide64' downloaded (22266 kb)
2023.09.11 10:58:52.015 LiveUpdate download 'MT5CLWTST64' failed
2023.09.11 10:59:02.420 LiveUpdate check for beta version
2023.09.11 10:59:09.501 LiveUpdate new version build 3932 (IDE: 3932, Tester: 3932) is available
2023.09.11 10:59:29.258 LiveUpdate 'mt5clw64' downloaded (36743 kb)
2023.09.11 10:59:32.238 LiveUpdate 'mt5clwide64' downloaded (22266 kb)
2023.09.11 10:59:33.523 LiveUpdate download 'MT5CLWTST64' failed

пару попыток


p.s.

2023.09.11 11:31:41.087 LiveUpdate check for beta version

2023.09.11 11:31:48.179 LiveUpdate new version build 3932 (IDE: 3932, Tester: 3932) is available

2023.09.11 11:32:06.567 LiveUpdate 'mt5clw64' downloaded (36743 kb)

2023.09.11 11:32:08.865 LiveUpdate 'mt5clwide64' downloaded (22266 kb)

2023.09.11 11:32:10.213 LiveUpdate download 'MT5CLWTST64' failed


 

В чистых массовых математических расчетах, как пример тестов Alglib, преимущества AVX/AVX2 сборок видны сразу.

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

В тестере при запуске "пустых/незатратных" задач практически вся нагрузка ложится на невекторизируемую системную обвязку и ускорения можно не получить.

Через пару недель мы начнем большой апгрейд MQL5 компилятора для расширения поддержки AVX2/AVX512 инструкций. Это должно улучшить генерацию кода.

Сборки терминалов AVX и AVX2 открыли нам возможности массовой оптимизации и заставит нас оптимизировать все по максимуму. Векторные/массивные операции и тд.

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

 
MetaQuotes:
1. Terminal: Добавлена поддержка балансовых операций снятия и пополнения торгового счета непосредственно в клиентском терминале.

Мы добавили интеграцию наиболее популярных платежных систем прямо в платформу MetaTrader 5, что позволяет брокерам предоставить трейдерам новый уровень сервиса.

Очевидно, что в 2023 году наиболее популярной платёжной системой в части расчётов между трейдерами и FOREX брокерами является криптовалюта. Её поддерживают уже большинство брокеров.
В то же время WebMoney стремительно теряет популярность из-за потери привязки титульного знака WMZ к доллару США. От неё большинство брокеров уже отказалось, да и трейдерам нет никакого смысла использовать её.
Также очень странно видеть в числе наиболее популярных платёжных систем PayPal, которую не поддерживает ни один из известных мне FOREX брокеров.

Было бы логично внедрить в следующую сборку терминала поддержку пополнения счёта в криптовалюте (как это уже реализовано у большинства брокеров).

WebMoney же вполне можно заменить на Perfect Money.

 
E38 #:

Очевидно, что в 2023 году наиболее популярной платёжной системой в части расчётов между трейдерами и FOREX брокерами является криптовалюта. Её поддерживают уже большинство брокеров.
В то же время WebMoney стремительно теряет популярность из-за потери привязки титульного знака WMZ к доллару США. От неё большинство брокеров уже отказалось, да и трейдерам нет никакого смысла использовать её.
Также очень странно видеть в числе наиболее популярных платёжных систем PayPal, которую не поддерживает ни один из известных мне FOREX брокеров.

Было бы логично внедрить в следующую сборку терминала поддержку пополнения счёта в криптовалюте (как это уже реализовано у большинства брокеров).

WebMoney же вполне можно заменить на Perfect Money.

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


 

Просьба добавить комплексное сопряжение в complex, приходится пользоваться старой версией al_complex из alglib.

Ждать ли alglib 4 ? Там тоже синтаксис меняется.

 
Nikolai Semko #:
Вы далеко не первый, кто рекомендует подобное. 
Но все советчики подобного просто не догоняют многих вещей, связанных с регулированием крупных финансовых систем.и необходимостью для серьезных компаний, связанных с финансовой сферой, оставаться прозрачными для этих систем. 


Человек все верно пишет - крипта нужна! А вы Николай плиз не гоните чепухи если не разбираетесь в том как современные форекс-брокеры принимают крипту - никто из брокеров не открывает аккаунты на "непрозрачных" крипто-кухнях (Binance etc), а используются специализированные сервисы крипто-платежей (Сonfirmo  etc ).

Так что замечание верное - необходимо добавить 2-3 наиболее известных сервисов крипто-платежей.