トレーディングにおける機械学習:理論、モデル、実践、アルゴトレーディング - ページ 3256

 
Maxim Dmitrievsky #:
小さなTFでメモリがオーバーフローする16個のosuとスワップファイル(マックのスワップ)30ギガでメモリがオーバーフローする。例えば、50k×50kの相関行列がある。

アルゴリズムはMQLでも同じなので、どうやらPythonの特殊性のようだ。

  1. Pos変数の1d配列で実行。
  2. [Pos-n, Pos] - 別のパターン。
  3. このパターンと1d-arrayに似た ものを適用した。
  4. MathAbs(corr[i])>0.9の状況を見つけた。
  5. これらの場所で、価格行動のm本前のバーを見て、それを平均しました。
  6. 多くの場所を見つけ、それらをうまく 平均化した。- パターン・データ(ステップ2の値)を保存。
  7. Pos++でP.2.

これは正面の変形です。ふるいを 使うとさらに速い。


100万本の棒を想定してみよう。文字列の長さは10である。すると、1,000万個の2重値に対する1d-arrayは80Mbになる。ポイント3。- では、メモリ消費量で500Mbとしよう。メモリ消費量に。

 
fxsaber #:

MQLでもアルゴリズムは同じなので、Pythonの特殊性に違いない。

  1. Pos-変数の1d-配列を実行する。
  2. [Pos-n, Pos] - 別のパターン。
  3. このパターンと1d-arrayに似た ものを適用した。
  4. MathAbs(corr[i])>0.9の状況を見つけた。
  5. これらの場所で、価格行動のm本前のバーを見て、それを平均しました。
  6. 多くの場所を見つけ、それらをうまく 平均化した。- パターン・データ(ステップ2の値)を保存。
  7. Pos++でp.2.

これは正面の変形である。ふるい分けは さらに速い。


100万本の棒を想定してみよう。文字列の長さは10である。すると1,000万本の二重値に対する1d-arrayは80Mbになる。p.3.- では、メモリ消費量で500Mbとしよう。何が考慮されていないのだろう?

全行対全行の行列の相関は、サイクル(1行対1行)やループ(1行対全行)よりも何倍も 速いと考えられる。そこにはアルゴリズムによる何らかの加速がある。alglib版の相関計算で確認してみた。
 
Forester #:
全行対全行の行列の相関は、サイクル(1行対1行)や偶数ループ(1行対全行)よりも何倍も 速いと考えられている。そこにはアルゴリズムによる何らかの加速がある。alglib版の相関計算で確認しました。

コードを教えてください。

 
fxsaber #:


  1. 我々は、MathAbs(corr[i]) > 0.9の状況を発見した。

MathAbs ()は私には不要に思える。

 
fxsaber #:

MQLでもアルゴリズムは同じなので、Pythonの特殊性に違いない。

  1. Pos-変数の1d-配列を実行する。
  2. [Pos-n, Pos] - 別のパターン。
  3. このパターンと1d-arrayに似た ものを適用した。
  4. MathAbs(corr[i])>0.9の状況を見つけた。
  5. これらの場所で、価格行動のm本前のバーを見て、それを平均しました。
  6. 多くの場所を見つけ、それらをうまく 平均化した。- パターン・データ(ステップ2の値)を保存。
  7. Pos++でp.2.

これは正面の変形である。ふるい分けは さらに速い。


100万本の棒を想定してみよう。文字列の長さは10である。すると1,000万本の二重値に対する1d-arrayは80Mbになる。p.3.- では、メモリ消費量で500Mbとしよう。何が考慮されていないのだろう?

Pythonのどのライブラリも計算できないので、自分でも困惑してしまった。

PandasはRAMをオーバーフローさせ、オーバーヘッドは巨大になる。

Nampaiはエラーを表示せずにクラッシュしてインタプリタセッションを終了させるだけ。

篩を作ることはできるけど、コードを全部書き直す必要がある。
 
fxsaber #:

コードを教えてください。

in statistics.mqh.

functions
PearsonCorrM - すべての行のすべての行に対する相関が最も速い。

//+------------------------------------------------------------------+
//| Pearson product-moment correlation matrix                        |
//| INPUT PARAMETERS:                                                |
//|     X   -   array[N,M], sample matrix:                           |
//|             * J-th column corresponds to J-th variable           |
//|             * I-th row corresponds to I-th observation           |
//|     N   -   N>=0, number of observations:                        |
//|             * if given, only leading N rows of X are used        |
//|             * if not given, automatically determined from input  |
//|               size                                               |
//|     M   -   M>0, number of variables:                            |
//|             * if given, only leading M columns of X are used     |
//|             * if not given, automatically determined from input  |
//|               size                                               |
//| OUTPUT PARAMETERS:                                               |
//|     C   -   array[M,M], correlation matrix (zero if N=0 or N=1)  |
//+------------------------------------------------------------------+
static bool CBaseStat::PearsonCorrM(const CMatrixDouble &cx,const int n,
                                    const int m,CMatrixDouble &c)

PearsonCorr2 - 行と行の相関。完全行列の場合: 1 行目は 1 以降のすべての行と、2 行目は 2 以降のすべての行と、など。

//+------------------------------------------------------------------+
//| Pearson product-moment correlation coefficient                   |
//| Input parameters:                                                |
//|     X       -   sample 1 (array indexes: [0..N-1])               |
//|     Y       -   sample 2 (array indexes: [0..N-1])               |
//|     N       -   N>=0, sample size:                               |
//|                 * if given, only N leading elements of X/Y are   |
//|                   processed                                      |
//|                 * if not given, automatically determined from    |
//|                   input sizes                                    |
//| Result:                                                          |
//|     Pearson product-moment correlation coefficient               |
//|     (zero for N=0 or N=1)                                        |
//+------------------------------------------------------------------+
static double CBaseStat::PearsonCorr2(const double &cx[],const double &cy[],
                                      const int n)



そして PearsonCorrM2 を用いると、全行列を1つの行列とチェックされる別の行に書き出すことができます。しかし、10行目については、10行目より上の行との相関がすでに計算されているので、明らかに不要な作業がある。

static bool CBaseStat::PearsonCorrM2(const CMatrixDouble &cx,const CMatrixDouble &cy,
                                     const int n,const int m1,const int m2,
                                     CMatrixDouble &c)


5k*20k程度の行列をチェックする。100*100なら速いだろう。
 
Numpyは20k*20kの行列を2GBの重さにする。
 
Maxim Dmitrievsky #:
20k*20kのNumpy行列の重さは2ギガバイト。

4億の2倍数は3ギガ。

 
mytarmailS #:

MathAbs ()は私には冗長に思える。

符号を別にチェックすることもできる。ポイントはそこではない。

 
fxsaber #:

4億のダブルナンバーの重さは3ギガバイト。

この喜びのためにメモリが足りないのは理解できる。

理由: