記事「MQL5での行列およびベクトル演算」についてのディスカッション

 

新しい記事「MQL5での行列およびベクトル演算」はパブリッシュされました:

行列とベクトルがMQL5に導入され、数学的な解決策による効率的な操作が可能になりました。これらの新しい型は、数学表記に近い簡潔でわかりやすいコードを作成するための組み込みメソッドを提供します。配列は広範な機能を提供しますが、行列の方がはるかに効率的である場合が多くあります。

過去数年間、MQL5言語に高度な技術を導入するために多くのことを行ってきました。



    MQL5言語は引き続き開発されますが、最優先方向の1つは機械学習です。私たちはさらなる発展のための大きな計画を持っています。私たちをサポートし、私たちと一緒に学び続けてください。

    作者: MetaQuotes

     
    matrix corr_from_matrix=rates.CorrCoef(false);   // 偽はベクトルが文字列 であることを意味する матрицы

    本当にコラムにないのか?

     
        //--- 終値のベクトル化
        if(close.CopyRates(symbols[i], InTF, COPY_RATES_CLOSE, 1, InBars))
         {
          //--- ベクトルを時系列行列に挿入する。
          rates.Col(close, i);

    残念なことに、この単純なマトリックス充填方法には重大な欠陥がある。

    おそらく、標準のCopyRates メソッドを行列にも使えるようにするのが、正しいデータを簡単に取得するためには理にかなっているのだろう。

     
    私たちは、価格データによるベクトルの単純な充填に注目した。しかし、取引もある。
    vector::Deals( void* Filter );

    したがって、統計セクションを数学的手法だけでなく、ゲイン、MaxDD、PFなどの金融的手法で埋める必要がある。

     
    fxsaber #:

    本当にコラムにないのか?

    ええ、タイプミスです。

    ありがとう。

     
    fxsaber CopyRates メソッドを行列にも使えるようにするのが、正しいデータを簡単に取得するために理にかなっているのだろう。

    以下はCopyRates メソッドとその例である。

    //+------------------------------------------------------------------+
    //| スクリプト番組開始機能|
    //+------------------------------------------------------------------+
    void OnStart()
     {
    //--- マトリックスに引用符を入れる
      matrix matrix_rates;
      if(matrix_rates.CopyRates(Symbol(), PERIOD_CURRENT, COPY_RATES_OHLCT, 1, 10))
        Print("matrix rates: \n", matrix_rates);
      else
        Print("matrix_rates.CopyRates failed. Error ", GetLastError());
    //--- チェック
      MqlRates mql_rates[];
      if(CopyRates(Symbol(), PERIOD_CURRENT, 1, 10, mql_rates)>0)
       {
        Print("mql_rates array:");
        ArrayPrint(mql_rates);
       }
      else
        Print("CopyRates(Symbol(), PERIOD_CURRENT,1, 10, mql_rates). Error ", GetLastError());
    //--- ベクトルへの引用符の取得 = 無効な呼び出し
      vector vector_rates;
      if(vector_rates.CopyRates(Symbol(), PERIOD_CURRENT, COPY_RATES_OHLC, 1, 15))
        Print("vector_rates COPY_RATES_OHLC: \n", vector_rates);
      else
        Print("vector_rates.CopyRates COPY_RATES_OHLC failed. Error ", GetLastError());
    //--- 終値のベクトル化
      if(vector_rates.CopyRates(Symbol(), PERIOD_CURRENT, COPY_RATES_CLOSE, 1, 15))
        Print("vector_rates COPY_RATES_CLOSE: \n", vector_rates);
      else
        Print("vector_rates.CopyRates failed. Error ", GetLastError());
     };
    /*
     行列レート:
     [[0.99686,0.99638,0.99588,0.99441,0.99464,0.99594,0.99698,0.99758,0.99581,0.9952800000000001]
     [0.99708,0.99643,0.99591,0.9955000000000001,0.99652,0.99795,0.99865,0.99764,0.99604,0.9957]
     [0.9961100000000001,0.99491,0.99426,0.99441,0.99448,0.99494,0.9964499999999999,0.99472,0.9936,0.9922]
     [0.99641,0.99588,0.99441,0.99464,0.99594,0.99697,0.99758,0.99581,0.9952800000000001,0.99259]
     [1662436800,1662440400,1662444000,1662447600,1662451200,1662454800,1662458400,1662462000,1662465600,1662469200]]
     mql_rates array:
     [time] [open] [high] [low] [close] [tick_volume] [spread] [real_volume]
     [0] 2022.09.06 04:00:00 0.99686 0.99708 0.99611 0.99641 44630 0
     [1] 2022.09.06 05:00:00 0.99638 0.99643 0.99491 0.99588 45190 0
     [2] 2022.09.06 06:00:00 0.99588 0.99591 0.99426 0.99441 30600 0
     [3] 2022.09.06 07:00:00 0.99441 0.99550 0.99441 0.99464 38670 0
     [4] 2022.09.06 08:00:00 0.99464 0.99652 0.99448 0.99594 52800 0
     [5] 2022.09.06 09:00:00 0.99594 0.99795 0.99494 0.99697 72270 0
     [6] 2022.09.06 10:00:00 0.99698 0.99865 0.99645 0.99758 101300 0
     [7] 2022.09.06 11:00:00 0.99758 0.99764 0.99472 0.99581 70120 0
     [8] 2022.09.06 12:00:00 0.99581 0.99604 0.99360 0.99528 61660 0
     [9] 2022.09.06 13:00:00 0.99528 0.99570 0.99220 0.99259 69500 0
     vector_rates.CopyRates COPY_RATES_OHLC に失敗しました。エラー 4003
     vector_rates COPY_RATES_CLOSE:
     [0.9931,0.99293,0.99417,0.99504,0.9968399999999999,0.99641,0.99588,0.99441,0.99464,0.99594,0.99697,0.99758,0.99581,0.9952800000000001,0.99259]
    */
    Документация по MQL5: Методы матриц и векторов / Инициализация / CopyRates
    Документация по MQL5: Методы матриц и векторов / Инициализация / CopyRates
    • www.mql5.com
    CopyRates - Инициализация - Методы матриц и векторов - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
     
    Rashid Umarov #:

    以下はCopyRates メソッドの爪と その中の例である。

    どうやら問題をうまく定式化できなかったようだ。シンボル相関を計算するために行列を埋めるとき、EURUSD[5].BarTimeがGBPUSD[5].BarTimeと 一致しないことが起こり得ます。これはマルチバーの非同期と呼ばれます。計算前のこのようなデータ準備にかなりの時間と労力を割かなければなりません。一行で解決できれば最高です。

     

    記事にはこうある:

    Над матрицами и векторами можно поэлементно производить математические операции — сложение, вычитание, умножение и деление. Для этого оба объекта должны быть одного и того же типа и должны иметь одинаковые размеры. Каждый член матрицы/вектора оперирует с соответствующим элементом второй матрицы/вектора.

    この計算がどのように行われるのか、つまり、数値がdoubleに変換されてから計算が行われ、最初のデータ型への逆変換が行われるのか、それによって精度の損失が 減るのか(それとも、私が間違っていて、違いはないのか)、それとも、あるデータ型ですぐに行われるのか、はっきりさせたいと思います。明らかに、異なるデータ型はRAMを節約しますが、配列でデータを計算する場合、計算のために数値をdoubleにし、計算の精度を保つためにもう一度、例えばfloatにします。数値の演算をどのように行うかは任意にした方がいいのでしょうか?
     
    素晴らしい説明。とても役に立つ。
     

    この命令には以下が含まれる。

    void matrix.FromBuffer(const int rows, const int cols, const scalar array[], const int count=-1, const int offset=0)

    フロムバッファ

    1次元配列から行列を作成します.


    しかし,実際にはうまくいかない.一次元配列を行列にコピーする他の方法はないのでしょうか?

     
    その記事を読んでほしい。