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

 
FxTrader562:

とても有益な記事をシェアしていただき、ありがとうございます。

コードにインジケータを追加しようとしましたが、私は専門家プログラマーではなく、メンバシップ関数の使用方法についてもあまり経験がないため、OnInit()関数内でルールと一緒に使用するインジケータを追加する方法がわかりませんでした。このコードにはRSIインジケーターしか含まれておらず、そこから買いと売りのルールを作成しています。移動平均やMACD、ストキャスティクスやSARのようなインジケーターをコードで使用するために、もう少しサンプルコードを提供していただけませんか?

特に、現在の価格と比較しながらルールを作成し、エントリー条件に追加する方法を知りたいです。現在のコードの主な問題点は、利益が出ているトレードを素早く決済する一方で、負けのトレードを長い間保持することがあることです。私は、エグジットロジックについてより多くのフィルタリングを行う必要があると思います。

また、1つ質問があります:

OPTファイルは、ポリシー自体を微調整することによって、長い時間をかけてエントリーやエグジットを改善するために継続的に更新されるのでしょうか?

それとも、EAはストラテジーテスターを使って EAの値を最適化し、通常の最適化されたEAのように、最近利益が出たのと同じエントリー値とエグジット値を使用するのでしょうか?

つまり、他のニューラルネットワークEAと同じように、取引中にエントリーやエグジットの全体的な方針を微調整するのでしょうか?

こんにちは。次回の記事をお待ちください。そこでは、他のインジケーターや様々なエージェントの働きを検証します。そして、ファジーロジックなしで

 
Maxim Dmitrievsky:

こんにちは。次回の記事をお待ちください。そこでは、様々なエージェントと同様に、他のインジケータの働きも検証してみたいと思います。ファジーロジックなしで。

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

もし差し支えなければ、インジケータの実装コードを掲載した次の記事をいつ公開する予定なのか教えていただけますか?

 
FxTrader562:

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

もし差し支えなければ、インジケータの実装コードを掲載した次の記事をいつ発表する予定なのか、教えていただけますか?

ロシア語では1-2週間、それから翻訳すると思います。

 

でも、たとえロシア語の記事であっても、ダウンロードして通常のMT5で使用することは可能ですよね?

ところで、リワード機能の ロジックを改善するための提案がいくつかあります。しかし、もし私の提案が役に立つと思われるなら、次のリリースで実装することを検討してください。

報酬関数が、2つの要素からの報酬の合計に基づいてエージェントに報酬を与えるようにしたい:

1.純利益( Orderprofit()+OrderCommission()+OrderSwap()):報酬(RW1)は報酬係数(RF1)によって決定され、その値は1より大きく、取引利益が大きいほど報酬が大きくなり、損失が大きいほど負の報酬が大きくなります。

RW1=NP*MathPow(RF1,2);例えば、RF1の値は1.1または1.2以上にすることができます。

つまり、特定の注文の終値のRW1は、純利益(プラスまたはマイナスの利益)と報酬係数(RF1)の二乗の乗算でなければなりません。

2.連続した利益または損失の数(NCount):別の報酬(RW2)は、報酬係数(RF2)と連続損失または利益数(NCount)による連続利益または損失に基づいて与えられるべきである。

もしOrderCommissionとOrderSwapを考慮した純損益であれば、より多くのマイナス報酬が与えられ、もし注文が利益で決済されれば、より多くのプラス報酬が与えられます。

RW2=MathPow(NCount,RF2);RF2の値は1.1または1.2以上にすることができます。

例えば、現在の注文がプラスで、前の注文がマイナスであれば、NCount=1-1=0となり、RW2はゼロとなります。あるいは、現在のクローズド・オーダーがプラスで、前のオーダーがプラスであれば、NCount=1+1=2となり、RF2=1.2として、RW2=(2)^(1.2)となる。

これで、特定の注文の決済に対するネット報酬(RW)は、RW=RW1+RW2となる。

もしEAの次のバージョンでこのコードを実装していただけるなら、それは素晴らしいことです。

RF1とRF2をEAの最適化のためのグローバル変数として宣言して、EAのフォワードテスト中にRF1とRF2の最適な組み合わせを見つけることができれば、最高だと思います。

 

こんにちは、マキシム・ドミトリエフスキー

この記事は、mql5に機械学習を導入する際にとても役に立ちました。

私の質問は、利益を最大化するために、どのようにエージェントを訓練するのかということです。

updateReward()とupdatePolicy()のコードを勉強したのですが、各取引の利益を無視し、口座残高が増加しているかどうかも無視して、利益の出る取引の数だけを最適化しているように思えます。

そこで、利益額を報酬関数に統合する方法とその方法を教えていただけないでしょうか?

上記で提案した私自身のコードを実装してみましたが、おそらく動作しないか(コーディングミスはありませんでしたが)、実装方法がわかりません。あるいは、updateReward()関数とupdatePolicy()関数が具体的に何をするのか完全に理解していなかったのかもしれません。RDFPolicyMatrixが何をどのように保存し、その値が次の取引エントリーの際にどのように使用されるのか、この2つの関数内のコードについてもう少し詳しく説明していただけると、貴重なご貢献に本当に感謝いたします。

よろしくお願いします。

 

最適化直後はEAの最高の結果を見ることができますが、エージェントが自分自身を訓練するにつれて、結果は日に日に悪くなっていきます。そこで、損失が発生するたびにコードからオプティマイザーを起動できないかと考えています。つまり、損失が発生するたびに報酬を更新するのではなく、EAは今日までの過去数日間のデータを最適化する必要があります。

もし作者か他の誰かがこの実装方法を知っているなら、親切に教えてください。

 
Maxim Dmitrievsky:
木というより、同じデータで複数のフォレストをトレーニングすることです。なぜなら、構築プロセスはランダムであり、結果は異なる可能性があるからです。フォレストのアンサンブルで顕著な改善が得られることに驚きました。つまり、同じデータで複数のフォレストを訓練し、結果を平均化します。(5-15個) 異なる設定も可能です。さらに良い結果が得られるのはブスティングの場合ですが、私はまだそこに到達していません。

この記事は参考になるし、(少なくとも私にとっては)何か得るものがある。

私が理解しているように、ファジーロジックは記事の例として取り上げられました。tsの値を直接取得することは禁止されていません(私はそれを実装しましたが、効率に特別な違いは感じませんでした。)これは、オブジェクトに報酬を与える別の方法と考えることができます。プログラムでは確認できませんが)最適化されたメンバーシップ関数の 数を増やしても利益は得られません。私はフォレスト(記事のようにファジィを含む)の結果を平均してみました、結果は改善されました、AlgLIBからのニューラルネットワークの後、私は数年間の値で学習の速度に驚きました。明らかな違いを設定するために、私は指標の異なる数の使用を明示的に示す森林の作成の第二の形式を使用しました(まあ、指標の構成で遊ぶことは議論されていません):

CDForest::DFBuildRandomDecisionForestX1(RDFpolisyMatrix,numberOfsamples,iNeuronEntra,iNeuronSal,number_of_trees,7,regularization,RDFinfo,RDF[0],RDF_report);
CDForest::DFBuildRandomDecisionForestX1(RDFpolisyMatrix,numberOfsamples,iNeuronEntra,iNeuronSal,number_of_trees,5,regularization,RDFinfo,RDF[0],RDF_report);

他にどのような報酬の形を試すことができるか教えてください。ところで、このアンサンブルは平均化と呼ばれるのでしょうか? それとも、結果を組み合わせるための特別な公式でしょうか? AlgLIBにはフォレストのアンサンブルはないと思うのですが?

いくつかのフォレストがある場合、データをファイルのヒープに保存するのは不便なので、この方法で行うことにしました:

StructToHiden strHider;
   strHider.iNeuronEntra=iNeuronEntra;
   strHider.iNeuronSal=iNeuronSal;
   strHider.iTrees=number_of_trees;
   DataTekOpt=TimeLocal();
   strHider.DataTekOpt=DataTekOpt;
   
   int filehnd=FileOpen(NameFile+"_fuzzy.txt",FILE_WRITE|FILE_BIN|FILE_COMMON);
      strHider.iBufsize=RDFfuzzy.m_bufsize;
      FileWriteStruct(filehnd, strHider);//記録ファイルのヘッダー
      FileWriteArray(filehnd,RDFfuzzy.m_trees); //ツリーレコード
      FileClose(filehnd);


int filehnd=FileOpen(NameFile+"_fuzzy.txt",FILE_READ|FILE_BIN|FILE_COMMON);
      FileReadStruct(filehnd,strHider);//ファイルのヘッダーを読む
      RDFfuzzy.m_nvars=strHider.iNeuronEntra;
      RDFfuzzy.m_nclasses=strHider.iNeuronSal;
      RDFfuzzy.m_ntrees=strHider.iTrees;
      RDFfuzzy.m_bufsize=strHider.iBufsize;
      DataTekOpt=strHider.DataTekOpt;
      FileReadArray(filehnd,RDFfuzzy.m_trees);//ツリーを読む
      FileClose(filehnd);
構造は任意の構造で記述され、その長さは固定であるため、ファイルとフォレストの両方に格納することが判明した(構造は必然的に先頭にある)。つのフォレスト、1つのファイル。

この記事のおかげで、AlgLIBを真剣に勉強し始めました。
 
mov:

有益で、(少なくとも私にとっては)取り入れるべきことがたくさんある。

私の理解では、ファジーロジックは記事の例として取り上げられました。tsの値を直接取得することは禁止されていません(私はそれを実装しました、私は効率に特別な違いを感じませんでした - 森は完全にファジーロジックの代わりになります)。これはオブジェクトに報酬を与える別の方法と考えることができます。プログラムでは確認できませんが)私には、最適化されたメンバーシップ関数の 数を増やしても利益は得られないように思えます。私はフォレスト(記事のようにファジィを含む)の結果を平均してみました、結果は改善されました、AlgLIBからのニューラルネットワークの後、私は数年間の値で学習の速度に驚きました。明らかな違いを設定するために、私は指標の異なる数の使用を明示的に示す森林の作成の第二の形式を使用しました(まあ、指標の構成で遊ぶことは議論されていません):

他にどのような報酬の形を試すことができるか教えてください。ところで、このアンサンブルは平均化と呼ばれるのでしょうか? それとも、結果を組み合わせるための特別な公式でしょうか? AlgLIBにはフォレストのアンサンブルはないと思うのですが?

誰かの役に立つかもしれない。いくつかの足場があるとき、データをファイルのヒープに保存するのは不便なので、このようにすることにした:

構造は任意の構造によって記述され、その長さは一定であるため、ファイルとフォレストの両方に格納することが判明した(構造は必然的に先頭にある)。つのフォレスト、1つのファイル。

この記事のおかげで、AlgLIBを真剣に勉強し始めました。

そう、ファジーロジックを例にして。いろいろ実験した結果、この形で使うのはあまり意味がないことがわかったので、私自身はもうあきらめました。

現在のシャープレシオや取引のR^2という形で報酬を得ようとすることもできる。あるいは、取引の結果ではなく、例えば市場の状況を評価することもできます。そんな感じだ。

アンサンブルというのは、単純な結果の平均という意味です。しかし、それぞれのフォレストに対して、独自の予測因子やターゲットを設定することができます。

エージェントのアンサンブルと、さらにいくつかのプラスアルファについて、クラスの形で追加記事を書こうと思っています。近いうちに完成すると思います。

この記事で触れていないもう1つの重要な点 - 訓練サンプルとテストサンプルの森林分類誤差の推定(ob), この点についても説明します。

コードサンプルに感謝します。

 
Maxim Dmitrievsky:+ クラスという形で、さらにいくつかの特典もある。近日中に完成させる予定です。

可能であれば、ストラテジーテスターを 使わずに、例えばエキスパートアドバイザー(トレードエミュレーション)を起動したときの履歴によるトレーニング機能を例として考えてください。自分でもやってみましたが、手が曲がっているのがわかります、動作はしますが、ストラテジーテスターでのトレーニングに比べると、トレーニングの効率ではかなり劣ります。

 
mov:

可能であれば、ストラテジーテスターを 使わずに、例えばエキスパートアドバイザー(トレードエミュレーション)を起動する際に、ヒストリーでトレーニングする機能を例として考えてください。自分でもやってみましたが、手が曲がっているのがわかります、動作はしますが、ストラテジーテスターでのトレーニングに比べると、トレーニングの効率ではかなり劣ります。

そう、バーチャル・テスターも計画中である。しかし、今のところ、他の面を改良する必要がある。例えば、予測変数の自動選択と削減が最も重要であり、そうすることで、モデルが履歴に対してそれほど再学習されなくなる。