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

 
Dr.トレーダー

ありがとうございます、やってみました。ニューロニックが簡単に学習し、その結果をテストデータセットにも保存していることから、予測変数の選択に多くの労力を費やしたことがわかります。

以下の結果は、R1.F3に関するトレーニングのものです。

1)ガラガラというのは面白い結果ですね。標準構成のHHでは、訓練/検証/テストの誤差は30%/29%/33%でした。R2.F3の誤差は35%です。しかし、これは本当にラッキーなケースで、他の構成であれば簡単にトレーニング不足か過剰になってしまうところ、ここでは運が良かっただけなのです。

2) それから教師なし学習で簡単な粗いアプローチを取りました。隠れニューロンが200個あり、ネットワークは改良が止まるまで訓練されました。エラー トレーニング/バリデート/テスト/R2.F3 - 2%/30%/27%/45%.明らかに、ネットワークが再トレーニングされています。

3)監視付き学習これは木とは違いますが、神経細胞を鍛えすぎないように、常にこの作業を行う必要があります。その本質は、トレーニングを一旦中断して、トレーニング・検証・テストの結果を確認することです。結果の照合の黄金律は知りませんが、訓練用データセットで訓練し、検証用データセットとテスト用データセットでエラーを探し、検証用/テスト用のエラーが出なくなったら訓練を止めるというのはごく普通のアプローチです。これは、オーバートレーニングに対するある種の保証となります。R2.F3はこの全行程で使用不可とし、テストはトレーニング終了後に行う。この場合、訓練/検証/テスト/R2.F3の誤差は27%/30%/31%/37%です。ここでもオーバートレーニングはありますが、それほどでもありません。列車誤差が検証・テスト誤差より明らかに小さくなってから、早期に学習プロセスを停止することもできたはずですが、それは推測に過ぎません......。は、役に立ったかもしれないし、立たなかったかもしれない。

R1.F1" ターゲット変数が3つの値を持っている、Rattleはニューロニックでそれができないので、Rで自分でコードを書かなければならない、このデータセットはスキップした。

「R1.F4」「R1.F5」「R1.F6」の4つのエラーは、Rattle neuronkaでもほぼ同じ結果でしたので、 neuronkaでも適切なアプローチをすればほぼ同じ結果になると思いますので、これ以上の対応はしていません。

森とアダで似たような数字があるんです。

さて、話を「ラム」に戻すと、任意の予測変数のリストからノイズを取り除くにはどうすればよいのでしょうか。私は、170の中から27の予測変数を選択する経験的アルゴリズムを持っています。また、他の人の予測変数のセットを分析するのにも使いましたが、これも成功しました。この経験に基づいて、私は、アルゴリズムに「重要度」変数を使用するRからのすべてのメソッドは、ノイズの予測器集合をクリアすることができないと主張します。

このスレッドの読者の皆さんに訴えます:生データがRDataや加工不要のExcelファイルで提示されれば、適切な解析をする気があります。

それ以外は。

添付ファイルには、予測変数のオリジナルセットをノイズからクリアする問題を解決すると思われる、より質の高い論文を多数添付しています。残念ながら、今は試す時間がありません。もしかしたら、誰かが試して結果を投稿するかもしれません。

ファイル:
 
SanSanych Fomenko:

予測変数の元のセットをノイズからクリアにする問題を、より高い品質で解決すると思われる記事を多数添付します。残念ながら、今は試す時間がありません。もしかしたら、誰かが試して結果を投稿してくれるかも?

ありがとうございます、ドキュメントを読みましたが、必要なものが見つかりませんでした。FXのモデルをM15とH4の間のどこかでトレーニングしようとしています。最後のバーのデータを取るだけでは不十分で、数十本のバーのデータを一度に取り、モデル入力用の長い配列に次々と配置する必要があるのです。例えば、(open_bar1, close_bar1, hh_bar1, open_bar2, close_bar2, hh_bar2, open_bar3, close_bar3, hh_bar3,...) のようになります。もし、ある選択方法が、2本目のバーの時間を削除するように指示するなら、それは私の助けにはなりません。その方法は、例えば、時間に関するすべてのデータ(インデックス3、6、9...)を削除するように指示するべきです。

ALL_cod.RDataで、Rat_DF1をトレーニングにも使い(必要なターゲットを指定)、Rat_DF2とRat_DF3をチェックに使うということでよろしいでしょうか?エラー制御されたニューラルネットワークの トレーニングを実装したRのコードを添付します。他のターゲット変数を選択するには、ファイル内の「Short_Long.75」を「Short_Long.35」「Flet_Long」「Short_Flet」「Flet_In」のいずれかに置き換えればよい。異なるデータセットで代用するよりも便利です。

ファイル:
 
Dr.トレーダー
FX用のモデルをM15-H4のどこかでトレーニングしようと思っています。最後のバーのデータだけでは不十分で、数十本のバーのデータを一度に取得し、モデル入力用の長い配列に次々と入れる必要があるのです。例えば、(open_bar1, close_bar1, hh_bar1, open_bar2, close_bar2, hh_bar2, open_bar3, close_bar3, hh_bar3,...) のようになります。もし、ある選択方法が、2本目のバーの時間を削除する必要があると言うなら、それは私の助けになりません。その方法は、例えば、すべての時間データ(インデックス3、6、9・・・)を削除できることを教えてくれるはずです。

mmm セッションによって市場の動きが異なるため、時間データが必要な場合があります。

私のFXの機能を見てください。

> names(sampleA)

  [1] "lag_diff_2"        "lag_diff_3"        "lag_diff_4"        "lag_diff_6"        "lag_diff_8"        "lag_diff_11"       "lag_diff_16"     

  [8] "lag_diff_23"       "lag_diff_32"       "lag_diff_45"       "lag_diff_64"       "lag_diff_91"       "lag_diff_128"      "lag_diff_181"    

 [15] "lag_diff_256"      "lag_diff_362"      "lag_diff_512"      "lag_diff_724"      "lag_mean_diff_2"   "lag_mean_diff_3"   "lag_mean_diff_4" 

 [22] "lag_mean_diff_6"   "lag_mean_diff_8"   "lag_mean_diff_11"  "lag_mean_diff_16"  "lag_mean_diff_23"  "lag_mean_diff_32"  "lag_mean_diff_45"

 [29] "lag_mean_diff_64"  "lag_mean_diff_91"  "lag_mean_diff_128" "lag_mean_diff_181" "lag_mean_diff_256" "lag_mean_diff_362" "lag_mean_diff_512"

[36] "lag_mean_diff_724" "lag_max_diff_2"    "lag_max_diff_3"    "lag_max_diff_4"    "lag_max_diff_6"    "lag_max_diff_8"    "lag_max_diff_11" 

 [43] "lag_max_diff_16"   "lag_max_diff_23"   "lag_max_diff_32"   "lag_max_diff_45"   "lag_max_diff_64"   "lag_max_diff_91"   "lag_max_diff_128"

 [50] "lag_max_diff_181"  "lag_max_diff_256"  "lag_max_diff_362"  "lag_max_diff_512"  "lag_max_diff_724"  "lag_min_diff_2"    "lag_min_diff_3"  

 [57] "lag_min_diff_4"    "lag_min_diff_6"    "lag_min_diff_8"    "lag_min_diff_11"   "lag_min_diff_16"   "lag_min_diff_23"   "lag_min_diff_32" 

 [64] "lag_min_diff_45"   "lag_min_diff_64"   "lag_min_diff_91"   "lag_min_diff_128"  "lag_min_diff_181"  "lag_min_diff_256"  "lag_min_diff_362"

 [71] "lag_min_diff_512"  "lag_min_diff_724"  "lag_sd_2"          "lag_sd_3"          "lag_sd_4"          "lag_sd_6"          "lag_sd_8"        

 [78] "lag_sd_11"         "lag_sd_16"         "lag_sd_23"         "lag_sd_32"         "lag_sd_45"         "lag_sd_64"         "lag_sd_91"       

 [85] "lag_sd_128"        "lag_sd_181"        "lag_sd_256"        "lag_sd_362"        "lag_sd_512"        "lag_sd_724"        "lag_range_2"     

 [92] "lag_range_3"       "lag_range_4"       "lag_range_6"       "lag_range_8"       "lag_range_11"      "lag_range_16"      "lag_range_23"    

 [99] "lag_range_32"      "lag_range_45"      "lag_range_64"      "lag_range_91"      "lag_range_128"     "lag_range_181"     "lag_range_256"   

[106] "lag_range_362"     "lag_range_512"     "lag_range_724"     "symbol"            "month"             "day"               "week_day"        

[113] "hour"              "minute"            "future_lag_2"      "future_lag_3"      "future_lag_4"      "future_lag_6"      "future_lag_8"    

[120] "future_lag_11"     "future_lag_16"     "future_lag_23"     "future_lag_32"     "future_lag_45"     "future_lag_64"     "future_lag_91"   

[127] "future_lag_128"    "future_lag_181"    "future_lag_256"    "future_lag_362"    "future_lag_512"    "future_lag_724"

移動平均線 と高値・安値、価格スプレッドの両方のデータを窓で取っています。そして時間、そして日数、さらには月数も)。

私のアルゴリズムは、現実的には114個の予測変数のうち10個、あるいは5個を残すことができます。これが普通です。このようなデータでは、PREDICTORS間に強い相関があり、したがって強い冗長性が存在する。

 

私が行っている情報提供機能の選定方法について、簡単にご説明します。そのコードを添付します。

この問題には2つの側面があります:サブセットをどのように選択するか、そして、選択された予測変数の出力変数への関連性をどのように測定するかです。

最初の質問です。シ ミュレーテッド・アニーリング法を用いて、予測変数の組み合わせを確率的に列挙することで解決しています。遺伝学や非決定的勾配降下法に似た結果を得ることができる。プラス面は、ローカルミニマムから選択し、自然界にある原理に従って動作することです。滑らかでないエラーサーフェスでも動作可能ですが、ここではすべて条件付きです。

多くの問題に対して、この方法の支持者は、例えば遺伝学よりも優れていると考えています。Rのパッケージを通じて、ほぼ標準的に実装されています。連続データで,予測変数のインデックスがあるので,予測変数の総数と同じ長さの連続ベクトルを作り,スカラーが与えられた閾値を超えたら,予測変数のインデックスが1になるようにしています.

2つ目の質問は、さらに微妙なところです。フィットネス関数。

予測因子(および予測因子の集合)が出力に影響を与えることを測定する方法。依存関係は非線形であってもよい。標準回帰では、非線形問題で大きなラグが発生することがあります。ブラックボックストレーニングや内蔵の重要度推定器を使うということではありません。別メソッドの話です。

依存関係は非常に複雑で、相互作用や冗長性、また非線形性を含んでいることを理解する必要があります。これらはすべて、数値だけでなく、カテゴリーデータにも適用できる。

カテゴリーデータについては、情報理論的に優れたツールがあるので、それを選択しました。簡単に言うと、入力があって出力があるということです。出力状態が入力に少なくとも少しは依存する(確率的に)場合、両者は依存関係にある。相互情報量というものがあります。これを測定するのです。

今度はもっと深く。VIは有限サイズのサンプルで観測された分布に何かを測定します。もちろん、これはポイント推定値です。

そこで、独立した入出力ペアの場合、情報の統計的境界を推定する必要がある。これは数値的な方法を用いた自作機能によって行われる。

さらに深く。2つ以上の予測変数がある場合、それらをどうするか?

まず、それら自身が関連性を持っている可能性があり、関連性が高ければ高いほど、その集合は冗長性を持つことになる。この冗長性を測るのが、いわゆるマルチインフォメーションである。しかし、多情報はサンプルに対する点推定でもある。これについては、分布の分位数も別の自作関数によって数値的に計算される。

第二に、予測変数のカテゴリのレベル数が 非常に大きく(例えば、2 ^ 15)、これらのレベルにおける依存性については何も言うことができない場合がある。1レベルあたりの観察回数は非常に少ない。

最後に、これらをすべて行ってまとめると、任意の数の予測因子と出力について、任意のサンプルサイズで、あらかじめ決められた統計的有意性をもって、あらゆる種類の依存性を測定することができるのです。基礎となる関数そのものは、Information Theoryパッケージから引用しています。

添付ファイルに全て記載されています。もちろん、100gもないとなかなか理解できません。また、取引ルールを作成し、その検証を行うためのフルコードも用意されています。全ては皆様のご参考に、そして知識を深めるために。

基本的にはいつもどおりの結果です。

[1] "1.69%"

> final_vector <- c((sao$par >= threshold), T)

> names(sampleA)[final_vector]

 [1] "lag_diff_23"      "lag_diff_45"      "lag_mean_diff_2"  "lag_mean_diff_8"  "lag_max_diff_11"  "lag_max_diff_181" "lag_min_diff_3"   "lag_min_diff_724"

 [9] "lag_sd_724"       "lag_range_32"     "symbol" "future_lag_181"  

1日半の作業と何万もの予測変数の組み合わせの列挙の後、この関数はフィットネス関数値を出力する。これは、予測変数集合の冗長性にペナルティをかけた意味のある相互情報量である。そして、予測因子そのものも。

これらすべては、繰り返すが、カテゴリカルであり、人間が読めるルールを構築することができる。検出されたパターンの解釈を可能にする。

例えば、上記では完全決定論が1.7%(FXとしては悪くない)、信頼度0.1で有意に出力(バイナリ)状態を決定する多くの入力(私はこのような実験をした)がある。つまり、明らかにFXのデータの情報が存在しているのです。という疑問は、実験的に証明されている。

その後、収益性の検証を行い、取引システムを構築することができます。

アレクセイ

ファイル:
 
Dr.トレーダー


ALL_cod.RDataで、Rat_DF1をトレーニングに使用し、Rat_DF2とRat_DF3をチェックに使用することもできると理解してよいでしょうか?エラー制御されたニューラルネットワークのトレーニングを実装したRのコードを添付します。他のターゲット変数を選択するには、ファイル内の「Short_Long.75」を「Short_Long.35」「Flet_Long」「Short_Flet」「Flet_In」のいずれかと置き換えればよい。これは、異なるデータセットを代用するよりも便利です。

はい、まさにガラケーの利便性を追求したものです。

もうひとつ、ニュアンスを。

すべてのターゲット変数は、ZZ(35)とZZ(25)の2つのZZから派生しています。そして、ここでひとつ、あなたと共鳴する非常に不愉快なニュアンスがあります。

対象変数は0と1の並びで、これはZZアームに相当する。しかし、私たちは常にZZアームの一要素を予測しており、アームそのものを予測しているわけではありません。ですから、トレンドを予測するというのは間違っています。トレンドの 要素を予測している、というのが正しい。そして、予測されるトレンドの要素をすべて足し合わせると、おそらくそのトレンドはうまくいかないでしょう。

 

feature_selector_modeller.zipをありがとうございました。

サンサニッチ・フォメンコ

このブランチの読者の皆さんへ:もし、最初のデータがRDataまたはExcelファイルの形で提示され、加工を必要としないのであれば、私は対応する分析を行う用意があります。

ファイルを添付しましたが、これはFXのデータ一式です。RDataの中に、学習用と検証用の2つのデータセットがあります。物理的には2つのデータセットのデータは互いに背後で動いていますが、モデルをテストする都合上、2つのファイルに分けられています。このデータセットでのモデルは学習可能です。私は手動で予測子をふるい落とし、ニューロンを学習させました。最終的に検証データセットでの最小誤差は46%で、これは本当に利益にならないものでした。誤差が40%を切れば実益があると思えばいいのです。このファイルから予測因子を選別してみてください。

サンサニッチ・フォメンコ

対象変数は0と1の並びで、レバレッジZZに相当する。しかし、私たちは常に、ZZアームの個々の要素を予測するのであって、アームそのものを予測するのではありません。ですから、トレンドを予測するというのは間違っています。トレンドの 要素を予測している、というのが正しい。そして、予測されるトレンド要素をすべて足し合わせると、おそらくトレンドすら出てこないでしょう。

さまざまなターゲット変数を試しました。一方では、1バー先の価格を予測し、次のバーの価格が上か下かによってターゲット変数が1または0になることができます。小さなタイムフレームでは、終値がかなりランダムな数字になるようで、結果が出たことはありません。しかし、H1以上ではすでに何らかのポジティブな結果が得られています。

もう一つのバリエーションは、ジグザグなどのトレンド指標 です。しかし、その結果をフィルターに通すという条件付きで、好結果を得ることができました。例えば、直近のバーの結果の平均を取ったり、ある閾値以上の結果のみを使用したりすることができます。私見ですが、あれを全部適用しても意味がない、正確な計算というより当てずっぽうなんです。問題は、次の10~20本のバーのうち、買いシグナルだけを出すことが要求されているモデルで、その間に売りシグナルを出すことがあることです。このような場合、取引は取り消され、手数料とスプレッドが支払われるといったことが、トレンドごとに何度か繰り返されます。したがって、たった1本のバーでこのような逆転が起こらないように、高い精度を得るか、結果を滑らかにする必要があります。つまり、おっしゃるとおり、トレンドの一要素だけが予測されるのであって、トレンドそのものがそのような要素で構成されることはありえないのです。

ファイル:
set56.RData.zip  525 kb
 
Dr.トレーダー


さまざまなターゲット変数を試しました。一方では、1バー先の価格を予測し、次のバーの価格が上昇しているか下落しているかによって、ターゲット変数が1または0になることができます。小さなタイムフレームでは、終値がかなり乱数になってしまうようで、結果が出ませんでした。しかし、H1以上ではすでに何らかのポジティブな結果が得られています。


私の結果は一貫して逆です。数分先(最大1時間先)の値動きを55%の精度で簡単に予測できる(Ask to Ask)。23分間でベストリザルト。検証用サンプルでの2値分類です。

そして、予測地平が広がるにつれて、精度は徐々に低下し、12時間先で51%になります。そして、この依存性は歴史全体に存在する。しかし、プラスになるためには(Ask-Bidの距離を克服するためには)精度がさらに高くなければならない。

後ほど説明します。

 
Dr.トレーダー

feature_selector_modeller.zipの提供ありがとうございます、検討してみます。

ファイルを添付しました、FXのデータセットです。RDataの中に、学習用と検証用の2つのデータセットがあります。物理的には2つのデータセットのデータは互いに続いていますが、モデルをテストする都合上、2つのファイルに分けられています。このデータセットでのモデルは学習可能です。私は手動で予測子をふるい落とし、ニューロンを学習させました。最終的に検証データセットでの最小誤差は46%で、これは本当に利益にならないものでした。誤差が40%を切れば実益があると思えばいいのです。このファイルから予測因子を選別してみてください。


予測因子はひとつも見つからず、すべてノイズになっています。予測変数には、ターゲット変数に対する予測力がない。いくつかのヒント 54,55,56.何か出てくるかもしれない...。そうでなければ、私としては、すべて捨ててしまってもいいと思っています。
 
なるほど、ありがとうございます。他のインプットを探してみます。
 
Dr.トレーダー
なるほど、ありがとうございます。他の生データを探してみます。

ちょっと待ってください。依存関係のデータも実行してみますね。

その前に1つ質問です。データは一列に並んだすべてのバーを含んでいますか、それともサンプルを作る前にバーを間引いたのでしょうか。

理由: