記事についてのディスカッション

 

新しい記事「取引システムの開発における勾配ブースティング(CatBoost)素朴なアプローチ」はパブリッシュされました:

PythonでCatBoost分類器を訓練してモデルをmql5にエクスポートし、モデルパラメータとカスタムストラテジーテスターを解析します。Python言語とMetaTrader5ライブラリは、データの準備とモデルの訓練に使用されます。

コンパイルされたボットは、標準のMetaTrader 5ストラテジーテスターでテストできます。適切な時間軸(モデルの訓練で使用された時間軸と一致する必要があります)を選択し、look_backとMA_periodを入力します。これらは、Pythonプログラムのパラメータと一致する必要があります。訓練期間中のモデルを確認しましょう(訓練+検証サブサンプル)。

モデルのパフォーマンス(訓練+検証サブサンプル)

カスタムテスターで得られた結果と比較すると、これらの結果は、スプレッドの偏差を除いて同じです。それでは、今年の初めから、完全に新しいデータを使用してモデルをテストしてみましょう。

新しいデータでのモデルのパフォーマンス

新しいデータでは、モデルのパフォーマンスが大幅に低下しました。このような悪い結果は、客観的な理由に関連しています。これについては、さらに詳しく説明します。

作者: Maxim Dmitrievsky

 

ここで混同する必要はない

train_X, test_X, train_y, test_y = train_test_split(X, y, train_size = 0.5, test_size = 0.5, shuffle=True)

https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html のヘルプによると

shuffle bool, default=True

分割前にデータをシャッフルするかどうか。shuffle=Falseの場合、stratifyはNoneでなければならない。

すなわち、テストのいくつかの例が訓練に含まれることになる。

総じて、私はこの記事が気に入った。トレーディングにAIを実装し使用することは非常に簡単であることを示している。

sklearn.model_selection.train_test_split — scikit-learn 0.23.2 documentation
  • scikit-learn.org
*arrays , **options ¶ Quick utility that wraps input validation and and application to input data into a single call for splitting (and optionally subsampling) data in a oneliner. Parameters *arrays Allowed inputs are lists, numpy arrays, scipy-sparse matrices or pandas dataframes. test_size If float, should be between 0.0 and 1.0 and represent...
 
記事の最後のグラフのように、ミキシングなしでできますか?
検証は悪化し、未知のデータでのテストは改善されるかもしれないね。
 
elibrarius:

ここでかき回す必要はない

ヘルプによると https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html

データは分割する前に混合されます。つまり、testからのいくつかの例がtrainに含まれます。

一般的に、私はこの記事が気に入りました。トレーディングにAIを実装し、使用することは非常に簡単であることを示しています。

私は、サンプルを少し均等にするために、わざとこのようにしています。ミキシングをしないとテストは悪くなりますが、新しいデータにはほとんど影響しません。後で例を示します。

 

それが分からないんだ:

if dataset['close'][i] >= (dataset['close'][i + rand]):
            labels.append(1.0)
        elif dataset['close'][i] <= (dataset['close'][i + rand]):
            labels.append(0.0)              
        else:
            labels.append(0.0)

決して機能しない条件は赤でマークされている。

 
Stanislav Korotky:

それが分からないんだ:

決して機能しない条件は赤でマークされている。

条件を変えてもアーティファクトが発生する。

 
特に、mql5上でのpythonモデルのインポートについて
私はALGLIBの専門家ではないが、機械学習やディープラーニングを行うには、XGBoost CATBoostとPytorchが圧倒的に優れていると強く思う。
 
とても興味深い作品だ!作者に感謝します。
 
直接ではなく、CatBoostへの 依存を通じて間接的に、この記事に関連する質問があります。

CatBoost(またはより一般化されたヒストグラムベースの勾配ブースティング決定木)では、ヒストグラムに基づく特性(入力変数)による分離がどのように行われるのか、どなたか指で説明していただけますか?各ビン(ヒストグラム・バー)の統計量が計算されることは明らかです:ビンの範囲内の値を持つベクトルのヒット数の合計と、出力クラス(この場合は2つ)に属することによるそれらの内訳です。そして、これらの統計量を持つヒストグラムを持って、どのように次のレベル・ツリーを作成するための分割を選択するのでしょうか?

 
Stanislav Korotky:
直接ではないが、CatBoostの依存関係を通じて間接的に、記事に関連した質問があった。

CatBoost(またはより一般化された、ヒストグラムベースの勾配ブースティング決定木)の内部で、ヒストグラムに基づく特性(入力変数)による分離がどのように行われるのか、どなたか指で説明していただけますか?各ビン(ヒストグラム・バー)の統計量が計算されることは明らかです:ビンの範囲内の値を持つベクトルのヒット数の合計と、出力クラス(この場合は2つ)に属することによるそれらの内訳です。そして、これらの統計量を持つヒストグラムを持って、どのように次のレベル・ツリーを作成するための分割を選択するのでしょうか?

木は互いに独立に構築され,そして,勾配誤差が減少するように,葉でカウントが行われる(量化されていない予測変数による列挙).

木の構築と木の分割のために予測変数を選択する とき,ランダムな係数が使用され,理論的には,完全性(Recall)を増加させ,過剰訓練を防止することが可能である.

 
Stanislav Korotky:
直接ではないが、CatBoostの依存関係を通じて間接的に、記事に関連した質問があった。

CatBoost(またはより一般化された、ヒストグラムベースの勾配ブースティング決定木)の内部で、ヒストグラムに基づく特性(入力変数)による分離がどのように行われるのか、どなたか指で説明していただけますか?各ビン(ヒストグラム・バー)の統計量が計算されることは明らかです:ビンの範囲内の値を持つベクトルのヒット数の合計と、出力クラス(この場合は2つ)に属することによるそれらの内訳です。そして、これらの統計量を持つヒストグラムを持って、どのように次のレベル・ツリーを作成するための分割を選択するのでしょうか?

それは開発者に尋ねるのがよいでしょう