Новая версия платформы MetaTrader 5 build 3180: Векторы и матрицы в MQL5 и повышение удобства работы - страница 6

 
Slava #:

Какие Ваши предложения?

*= и /=, по логике вроде подходит, как для поэлементного умножения\деления на число, так и вектора на вектор

 
Slava #:

Знак умножения уже занят.

Какие Ваши предложения?

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

 
matrix A{{3, 2, 0, -1}};   
A.Transpose();
   
matrix B{{-1, 1, 0, 2}};
   
Print(A*B); 
[]
Ожидалось
[[-3, 3, 0, 6],
 [-2, 2, 0, 4],
 [ 0, 0, 0, 0], 
 [-1, 1, 0, 2]]


И по моему исчез Dot из списка, вроде он был уже

d

И MatMul не находится

m


Да сыровато пока всё, надо подождать.

 
Slava #:

Знак умножения уже занят.

Какие Ваши предложения?

Есть неплохая биб-ка Armadillo. Там за поэлементное умножение отвечает символ "%" (Schur product).

 

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

Новая версия платформы MetaTrader 5 build 2980: Push-уведомления о торговых операциях

fxsaber, 2021.09.03 23:06

Просьба починить древний баг CopyTicks - в первые минуты субботы не работает закачка тиков за прошедшую пятницу. Нет тиков.

Воспроизводится и через GUI - CTRL+U.

Просьба на несколько суток повесить на VPS такой советник.

// Ловим баг CopyTicks*.

void OnInit()
{
  MqlTick LastTick;
  MqlTick HistoryTick[];
  
  Sleep(5000);
  
  if (SymbolInfoTick(_Symbol, LastTick) && (CopyTicks(_Symbol, HistoryTick, COPY_TICKS_ALL, 0, 1) == 1) &&
      (LastTick.time - HistoryTick[0].time > 10))
  {
    Alert(LastTick.time);
    ArrayPrint(HistoryTick);
  }
  
  ChartSetSymbolPeriod(0, NULL, (_Period == PERIOD_M1) ? PERIOD_M2 : PERIOD_M1);
}

Похоже, он должен показать сложно воспроизводимую проблему с закачиванием истории после полуночи.

 
fxsaber #:

Запустите этот скрипт.


Результат запуска этого скрипта на MQ-Demo:


На одном и том же месте (индекс) разные тикеты.

Ну я не знаю что вам сказать… Вот результат трёхкратного запуска вашего скрипта

2022.01.26 10:07:58.977 00 (AUDUSD,H1)  Alert: Index = 883 HistoryOrderGetTicket(Index) = 271854743 
2022.01.26 10:07:59.062 00 (AUDUSD,H1)  Alert: Index = 883 HistoryOrderGetTicket(Index) = 271854743 
2022.01.26 10:07:59.147 00 (AUDUSD,H1)  Alert: Index = 883 HistoryOrderGetTicket(Index) = 271854743 
2022.01.26 10:07:59.234 00 (AUDUSD,H1)  Alert: Index = 883 HistoryOrderGetTicket(Index) = 271854743 
2022.01.26 10:07:59.317 00 (AUDUSD,H1)  Alert: Index = 883 HistoryOrderGetTicket(Index) = 271854743 
2022.01.26 10:07:59.402 00 (AUDUSD,H1)  Alert: Index = 883 HistoryOrderGetTicket(Index) = 271854743 
2022.01.26 10:07:59.486 00 (AUDUSD,H1)  Alert: Index = 883 HistoryOrderGetTicket(Index) = 271854743 
2022.01.26 10:07:59.566 00 (AUDUSD,H1)  Alert: Index = 883 HistoryOrderGetTicket(Index) = 271854743 
2022.01.26 10:07:59.653 00 (AUDUSD,H1)  Alert: Index = 883 HistoryOrderGetTicket(Index) = 271854743 
2022.01.26 10:07:59.750 00 (AUDUSD,H1)  Alert: Index = 883 HistoryOrderGetTicket(Index) = 271854743 

2022.01.26 10:09:35.747 00 (AUDUSD,H1)  Alert: Index = 893 HistoryOrderGetTicket(Index) = 271854922 
2022.01.26 10:09:35.827 00 (AUDUSD,H1)  Alert: Index = 893 HistoryOrderGetTicket(Index) = 271854922 
2022.01.26 10:09:35.917 00 (AUDUSD,H1)  Alert: Index = 893 HistoryOrderGetTicket(Index) = 271854922 
2022.01.26 10:09:35.999 00 (AUDUSD,H1)  Alert: Index = 893 HistoryOrderGetTicket(Index) = 271854922 
2022.01.26 10:09:36.101 00 (AUDUSD,H1)  Alert: Index = 893 HistoryOrderGetTicket(Index) = 271854922 
2022.01.26 10:09:36.181 00 (AUDUSD,H1)  Alert: Index = 893 HistoryOrderGetTicket(Index) = 271854922 
2022.01.26 10:09:36.268 00 (AUDUSD,H1)  Alert: Index = 893 HistoryOrderGetTicket(Index) = 271854922 
2022.01.26 10:09:36.357 00 (AUDUSD,H1)  Alert: Index = 893 HistoryOrderGetTicket(Index) = 271854922 
2022.01.26 10:09:36.439 00 (AUDUSD,H1)  Alert: Index = 893 HistoryOrderGetTicket(Index) = 271854922 
2022.01.26 10:09:36.532 00 (AUDUSD,H1)  Alert: Index = 893 HistoryOrderGetTicket(Index) = 271854922 

2022.01.26 10:10:37.907 00 (AUDUSD,H1)  Alert: Index = 903 HistoryOrderGetTicket(Index) = 271855029 
2022.01.26 10:10:37.995 00 (AUDUSD,H1)  Alert: Index = 903 HistoryOrderGetTicket(Index) = 271855029 
2022.01.26 10:10:38.077 00 (AUDUSD,H1)  Alert: Index = 903 HistoryOrderGetTicket(Index) = 271855029 
2022.01.26 10:10:38.164 00 (AUDUSD,H1)  Alert: Index = 903 HistoryOrderGetTicket(Index) = 271855029 
2022.01.26 10:10:38.251 00 (AUDUSD,H1)  Alert: Index = 903 HistoryOrderGetTicket(Index) = 271855029 
2022.01.26 10:10:38.333 00 (AUDUSD,H1)  Alert: Index = 903 HistoryOrderGetTicket(Index) = 271855029 
2022.01.26 10:10:38.421 00 (AUDUSD,H1)  Alert: Index = 903 HistoryOrderGetTicket(Index) = 271855029 
2022.01.26 10:10:38.511 00 (AUDUSD,H1)  Alert: Index = 903 HistoryOrderGetTicket(Index) = 271855029 
2022.01.26 10:10:38.592 00 (AUDUSD,H1)  Alert: Index = 903 HistoryOrderGetTicket(Index) = 271855029 
2022.01.26 10:10:38.675 00 (AUDUSD,H1)  Alert: Index = 903 HistoryOrderGetTicket(Index) = 271855029 

Я вручную разделил пустыми строками…

 
Alexey Viktorov #:

Ну я не знаю что вам сказать… Вот результат трёхкратного запуска вашего скрипта

Я вручную разделил пустыми строками…

У меня есть неуверенное подозрение, что мт5 категорически не любит виртуальную машину.
Так как является сам виртуальным приложением. И возможно какие то моменты начинают глюкать.

fxsaber на виртуалке запускаешь?

 

Спасибо за ваши комментарии.

Мы приняли решение, что операции + - * / являются поэлементными операциями для матриц и векторов согласованного размера

Для векторного произведения используем метод Dot

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

 
Slava #:

Спасибо за ваши комментарии.

Мы приняли решение, что операции + - * / являются поэлементными операциями для матриц и векторов согласованного размера

Для векторного произведения используем метод Dot

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

Спасибо и вам за вашу работу, и то что слышите пожелания сообщества.

 
Alexey Viktorov #:

Ну я не знаю что вам сказать… Вот результат трёхкратного запуска вашего скрипта

Я вручную разделил пустыми строками…

Просьба привести лог Терминала во время работы скрипта.