トレーディングにおける機械学習:理論、モデル、実践、アルゴトレーディング - ページ 3268 1...326132623263326432653266326732683269327032713272327332743275...3399 新しいコメント fxsaber 2023.10.01 07:38 #32671 Forester #:PearsonCorrM2 はすぐに機能すると思います。1つの行列を満杯にし、1行から2番目の行列をチェックする。そして、最後から行く場合は、最初の行列のサイズを次の行の番号として指定することで、検査対象の行より下の行まで何度も相関を再計算する必要がなくなります。 私は最初、すべての行を毎回数えるという、正面からの変形を試みました。Alglibに何らかのエラーがあるような気がした。 #include <Math\Alglib\statistics.mqh> // https://www.mql5.com/ru/code/11077 const matrix<double> CorrMatrix( const matrix<double> &Matrix ) { matrix<double> Res = {}; const CMatrixDouble MatrixIn(Matrix); CMatrixDouble MatrixOut; if (CBaseStat::PearsonCorrM(MatrixIn, MatrixIn.Rows(), MatrixIn.Cols(), MatrixOut)) // https://www.mql5.com/ru/code/11077 Res = MatrixOut.ToMatrix(); return(Res); } const matrix<double> CorrMatrix2( const matrix<double> &Matrix ) { matrix<double> Res = {}; Res.Init(Matrix.Cols(), Matrix.Cols()); const CMatrixDouble MatrixIn(Matrix); CMatrixDouble Vector(Matrix); CMatrixDouble Corr; for (int i = 0; i < (int)Matrix.Cols(); i++) { if (i) Vector.SwapCols(0, i); CBaseStat::PearsonCorrM2(Vector, MatrixIn, MatrixIn.Rows(), 1, MatrixIn.Cols(), Corr); Res.Col(Corr.Row(0), i); } return(Res); } #property script_show_inputs input int inRows = 5; // Длина строки input int inCols = 100; // Количество строк void FillArray( double &Array[], const int Amount ) { for (uint i = ArrayResize(Array, Amount); (bool)i--;) Array[i] = MathRand(); } bool IsEqual( matrix<double> &Matrix1, const matrix<double> &Matrix2, const double Sens = 1 e-10 ) { Matrix1 -= Matrix2; const bool Res = (MathMax(MathAbs(Matrix1.Max()), MathAbs(Matrix1.Min())) < Sens); Matrix1 += Matrix2; return(Res); } #define TOSTRING(A) #A + " = " + (string)(A) + " " void OnStart() { double Array[]; FillArray(Array, inRows * inCols); matrix<double> Matrix; Matrix.Assign(Array); Matrix.Init(inCols, inRows); Matrix = Matrix.Transpose(); Print(TOSTRING(inRows) + TOSTRING(inCols)); matrix<double> Matrix1 = CorrMatrix(Matrix); matrix<double> Matrix2 = CorrMatrix2(Matrix); matrix<double> Matrix3 = Matrix.CorrCoef(false); Print(TOSTRING(IsEqual(Matrix1, Matrix2))); Print(TOSTRING(IsEqual(Matrix1, Matrix3))); } 結果はしばしば一致する。 inRows = 5 inCols = 90 IsEqual(Matrix1, Matrix2) = true IsEqual(Matrix1, Matrix3) = true しかし、状況によっては一致しないこともある。 inRows = 5 inCols = 100 IsEqual(Matrix1, Matrix2) = false IsEqual(Matrix1, Matrix3) = true いつもこうなら、間違いなく私のミスだろう。しかし、ここには何か不純なものがある。 СанСаныч Фоменко 2023.10.01 07:38 #32672 Maxim Kuznetsov #:Rはそのごった煮ぶりが際立っている。どんな時でも、どんな時でも、どんなパッケージでも、何でもある。しかし、1年や2年経てば、この本の例を実行することは不可能になるだろう。 プロフェッショナルなチームによって作成された、優れた参照装置を備えたよく構造化されたシステムが、寄せ集めであるはずがない。システムRは、普遍性と大衆性のためにあらゆるものに気を取られることなく、取引を志向している。 これこそが、この本が示していることである。 そしてもう一つ、Rをベースにした本がやっていることは、MOをベースにしたモデルを大急ぎで手に入れられるという幻想を打ち砕くことであり、大規模なツール一式を所有することなく、そして最も重要なことは、なぜこれこれのツール(パッケージ、関数)が必要なのか、なぜモデル構築のこの段階、この段階が必要なのかを理解することなく、何かを捨てることはできないということを理解することなく-すべてが崩れてしまうのだ。 СанСаныч Фоменко 2023.10.01 07:45 #32673 何かと何かの相関関係が何十ページにもわたって書かれているのは、何が行われているのかをまったく理解していない典型的な例である。 相関関係を計算する前に、「使用する系列に相関関係は存在するのか?なぜなら、金融系列には相関が存在しないからである。金融系列には数学的期待値が 存在せず、使用する平均が数学的期待値として使用できることを証明する必要があるからである。 ちなみにRでは、くしゃみ1回をチェックするのがルーチンです。 Maxim Dmitrievsky 2023.10.01 07:59 #32674 СанСаныч Фоменко #:素晴らしい本だ!MoDのすべての問題を網羅しているに違いない。 初心者向け。 タイドバース。 fxsaber 2023.10.01 08:00 #32675 СанСаныч Фоменко #:何が行われているのかをまったく理解していない典型的な例が、何十ページにもわたる何かと何かの相関関係である。 あなたは理解していないので、私が説明する。 取引、自動取引システム、取引戦略のテストに関するフォーラム トレーディングにおける機械学習:理論、モデル、実践とアルゴリズム取引 fxsaber、2023.10.01 09:38 void FillArray( double &Array[], const int Amount ) { for (uint i = ArrayResize(Array, Amount); (bool)i--;) Array[i] = MathRand(); } MathRandは乱数です。つまり、相関はランダムな行列で計算されます。その目的は、アルゴリズム実装の異なるバリエーションが同じ結果を与えることを確認することです。アルゴリズムの実行速度とメモリ消費量が比較されます。無能な人は手を出すな。 fxsaber 2023.10.01 08:07 #32676 fxsaber #:行ごとの計算のための標準的なものは見つかっていない。Alglibは遅いようだ。私自身の変種を試して います。 #include <fxsaber\Math\Math.mqh> // https://www.mql5.com/ru/code/17982 matrix<double> CorrMatrix( const double &Array[], const int PatternLen, const bool CreateMatrix = true ) { matrix<double> Res = {}; const int Size = ArraySize(Array) / PatternLen - 1; if (CreateMatrix) { Res.Init(Size + 1, Size + 1); Res[Size][Size] = 1; } double Corr[]; DEJAVU Dejavu; Dejavu.SetSignal(Array); if (CreateMatrix) for (int i = 0, j; i < Size; i++) { Res[i][i] = 1; j = i + 1; Dejavu.SetPattern(PatternLen, i * PatternLen); Dejavu.GetCorrelation(Corr, PatternLen, j * PatternLen); for (; j <= Size; j++) { const double Tmp = Corr[(j + 1) * PatternLen - 1]; Res[i][j] = Tmp; Res[j][i] = Tmp; } } else for (int i = 0; i < Size; i++) { Dejavu.SetPattern(PatternLen, i * PatternLen); Dejavu.GetCorrelation(Corr, PatternLen, (i + 1) * PatternLen); } return(Res); } #property script_show_inputs input int inRows = 100; // Длина строки input int inCols = 15000; // Количество строк #define TOSTRING(A) #A + " = " + (string)(A) + " " // NumPy: https://www.mql5.com/ru/forum/86386/page3257#comment_49545300 void OnStart() { PrintCPU(); // https://www.mql5.com/ru/forum/86386/page3256#comment_49538685 double Array[]; FillArray(Array, inRows * inCols); // https://www.mql5.com/ru/forum/86386/page3267#comment_49671602 matrix<double> Matrix; Matrix.Assign(Array); Matrix.Init(inCols, inRows); Matrix = Matrix.Transpose(); ulong StartTime, StartMemory; Print(TOSTRING(inRows) + TOSTRING(inCols)); BENCH(matrix<double> Matrix1 = CorrMatrix(Matrix)) // https://www.mql5.com/ru/forum/86386/page3267#comment_49671602 BENCH(matrix<double> Matrix2 = Matrix.CorrCoef(false)); // https://www.mql5.com/ru/docs/basis/types/matrix_vector BENCH(matrix<double> Matrix3 = CorrMatrix(Array, inRows)); // https://www.mql5.com/ru/code/17982 BENCH(CorrMatrix(Array, inRows, false)); // https://www.mql5.com/ru/code/17982 Print(TOSTRING(IsEqual(Matrix1, Matrix2))); Print(TOSTRING(IsEqual(Matrix1, Matrix3))); } 結果。 EX5: 4000 AVX Release. TerminalInfoString(TERMINAL_CPU_NAME) = Intel Core i7-2700 K @ 3.50 GHz TerminalInfoInteger(TERMINAL_CPU_CORES) = 8 TerminalInfoString(TERMINAL_CPU_ARCHITECTURE) = AVX inRows = 100 inCols = 15000 matrix<double> Matrix1 = CorrMatrix(Matrix) - 13795998 mcs, 1717 MB matrix<double> Matrix2 = Matrix.CorrCoef(false) - 38346008 mcs, 1717 MB matrix<double> Matrix3 = CorrMatrix(Array, inRows) - 26632760 mcs, 1716 MB CorrMatrix(Array, inRows, false) - 19412824 mcs, 0 MB IsEqual(Matrix1, Matrix2) = true IsEqual(Matrix1, Matrix3) = true 自作バージョンは標準的なバリアントより速いことがわかったが、Alglibより遅い(アルゴリズムが理解できなかった)。同時に、自作バージョンは他の変種と違って、どんなサイズの行列でも数えることができる。 Maxim Dmitrievsky 2023.10.01 08:12 #32677 fxsaber #:結果自己設計は標準的なバリアントより速かったが、Alglibよりは遅かった(アルゴリズムは理解できなかった)。同時に、他のバリアントと違って、どんなサイズの行列でも読むことができる。 なぜそんなにmqlが好きなのかというと、C言語でdllを書けばいくらでも速くなるからだ。 僕にとって、mqlはまだ取引を開始するための言語なんだ。実際、それが正しい。 mytarmailS 2023.10.01 08:23 #32678 fxsaber #: 理解できないなら、説明しよう。 MathRandは乱数である。つまり、相関はランダムな行列で計算される。目的は、異なるアルゴリズム実装が同じ結果を与えることを確認することである。アルゴリズムの実行速度とメモリ消費量が比較される。無能なら手を出すな。 では、この相関関係の壮大な叙事詩の最終的なゴールは何でしょうか?さて、あなたはどの実装がより速く、どの実装が同じ結果を与え、どの実装がそうでないかを発見した。この知識を使って何をするつもりですか? fxsaber 2023.10.01 08:25 #32679 Maxim Dmitrievsky #:それに、どうしてそんなにmqlが好きなんだ? cでdllを書けば、いくらでも速くなる。 僕の無能さには限界がある。 mytarmailS 2023.10.01 08:25 #32680 Maxim Dmitrievsky #:私にとっては、mqlはまだ取引を開始するための言語だ。実際、その通りだ。 また、テストや視覚化、素早いアクションも重要だと思う。 1...326132623263326432653266326732683269327032713272327332743275...3399 新しいコメント 理由: キャンセル 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
PearsonCorrM2 はすぐに機能すると思います。1つの行列を満杯にし、1行から2番目の行列をチェックする。そして、最後から行く場合は、最初の行列のサイズを次の行の番号として指定することで、検査対象の行より下の行まで何度も相関を再計算する必要がなくなります。
私は最初、すべての行を毎回数えるという、正面からの変形を試みました。Alglibに何らかのエラーがあるような気がした。
結果はしばしば一致する。
しかし、状況によっては一致しないこともある。
いつもこうなら、間違いなく私のミスだろう。しかし、ここには何か不純なものがある。
Rはそのごった煮ぶりが際立っている。どんな時でも、どんな時でも、どんなパッケージでも、何でもある。
しかし、1年や2年経てば、この本の例を実行することは不可能になるだろう。
プロフェッショナルなチームによって作成された、優れた参照装置を備えたよく構造化されたシステムが、寄せ集めであるはずがない。システムRは、普遍性と大衆性のためにあらゆるものに気を取られることなく、取引を志向している。
これこそが、この本が示していることである。
そしてもう一つ、Rをベースにした本がやっていることは、MOをベースにしたモデルを大急ぎで手に入れられるという幻想を打ち砕くことであり、大規模なツール一式を所有することなく、そして最も重要なことは、なぜこれこれのツール(パッケージ、関数)が必要なのか、なぜモデル構築のこの段階、この段階が必要なのかを理解することなく、何かを捨てることはできないということを理解することなく-すべてが崩れてしまうのだ。
何かと何かの相関関係が何十ページにもわたって書かれているのは、何が行われているのかをまったく理解していない典型的な例である。
相関関係を計算する前に、「使用する系列に相関関係は存在するのか?なぜなら、金融系列には相関が存在しないからである。金融系列には数学的期待値が 存在せず、使用する平均が数学的期待値として使用できることを証明する必要があるからである。
ちなみにRでは、くしゃみ1回をチェックするのがルーチンです。
素晴らしい本だ!
MoDのすべての問題を網羅しているに違いない。
初心者向け。
タイドバース。
何が行われているのかをまったく理解していない典型的な例が、何十ページにもわたる何かと何かの相関関係である。
取引、自動取引システム、取引戦略のテストに関するフォーラム
トレーディングにおける機械学習:理論、モデル、実践とアルゴリズム取引
fxsaber、2023.10.01 09:38
MathRandは乱数です。つまり、相関はランダムな行列で計算されます。その目的は、アルゴリズム実装の異なるバリエーションが同じ結果を与えることを確認することです。アルゴリズムの実行速度とメモリ消費量が比較されます。無能な人は手を出すな。
行ごとの計算のための標準的なものは見つかっていない。Alglibは遅いようだ。私自身の変種を試して います。
結果。
自作バージョンは標準的なバリアントより速いことがわかったが、Alglibより遅い(アルゴリズムが理解できなかった)。同時に、自作バージョンは他の変種と違って、どんなサイズの行列でも数えることができる。
結果
自己設計は標準的なバリアントより速かったが、Alglibよりは遅かった(アルゴリズムは理解できなかった)。同時に、他のバリアントと違って、どんなサイズの行列でも読むことができる。
なぜそんなにmqlが好きなのかというと、C言語でdllを書けばいくらでも速くなるからだ。
僕にとって、mqlはまだ取引を開始するための言語なんだ。実際、それが正しい。
理解できないなら、説明しよう。
MathRandは乱数である。つまり、相関はランダムな行列で計算される。目的は、異なるアルゴリズム実装が同じ結果を与えることを確認することである。アルゴリズムの実行速度とメモリ消費量が比較される。無能なら手を出すな。
それに、どうしてそんなにmqlが好きなんだ? cでdllを書けば、いくらでも速くなる。
僕の無能さには限界がある。
私にとっては、mqlはまだ取引を開始するための言語だ。実際、その通りだ。