記事"強化学習におけるランダム決定フォレスト"についてのディスカッション - ページ 5

 
Maxim Dmitrievsky :

こんにちは、まだ準備できていません。完成したら、手紙を書きます。

お返事ありがとうございます。

現在のランダムフォレストの実装で、Q-learningを報酬関数として 実装しようと考えたことはありますか?

つまり、決定のために閉じたろうそくごとに報酬行列を更新するエージェントに報酬を与える方法として「ベルマン方程式」を使いたいのですが、それは可能でしょうか?

ちょうどQ式を実装したMQL5のサンプルコードがあるので、興味があればここに投稿します。自分でも実装してみましたが、マトリックスの実装はあまり得意ではなく、マトリックスの正しい使い方もまだ100%わかっていません。

ところで、正直なところ、EAは特定の相場状況下では有望で驚くべき結果を出すことがありますが、相場が変化したときには必ずしもそうではありません。そこで私は、損失が発生したらEAが即座に予測変数(インジケーター)を自動的に変更するような実装も試みています。私は、あなたがコメントの中でこの予測指標を自動的に選択するというアイデアについて言及しているのを見ました。

 
FxTrader562 :

ご回答ありがとうございます。

現在のランダム・デシジョン・フォレストの実装において、報酬関数として Q-ラーニングを実装しようと考えたことはありますか?

つまり、決定のために閉じた各キャンドルの報酬行列を更新するためにエージェントに報酬を与える方法として「ベルマン方程式」を使いたいのですが、それは可能でしょうか?

ちょうどQ式を実装したMQL5のサンプルコードがあるので、興味があればここに投稿します。自分でも実装してみましたが、マトリックスの実装はあまり得意ではなく、マトリックスの正しい使い方もまだ100%わかっていません。

ところで、正直なところ、EAは特定の相場状況下では有望で驚くべき結果を出すことがありますが、相場が変化したときには必ずしもそうではありません。そこで私は、損失が発生したらEAが即座に予測変数(インジケーター)を自動的に変更するような実装も試みています。あなたがコメントの中で、この予測指標を自動的に選択するというアイデアについて触れているのを見ました。

はい、Q-learningについて考えていました。ランダムフォレスト自体が方針を近似するので、ベルマン方程式は必要ないということです。また、Q-learningは非常にオーバーパワーです。

私は今、「カーネルトリック」のような自動関数変換の解決策を探している。そうすれば、繰り返しモデルを訓練し、テスト・サブセットで分類誤差の小さい変換された特徴を持つモデルを選択することができる。

 
Maxim Dmitrievsky :

はい、Q-learningについて考えていました。ランダムフォレスト自体がポリシーを近似するので、ベルマン方程式は必要ないということです。また、Q-learningは非常にオーバーパワーです。

私は今、「カーネルトリック」のような自動関数変換の解決策を探している。そして、繰り返しモデルを訓練し、テストサブセットで分類誤差の小さい変換された特徴を持つモデルを選択することができます。

はい、ポリシーの収束については同意します。しかし、現在のポリシー対ポリシーの実装では、ポリシーは取引履歴や取引フロートなどの一貫した損失を考慮していません。従って、Qを実施することで、エージェントは各オープントレードの現在の浮動利益、過去の連続した損失と利益を完全に理解することになり、従って、利益を最大化するようにポリシーを近似することになります。

つまり、一連の利益ある取引から得た利益は、1回の大きな損失で帳消しになりますが、エージェントは単に利益ある取引の数を最大化することを目指しているので、このことはエージェントには関係ありません。そこで、Q-valueでは、現在の変動利益でエージェントに即座に報酬を与えることができます。エージェントは、利益取引の数や取引の終了に関係なく、利益を最大化し、下げ幅を最小化するために次の決定を行うために、ローソク足が開くたびにそれをチェックします。

いずれにせよ、連続した損失でモデルを反復的かつ自動的に訓練する何かを実装する予定であれば、これは非常に有用でしょう。次回の記事では、このようなものを考えてみたいと思います。

また、ここ数週間の私のEAトレーニングとテストに基づくと、1回損失が発生したら、自動的に別のモデル(別の指標値やインジケーター)に切り替えるだけで、そうでなければEAは、マーケットが一定時間ストラテジーにヒットすると、一連の有益なトレードを提供することに気づきました。しかし、一度損失が発生すると、同じような損失がしばらく続きます。

 

FxTrader562 :

はい、政策の収束については同意します。しかし、現在のポリシー・トゥ・ポリシーの実装では、ポリシーは取引履歴の連続損失、取引変動利益などを考慮していません。したがって、Qを実施するということは、エージェントが各オープントレードの現在の変動利益と過去の連続した損失と利益を完全に把握し、利益を最大化するようにポリシーを近似させるということです。

つまり、一連の利益ある取引から得た利益は、1回の大きな損失で帳消しになりますが、エージェントは単に利益ある取引の数を最大化することを目指しているので、このことはエージェントには関係ありません。そこで、Q-valueでは、現在の変動利益でエージェントに即座に報酬を与えることができます。エージェントは、利益取引の回数や取引の終了に関係なく、利益を最大化し、下げ幅を最小化するために次の決定を行うために、ローソク足が開くたびに確認します。

いずれにせよ、連続した損失でモデルを反復的かつ自動的に訓練する何かを実装する予定であれば、これは非常に有用でしょう。次回の記事では、このようなものを考えてみたいと思います。

また、ここ数週間の私のEAトレーニングとテストに基づいて、私は、1つの損失が発生したときに自動的に異なるモデル(異なる指標値または指標)に切り替える必要があることに気づきました。しかし、1回損失が発生すると、同じような損失がしばらく続きます。

そこで、このような場合には自動最適化が 有効だと思います。自動最適化についてはすでに1つの記事が存在すると思いますので、現在のEAに実装していただければ作業は完了です。




 
FxTrader562 :

はい、政策の収束については同意します。しかし、現在のポリシー・トゥ・ポリシーの実装では、ポリシーは取引履歴の連続損失、取引変動利益などを考慮していません。したがって、Qを実施するということは、エージェントが各オープントレードの現在の変動利益と過去の連続した損失と利益を完全に把握し、利益を最大化するようにポリシーを近似させるということです。

つまり、一連の利益ある取引から得た利益は、1回の大きな損失で帳消しになりますが、エージェントは単に利益ある取引の数を最大化することを目指しているので、このことはエージェントには関係ありません。そこで、Q-valueでは、現在の変動利益でエージェントに即座に報酬を与えることができます。エージェントは、利益取引の回数や取引の終了に関係なく、利益を最大化し、下げ幅を最小化するために次の決定を行うために、ローソク足が開くたびに確認します。

いずれにせよ、連続した損失でモデルを反復的かつ自動的に訓練する何かを実装する予定であれば、これは非常に有用でしょう。次回の記事では、このようなものを考えてみたいと思います。

また、ここ数週間の私のEAトレーニングとテストに基づいて、私は、1つの損失が発生したときに自動的に異なるモデル(異なる指標値または指標)に切り替える必要があることに気づきました。しかし、1回損失が発生すると、同じような損失がしばらく続きます。

そこで、このような場合には自動最適化が有効だと思います。自動最適化については、すでに1つの記事が存在していると思いますので、それを現在のEAに実装できれば作業は完了です。

例えば、報酬関数を 変更してシャープレシオに近づけるとか。あるいは他の指標も。私はさまざまな関数を試しましたが、複雑にしてもあまりメリットがないことに気づきました。

https://github.com/darden1/tradingrrl。

自動最適化は良いアイデアですが、私は今、現在のアルゴリズムの改良に取り組んでいます。

 
Maxim Dmitrievsky :

例えば、報酬関数を 変更してシャープレシオに近づけることができる。あるいは他の指標を使うこともできる。いろいろな関数を試してみたが、複雑にしてもあまりメリットがないことに気づいた。

https://github.com/darden1/tradingrrl。

自動最適化は良いアイデアですが、今は現在のアルゴリズムの改良に取り組んでいます。

記事をありがとう。検討してみます。

コーディングのしやすさ、学習のスピード、結果の正確さの点で、現在の実装が私が機械学習で見た中で最高であることに疑いの余地はありませんし、さらにいくつかの指標を追加することで、結果を大幅に向上させることさえ可能でしょう。

小さな複雑さが結果を悪化させ、EAがそれ自体で最もよく学習するという点については、私も完全に同意します。損失額を制限するためにストップロスとテイクプロフィットを適用してみましたが、ストップロスをきつくすると結果は悪化しました。

しかし、唯一欠けているのは反復学習です。つまり、アルゴリズムが学習するのは最適化の間だけで、その後は完全に訓練されたデータに依存しているのです、

そこで、損失が発生するたびに最適化を自動化するソリューションを探しています。つまり、損失が発生するたびに、また報酬が更新されるたびに、EAはオプティマイザーを呼び出して、先月のデータについて再度トレーニングする必要があります。あるいは、損失が発生した後にしばらく一時停止し、最適化が完了した後にEAが再び取引を再開することもできます。こうすることで、学習されたツリー(Mtreesテキストファイル)には常に現在のマーケットに基づいた最新のポリシーが含まれるようになります。

自動最適化に関する記事はいくつかあると思いますが、私はEAのプログラマーではないので、今のところあなたのEAに統合する方法は見つかっていません。

あなたの現在の実装はすでに準備されたデータから方針を使用しているため、他のEAとは異なり、自動最適化後に値を保存する必要はありません。オプティマイザーを実行し、開始日と終了日を指定して開始ボタンをクリックするだけで、最適化を自動化することができます。

 
FxTrader562:

記事をありがとう。これから調べてみるよ。

コーディングのしやすさ、学習のスピード、結果の正確さにおいて、現在の実装が機械学習において私がこれまで見た中で最高であることは間違いありませんし、さらにいくつかのインディケータを追加することで、結果を大幅に向上させることも可能でしょう。

小さな複雑さが結果を悪化させ、EAがそれ自体で最もよく学習するという点については、私も完全に同意します。損失額を制限するためにストップロスとテイクプロフィットを適用してみましたが、ストップロスをきつくすると結果は悪化しました。

しかし、唯一欠けているのは反復学習です。つまり、アルゴリズムが学習するのは最適化の間だけで、その後は完全に訓練されたデータに依存しているのです、

そこで、損失が発生するたびに最適化を自動化するソリューションを探しています。つまり、損失が発生するたびに、また報酬が更新されるたびに、EAはオプティマイザーを呼び出して、先月のデータについて再度トレーニングする必要があります。あるいは、損失が発生した後にしばらく一時停止し、最適化が完了した後にEAが再び取引を再開することもできます。こうすることで、学習されたツリー(Mtreesテキストファイル)には常に現在のマーケットに基づいた最新のポリシーが含まれるようになります。

自動最適化に関する記事はいくつかあると思いますが、私はEAのプログラマーではないので、今のところあなたのEAに統合する方法は見つかっていません。

あなたの現在の実装はすでに準備されたデータから方針を使用しているため、他のEAとは異なり、自動最適化後に値を保存する必要はありません。オプティマイザーを実行し、開始日と終了日を指定して開始ボタンをクリックするだけで、最適化は自動化されます。

仮想バックテスターが必要なのですね。書くのは全然難しくないので、次の記事で追加するかもしれない。

 
Maxim Dmitrievsky :

ご指摘の通り、これにはバーチャルテスターが必要です。書くのは難しくないので、おそらく次の記事に追加すると思う。

ありがとうございます。ありがとうございます。

そうですね、特にあなたのEAでは、開始日から今日の日付までオプティマイザーを使用する以外には何もすることがなく、EAの入力設定で最適化期間を指定できるので、難しい作業ではないと思います。しかし、どうすればいいのかよくわからないので、アップデートを待ちたいと思います。

ところで、Randomised Decision Forest (RDF)に惹かれた最も変わった点は、私の観察が間違っているかもしれませんが、RDFの実装の基本モデルがGOゲームに非常に似ていることに気づいたことです。つまり、アルゴ「アルファゴ」機械学習が囲碁のような複雑なゲームに勝てるなら、RDFは間違いなくFX 市場に勝てるということだ。つまり、十分な入力変数(指標)を供給し、継続的に供給して、取引中に最適な方針を開発し維持することができれば、RDFを使用して99%-正確な取引を得ることは非常に簡単だと私は強く信じています。

本当にありがとうございました。

 

こんにちは、

いくつかの実験結果(ファジーロジックを使わない純粋なツリーで得られたもので、新しい記事に添付しようと思いましたが、報酬関数の議論が続いているので、理解と議論のための情報として投稿します)を投稿します。

1.SELLでランダムな値が全区間0...1に設定されるのはおかしいと思った。

if(RDFpolisyMatrix[numberOfsamples-1][iNeuronEntra]==1.0)//販売
   likelyhood = MathRandomUniform(0.0,0.6,unierr);
else
   likelyhood = MathRandomUniform(0.4,1.0,unierr);

範囲を反対の不確かな値に限定することで、学習のスピードは何倍にもなる。2-3回の実行で(ランダムなデータでのパスと思います)、4-6年前のようなトレーニングの質が得られます(多くの追加要因があるため、ばらつきは大きいですが、効率は数十パーセントも上がっていません)。

2.2.初期実装では、ランダムに得られた 値が強化因子であることに違和感を覚えた。このため、強いトレンドの方が報酬が低いという状況が生まれやすい。

これを回避するための最初の試み

if(RDFpolisyMatrix[numberOfsamples-1][iNeuronEntra]==1.0)//販売
      nagrada=MathMin(1.0,0.61+NormalizeDouble(profit/WS.PriceStep()/250,2));

アイデア:100ピップス以上で利食い-1、それ以下なら-均等に増加(この場合は0.61から)。売りはPriper pdl、買いは他のレベルと同様。理論的には、より強いトレンドの場合 - より高い報酬。結果は改善されましたが、統計誤差よりもわずかに。同時に、同じ条件のためのツリーとファイルのサイズが大幅に減少している。どうやら、このような特異な結果の並べ替えによって、ルールをよりシンプルに記述できるようになったようだ。

ツリーのアンサンブルをテストするために、私は1つのツリーの推定をロードすることにした。

updatePolicy(0); //購入する
updatePolicy(1); //売り

そして、習慣的にトレーニングを実行した。驚いたことに、報酬関数を粗くして同様のトレーニングを行ったところ、大幅な改善が見られたのです。トレーニングしたサイトでは、他のすべての条件が同じであれば、4ヶ月間の利益が旧バリアントの6ヶ月間の利益を上回りました(具体的な数値は、トレーニング条件、ペア、コーダーのハンドルの湾曲によって大きく異なるため、私は比較で操作しています)。評価関数をロードすることで、予測が改善されたのだ!おそらくプロ統計学者にとっては、ここに目新しいことは何もなく、そうであるべきだと数式で証明できるのだろうが、私にとっては衝撃的である。そして、予測関数のさらなる選択と評価の問題が生じる。

私がテストに費やした時間が、少なくとも誰かの検索時間の短縮に役立てばと願っている(あるいは、新たな失敗をする機会を与え、それが私たちと共有されることを)。

 

そして、記事の著者によって親切に提供されたこのコードを、3-5小節の最も単純なパターンに教えることは、どれほど現実的なのだろうか?

SZY:うーん、お酒の席でも、Aliexpressで中国のセラーに書くような感じで書いています。)