Матрицы и векторы в MQL5 - страница 2

 
Dominik Egert #:
Да, я понимаю. Но разве это не должно быть тем же самым результатом?

Для данного конкретного случая да, но для других сложных вещей - нет

 
Lorentzos Roussos #:

для этого конкретного случая - да, но для других сложных вещей - нет

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

Редактировать:
И в данном конкретном случае умножение - это фактически одна инструкция AVX.

Сравните это с циклом...
 
Dominik Egert #:
Но это то, что я имею в виду: насколько хватает моего воображения, я не могу представить себе случай использования, когда это действительно нужно.

Я уже использовал это где-то, если мне не изменяет память, что-то с расстояниями.

А исполнительный директор играет с ai, так что это возникло из потребности, вероятно.

Предполагается, что эти библиотеки будут "быстрее", чем любое пользовательское решение.

Также в этом случае вы, вероятно, можете получить преимущество инициализации внутри вычислительного блока, если вы используете open cl, я полагаю.

Хотя, вы все равно будете инициализировать последовательно... хм.
 
Lorentzos Roussos #:

Я уже использовал его где-то, если мне не изменяет память, что-то с расстояниями.

А исполнительный директор играет с аи, так что это возникло из необходимости, вероятно.

Предполагается, что эти библиотеки будут "быстрее", чем любое пользовательское решение.

Также в этом случае вы, вероятно, можете получить преимущество инициализации внутри вычислительного блока, если вы используете open cl, я полагаю.

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

Я убежден, что дизайн API неполный и должен иметь другую форму.

Edit:

Не, open CL не поддерживает вектор из MQL, это другой язык. - Нет преимуществ и вариантов использования структур/объектов MQL
 
или мы не видим, что нас ждет, и все должно быть именно так.
 
Lorentzos Roussos #:
или мы не можем видеть, что будет дальше, и это должно быть так.
С 2 лет?

Редактировать:

В любом случае, спасибо за ваши мысли.
 
Dominik Egert #:
С двух лет?

Редактировать:

В любом случае, спасибо за ваши мысли

Да, или он заброшен 😅

И еще, эта штука жестокая, так что
 
Lorentzos Roussos #:

Да, или он заброшен 😅

И еще, этот материал очень жестокий.

@Lorentzos Roussos @Dominik Egert

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

Скажите мне честно, стоит ли тратить время на их изучение? Документация очень плохо объясняет правильные способы их использования.

Пример с https://www.mql5.com/en/docs/matrix/matrix_machine_learning/matrix_regressionmetrics

Другой пример на https://www.mql5.com/en/book/common/matrices/matrices_sle используется без входного параметра const vector& vctName!!!

Так какой же из них правильный?

 if(BarOffset > 0)
   {
      // make a copy of the balance
      vector backtest = balance;
      // select only "historical" bars for backtesting
      backtest.Resize(BarCount - BarOffset);
      // bars for the forward test have to be copied manually
      vector forward(BarOffset);
      for(int i = 0; i < BarOffset; ++i)
      {
         forward[i] = balance[BarCount - BarOffset + i];
      }
      // compute regression metrics independently for both parts
      Print("Backtest R2 = ", backtest.RegressionMetric(REGRESSION_R2));
      Print("Forward R2 = ", forward.RegressionMetric(REGRESSION_R2));
   }
   else
   {
      Print("R2 = ", balance.RegressionMetric(REGRESSION_R2));
   }

Ниже приведена моя первая попытка, и я получил неубедительные результаты.

vector  vctClose;
if(vctClose.CopyRates(mSymbol,mTimeFrame,COPY_RATES_CLOSE,mStart,mLength)) {
        Print("vector_rates COPY_RATES_CLOSE: \n", vctClose);
        double MSE = vctClose.RegressionMetric(vctClose,REGRESSION_MSE);
        double MAE = vctClose.RegressionMetric(vctClose,REGRESSION_MAE);
        double R2  = vctClose.RegressionMetric(vctClose,REGRESSION_R2);
        PrintFormat("vctClose MSE[%.8 f] MAE[%.8 f] R2[%.8 f]",MSE,MAE,R2);
}

результаты :

2024.04.14 15:41:33.094 iCPatterns_v2.02 (XAUUSD,H1)    vector_rates COPY_RATES_CLOSE: 
2024.04.14 15:41:33.094 iCPatterns_v2.02 (XAUUSD,H1)    [2256.67,2253.55,2255.63,2256.39,2261.03,2260.66,2262.13,2260.56,2257.57,2265.25,2260.74,2258.68,2260.31,2265.94,2271.41,2277.43,2280.47,2281.69,2279.92,2283.28,2282.56,2283.36,2285.04,2283.65,2285.96,2282.02,2271.16,2273.24, ...
2024.04.14 15:41:33.094 iCPatterns_v2.02 (XAUUSD,H1)    vctClose MSE[0.00000000] MAE[0.00000000] R2[1.00000000]
2024.04.14 15:41:33.094 iCPatterns_v2.02 (XAUUSD,H1)    vector_rates COPY_RATES_CLOSE: 
2024.04.14 15:41:33.094 iCPatterns_v2.02 (XAUUSD,H1)    [2256.67,2253.55,2255.63,2256.39,2261.03,2260.66,2262.13,2260.56,2257.57,2265.25,2260.74,2258.68,2260.31,2265.94,2271.41,2277.43,2280.47,2281.69,2279.92,2283.28,2282.56,2283.36,2285.04,2283.65,2285.96,2282.02,2271.16,2273.24, ...
2024.04.14 15:41:33.094 iCPatterns_v2.02 (XAUUSD,H1)    vctClose MSE[0.00000000] MAE[0.00000000] R2[1.00000000]
2024.04.14 15:41:33.094 iCPatterns_v2.02 (XAUUSD,H1)    vector_rates COPY_RATES_CLOSE: 
2024.04.14 15:41:33.094 iCPatterns_v2.02 (XAUUSD,H1)    [2256.67,2253.55,2255.63,2256.39,2261.03,2260.66,2262.13,2260.56,2257.57,2265.25,2260.74,2258.68,2260.31,2265.94,2271.41,2277.43,2280.47,2281.69,2279.92,2283.28,2282.56,2283.36,2285.04,2283.65,2285.96,2282.02,2271.16,2273.24, ...
2024.04.14 15:41:33.094 iCPatterns_v2.02 (XAUUSD,H1)    vctClose MSE[0.00000000] MAE[0.00000000] R2[1.00000000]

Есть какие-нибудь подсказки, что здесь не так?

 
Anil Varma #:

@Lorentzos Roussos @Dominik Egert

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

Скажите мне честно, стоит ли тратить время на их изучение? Документация очень плохо объясняет правильные способы их использования.

Пример с https://www.mql5.com/en/docs/matrix/matrix_machine_learning/matrix_regressionmetrics

Другой пример на https://www.mql5.com/en/book/common/matrices/matrices_sle используется без входного параметра const vector& vctName!!!

Так какой же из них правильный?

Ниже приведена моя первая попытка, и я получил неубедительные результаты.

результаты :

Есть какие-нибудь подсказки, что здесь не так?

Книга писалась 2021-2022 году. С тех пор MQL5 сильно менялся. В частности, и функции по работе с матрицами изменились: в RegressionMetric изменился прототип - добавился новый первый параметр.

Под него был сразу после анонса изменений исправлен исходный код примера MatrixForexBasket.mq5 - посмотрите в кодобазе 4-ю часть - https://www.mql5.com/ru/code/45593

   ...
   // build a model of best balance - stable profit on every bar
   vector model(BarCount - BarOffset, ConstantGrow);

   ...
   // now estimate the quality of solution
   if(BarOffset > 0)
   {
      // NB: MQL5 doesn't have Split for vectors!
      // NB: MQL5 can't assign vector to matrix or matrix to vector!
      // make a copy of balance
      vector backtest = balance;
      // only historic in-sample bars are used for backtest estimation
      backtest.Resize(BarCount - BarOffset);
      // prepare forward out-of-sample part of the bars manually
      vector forward(BarOffset);
      for(int i = 0; i < BarOffset; ++i)
      {
         forward[i] = balance[BarCount - BarOffset + i];
      }
      // calculate regression metrics for backtest and forward
      Print("Backtest R2 = ", backtest.RegressionMetric(model, REGRESSION_R2));
      model.Resize(BarOffset);
      model += BarCount - BarOffset;
      Print("Forward R2 = ", forward.RegressionMetric(model, REGRESSION_R2));
   }
   else
   {
      Print("R2 = ", balance.RegressionMetric(model, REGRESSION_R2));
   }
   ...
Программирование на MQL5 для трейдеров — исходные коды из книги. Часть 4
Программирование на MQL5 для трейдеров — исходные коды из книги. Часть 4
  • www.mql5.com
В четвертой части книги мы сосредоточимся на освоении встроенных функций (MQL5 API) и будем последовательно углубляться в специализированные подсистемы. Перечень технологий и функциональности, доступных любой программе на MQL5, огромен. Поэтому для начала имеет смысл рассмотреть наиболее простые и полезные функции, которые могут применяться в большинстве программ.
 

Факторизация матриц: Основы

Факторизация матриц: Основы

В этой статье мы поговорим о матричных вычислениях. Уважаемые читатели, не спешите отказываться от чтения этой статьи, думая, что мы будем говорить о чем-то чисто математическом и слишком сложном. Вопреки мнению многих людей, хороший программист - это не тот, кто пишет гигантскую программу, понятную только ему, и не тот, кто пишет код на модном языке программирования. Настоящий и хороший программист понимает, что компьютер - это не более чем вычислительная машина, которой мы можем указать, как должны выполняться вычисления. Неважно, что именно мы создаем, это может быть простой текстовый редактор, не содержащий никакого математического кода. Но это лишь иллюзия. Даже текстовый редактор содержит в своем коде изрядное количество математики, особенно если в него встроена проверка орфографии.
Matrix Factorization: The Basics
Matrix Factorization: The Basics
  • www.mql5.com
Since the goal here is didactic, we will proceed as simply as possible. That is, we will implement only what we need: matrix multiplication. You will see today that this is enough to simulate matrix-scalar multiplication. The most significant difficulty that many people encounter when implementing code using matrix factorization is this: unlike scalar factorization, where in almost all cases the order of the factors does not change the result, this is not the case when using matrices.