Матрицы и векторы в 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, огромен. Поэтому для начала имеет смысл рассмотреть наиболее простые и полезные функции, которые могут применяться в большинстве программ.