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

 
mytarmailS:
すでにやったが、ニューラルネットワークは、私が与えたターゲットでは、より大きな地平線を学習しない。

その言葉には微笑ましく思います。

学習しないニューラルネットワークではなく、文字通り、学習しないように仕向けるのです。ニューラルネットワークは、ノイズ以外の信号がある場所を学習しますが、あなたの仕事は、グレートニューラルネットワークの助けを借りて、このノイズから信号を分離し、再学習させないことです。

 
アレクセイ・ブルナコフ
こちらの方が正解です)。いろいろな方法を試してみます。

以前、こんな方法を提案したことがあります。

Expert Advisorを使用します。これは、kodobaseのものです。要はフルブラッドであればいいのであって、負けていても問題ないのです。事前条件を設定することができます。例:トレンディング、3つのウィンドウ、SLとTPなし、MM、状態のエラー回復...。

損失の原因を調べ、Rを使って解決するようにしなければなりません。ローウィンドウでは外挿によって問題を解決し、ハイウィンドウでは分類によって次のバーを予測する。

 
アレクセイ・ブルナコフ

機能選択に関する私の記事。

https://habrahabr.ru/company/aligntechnology/blog/303750/

読んでいて面白かったです、お疲れ様でした。実験6がよくわからないのですが、最終的にYとZの予測変数が選ばれたのはなぜですか?Zはターゲット変数であり、予測変数のリストには入っていないはずです。

3Dのウサギのグラフをとって、その上でモデルを学習させるというのはいいアイデアですね。正直なところ、最初は「ウサギ」というのは、グラフ上で見栄えのする、数字の配列の中にウサギを見る能力を持つ人間にとってのみ意味のある疑似ランダムデータのようなものだと思っていたんです。しかし、ウサギを記述する関数はなく、どのモデルでも、3次元空間に特殊な形のクラスターを形成する点の集合に過ぎないのです。私の目から見ると、各点の3つの座標はすべて関係も依存性もないので、どんなアルゴリズムでも扱えないと思っていました。記事の最後に私は驚きました。

同じ実験をPCAでやってみたところ、以下のような結果になりました。
95%の精度で1つのコンポーネントが必要で、それはXとYを使用しています。しかし、予測アルゴリズムは1つのコンポーネントでは機能せず、最低でも2つのコンポーネントが必要です。基本的にはどちらもXとYを使うので(コードには表示されませんが、グラフで確認できます)、大丈夫だと思います。
サンプルAでモデルを学習させ、サンプルAのZを予測 : R^2 = 0.04759303
サンプルAでモデルを学習させ、サンプルBのZを予測:R^2 = 0.05325888

sampleBの予測Zを3Dプロットしたところ、ひどい結果になりました。このモデルでは、依存関係を見つけることはできず、すべてのZを1つの平面に平均化しただけでした。ウサギが平気で出てきた。モデルをいくつかトレーニングして、ウサギの予想図を描いてみましたか?機種によってどうなんでしょうね。

rabbitとY-aware pcaのコードを添付します。小さなバグがあり、予測変数の負荷量グラフが何らかの理由で成分をソートしています。つまり、1,10,11,12,2,3,4,5,...ということです。しかし、重要度の高い順に、PC1、PC2、PC3、...の順で見ていく必要があります。

ファイル:
bunny_pca.txt  5 kb
 
mytarmailS:
以前、私が設定したターゲットでは、ニューラルネットワークはより大きな地平で学習することはありません

まだ、1本の小節を越えて神経細胞を訓練することは試していませんが、原理は同じだと思います。私は次のように作業しています。

1) mt5からできるだけ多くの生データを収集する - ohlc、時間、指標。何が有用で何が不要か分からないので、全部持っていって、ゴミをふるいにかけるようにしています。というのも、neuronkaはゴミを再トレーニングし、この場合はfronttestでミスをするため、すべてをneuronkaに送ることができないのです。ゴミを選別するのは簡単ではありません。実際、このスレッドの28ページすべてがその方法について書かれており、今のところすべてが曖昧です。次のバーの価格の下落/上昇に応じて、0または1のターゲット変数をデータに追加します。

2)適切なゴミのふるい分け。初期データを解析して点数をつける機能があるはずです。見積もりが高いほど、ゴミが少ない。評価関数に様々な組み合わせの元予測子(トレーニングテーブルの列)を与え、結果を増やすことを試みる。最終的にはある予測変数のセットが見つかり、理論上はオーバートレーニングにならないようになります。

3)仮にゴミがなくなったとする。さて、いよいよニューラルネットワークの学習です。Rのnnetパッケージを使っていますが、学習速度、加速度、遅延、学習関数の種類などのハイパーパラメータがないのが利点です。ハイパーパラメータが少なければ、問題も少なくなる。クロスバリデーションで学習する必要があります。初期テーブルを70%/15%/15%の割合で3行に分割する(新しいテーブルはtrain/test/validateと呼ぶ)(コードはラトルログから取得可能、私はそこから開始した)。そして、例えば10回ほど繰り返し、トレーニングテーブルでニューロニクスのトレーニングを行います。予測誤差R^2を計算する。テストと検証の表の結果を予測して、R^2も計算しています。さらに10回学習を繰り返し、3つのテーブルで予測を行い、新しいR^2を見ます。いくつかのテーブルのR^2が低下し始めたら、トレーニングを中止する(トレーニングテーブルのみ常に成長する)。完了しました。ここで、最終的に3つのテーブルの最小R^2が前回よりも高くなることを期待して、異なる隠れニューロンの数とクロスバリデーション間の異なる学習反復回数を使用して、このすべてを再び繰り返すことができます。

ちょっと複雑に見えるかもしれませんが、実はもっと複雑で :) 、それぞれのステップに問題が山積みなんです。しかし、安定した結果が得られる。

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

ノイズで教えるなんて、勉強不足もいいところだ。でも、そうすると、聖杯の上で、本番の上で、勉強することになるんですよね...。

ノイズを排除するために、ここは忙しい。だから、せめて何かが残ればと思い、多くの予測値を取っているのです。

ノイズをトレーナーとして使おうとしているわけですが、(例えば)ストキャスティクスがマジックナンバー90で、インジケーターがそういう値を出したときに相場が下がれば、ネットワークなんていらない、目に見えてわかるということを理解すべきです。

1) せいぜい、ある基準で可能な100の指標の中からベスト10の指標を選ぶことであり、指標には値の範囲が あります。この3つの値だけがノイズではなく インジケータの代わりに保持されるべきもので、残りの値は同じノイズであるため、これらの拒否はすべて質的に深くなく、したがって非常に効率的ではありません。

2)さらに、属性の矛盾という概念がある。例えば、価格を例にとると、それは客観的で矛盾がない、つまり、価格が上昇している場合は上昇しているのであって、(トレンドの力などのニュアンスを無視すれば)2番目はない、同じストキャスティックを例にとると、トレンドが横ばいのときと上下のときに90値を取ることができる、つまり一方、このインジケータは、ネットワークの役には立たないし、逆に、読みが一貫しないので、いつも市場を混乱させる。だから、普通のインジケータは市場に通用 しない。そんなことも 考えずに、全部埋めて、ノイズが どうのこうのと言うのだ。

上に書いたように、予想水平線に満足していない。

 
Dr.トレーダー

読んでいて面白かったです、お疲れ様でした。実験6がよくわからないのですが、最終的にYとZの予測変数が選ばれたのはなぜですか?Zはターゲット変数であり、予測変数のリストには入っていないはずです。

3Dのウサギのグラフをとって、その上でモデルを学習させるというのはいいアイデアですね。正直なところ、最初は「ウサギ」というのは、グラフ上で見栄えのする、数字の配列の中にウサギを見る能力を持つ人間にとってのみ意味のある疑似ランダムデータのようなものだと思っていたんです。しかし、ウサギを記述する関数はなく、どのモデルでも、3次元空間に特殊な形のクラスターを形成する点の集合に過ぎないのです。私の目から見ると、各点の3つの座標はすべて関係も依存性もないので、どんなアルゴリズムでも扱えないと思っていました。記事の最後に私は驚きました。

PCAで同じ実験をしてみると、結果はこのようになります。
95%の精度で1つのコンポーネントが必要で、XとYを使用します。しかし、予測アルゴリズムは1つの部品では機能せず、最低でも2つ取る必要があります。基本的にはどちらもXとYを使うので(コードには表示されませんが、グラフで確認できます)、大丈夫だと思います。
サンプルAでモデルを学習させ、サンプルAのZを予測 : R^2 = 0.04759303
サンプルAでモデルを学習させ、サンプルBのZを予測:R^2 = 0.05325888

sampleBの予測Zを3Dプロットしたところ、ひどい結果になりました。このモデルでは、依存関係を見つけることはできず、すべてのZを1つの平面に平均化しただけでした。ウサギが平気で出てきた。モデルをいくつかトレーニングして、ウサギの予想図を描いてみましたか?機種によってどうなんでしょうね。

rabbitとY-aware pcaのコードを添付します。小さなバグがあり、予測変数の負荷量グラフが何らかの理由で成分をソートしています。つまり、1,10,11,12,2,3,4,5,...ということです。が、重要な順に、PC1、PC2、PC3、...と見ていくとよいでしょう。

では、メインコンポーネントにXとYは入っているのでしょうか?それを理解することが重要でしょう。

2つ目は、ウサギの近似値についてです。もちろん、そうであるべきです。リニアモデルです。XとYの場合は少し傾きのある平面、1つの予測変数の場合は直線が描かれるだけです。それが線形ウサギのモデルです)だから、私は非線形モデルを使うようにしています。

別の方法(離散値ベース)でウサギを復元する方法です。

 
アレクセイ・ブルナコフ

では、XとYは主要部品に登場したのでしょうか?理解することが重要でしょう。

はい、XとYのみです。コードでこれを行う方法はまだ見つかっていません。この件に関する記事はすべてグラフで操作しています。撮影するコンポーネントの数は、componentsToUse変数で確認することができます。この場合、componentsToUse = 2, それは、PC1とPC2のチャート上で広い水平線を 持つ予測変数のみを取る必要があることを意味します。

上のグラフで、PC1、PC2(第1主成分、第2主成分)の列と、緑の水平線に注目してください。線が0から離れると(正であれ負であれ),その予測変数は対応する主成分で使用される.PC1はy_clean(元の予測因子との混同を避けるため、データをスケーリングする際に"_clean "が自動的に付加されます)、PC2はx_cleanを使用します。これがPCA成分解析の結果です。x_cleanとy_cleanを取る必要があります。

今後、PC3はinput_noise_3_cleanを使用することになります。これはあくまで例であり、この場合PC3は必要ありません。

これが実は、とてもうまくいったのです。XとYは、グラフの中ではっきりと浮き出ています。先ほど、すべてが悪いというFXの同じチャートを掲載しました。

 
Dr.トレーダー

はい、XとYのみです。コードでこれを行う方法はまだ見つかっていません。この件に関する記事はすべてグラフで操作しています。撮影するコンポーネントの数は、componentsToUse変数で確認することができます。この場合、componentsToUse = 2, それは、PC1とPC2のチャート上で広い水平線を持って いる予測変数のみを取る必要があることを意味します。

上のグラフで、PC1、PC2(第1主成分、第2主成分)の列と、緑の水平線に注目してください。線が0から離れると(それが正であれ負であれ),その予測変数は対応する主成分で使用される.PC1はy_clean(元の予測因子との混同を避けるため、データをスケーリングする際に"_clean "が自動的に付加されます)、PC2はx_cleanを使用します。

今後、PC3はinput_noise_3_cleanを使用することになります。これは一例であり、この場合PC3は使用する必要はありません。

これが実は、とてもうまくいったのです。XとYは、グラフの中ではっきりと浮き出ています。以前、FXでも同じチャートを掲載したことがありますが、そちらはイマイチです。

ここでの予測変数の選択は、線形法によるものであることが判明した。いやあ、驚いていただけてよかったです。新しいものを見たということです )
 
Dr.トレーダー

まだ、1本の小節を越えて神経細胞を訓練することは試していませんが、原理は同じだと思います。私は次のように作業しています。

1) mt5からできるだけ多くの生データを収集する - ohlc、時間、指標。何が有用で何が不要か分からないので、全部持っていって、ゴミをふるいにかけるようにしています。というのも、neuronkaはゴミを再トレーニングし、この場合はfronttestでミスをするため、すべてをneuronkaに送ることができないのです。ゴミを選別するのは簡単ではありません。実際、このスレッドの28ページすべてがその方法について書かれており、今のところすべてが曖昧です。次のバーの価格の下落/上昇に応じて、0または1のターゲット変数をデータに追加します。

2)適切なゴミのふるい分け。初期データを解析して点数をつける機能があるはずです。見積もりが高いほど、ゴミが少ない。評価関数に様々な組み合わせの元予測子(トレーニングテーブルの列)を与え、結果を増やすことを試みる。最終的にはある予測変数のセットが見つかり、理論上はオーバートレーニングにならないようになります。

3)仮にゴミがなくなったとする。さて、いよいよニューラルネットワークの学習です。Rのnnetパッケージを使っていますが、学習速度、加速度、遅延、学習関数の種類などのハイパーパラメータがないのが利点です。ハイパーパラメータが少なければ、問題も少なくなる。クロスバリデーションで学習する必要があります。初期テーブルを70%/15%/15%の割合で3行に分割する(新しいテーブルはtrain/test/validateと呼ぶ)(コードはラトルログから取得可能、私はそこから開始した)。そして、例えば10回ほど繰り返し、トレーニングテーブルでニューロニクスのトレーニングを行います。予測誤差R^2を計算する。テストと検証の表の結果を予測して、R^2も計算しています。さらに10回学習を繰り返し、3つのテーブルで予測を行い、新しいR^2を見ます。いくつかのテーブルのR^2が低下し始めたら、その時点でトレーニングを中止する(トレーニングテーブルのみ常に成長する)。完了しました。ここで、最終的に3つのテーブルの最小R^2が前回よりも高くなることを期待して、異なる隠れニューロンの数とクロスバリデーション間の異なる学習反復回数を使用して、このすべてを再び繰り返すことができます。

ちょっと複雑に見えるかもしれませんが、実はもっと複雑で :) 、それぞれのステップに問題が山積みなんです。しかし、安定した結果が得られる。

私は違う視点を持っているのに、あなたはそれを理解していない
 

サンサニッチ・フォメンコ
ステップの前に最初の10個(のようなもの)を取って、残りを捨てたらどうでしょう?

使用部品数の関数として、R^2と勝訴率のグラフを描きました。フロントテストでは、41成分で最も良い結果が得られました(約70%の利得、非常に良い)。でも、バックテストのチャートからはそれがわからず、ずっと上がり続けているんです。部品の重要度に頼れば、73を取るべきだったのですが、これはfronttestではベストな結果ではありません。

フロントテストのR^2は、50%以上のケースで勝利しても負になることがあります。これは、要求される結果がアンバランスで、クラスの数「0」が「1」と異なるため、それらの平均が0.5ではなく、それによるR^2が若干悪くなっています。

理由: