void calcSignal()
{
sig1=0;
for(int i=0;i<ArraySize(ag1.agent);i++) - the agents are stored in "ag1.agent" array. We have 5 agents, so array size is 5
{
CopyClose(_Symbol,0,0,100,ag1.agent[i].inpVector); - for each agent from array (now we have 5 agents) fill predictors (100 close prices). For each feature we fill a single value
normalizeArrays(ag1.agent[i].inpVector);
}
sig1=ag1.getTradeSignal(); this function return averaged signal for all agents
}
2018.09.1601:33:27.3192018.09.1323:59:59 Agent 5 Model 40 passed with errors: 0.24221789883268480.50972762645914392018.09.1601:33:27.3192018.09.1323:59:59 Agent 5 Model 41 passed with errors: 0.22957198443579770.48249027237354092018.09.1601:33:27.3192018.09.1323:59:59 Agent 5 Model 42 passed with errors: 0.25583657587548640.49610894941634242018.09.1601:33:27.3192018.09.1323:59:59 Agent 5 Model 43 passed with errors: 0.24221789883268480.48638132295719842018.09.1601:33:27.3192018.09.1323:59:59 Agent 5 Model 44 passed with errors: 0.24221789883268480.47665369649805452018.09.1601:33:27.3192018.09.1323:59:59 Agent 5 Model 45 passed with errors: 0.2451361867704280.53793774319066152018.09.1601:33:27.3192018.09.1323:59:59 Agent 5 Model 46 passed with errors: 0.25875486381322960.49124513618677042018.09.1601:33:27.3192018.09.1323:59:59 Agent 5 Model 47 passed with errors: 0.24805447470817120.47762645914396892018.09.1601:33:27.3192018.09.1323:59:59 Agent 5 Model 48 passed with errors: 0.26361867704280160.50097276264591442018.09.1601:33:27.3192018.09.1323:59:59 Agent 5 Model 49 passed with errors: 0.26167315175097280.490272373540856
CRLAgents *ag1=new CRLAgents("RlExp1iter",5,100,50,regularize,learn);
//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit()
{
ag1.setAgentSettings(0,100,50,0.1); for each agent you can set number of features, number of trees and r setting, individually
ag1.setAgentSettings(1,50,50,0.2);
ag1.setAgentSettings(2,30,50,0.05);
ag1.setAgentSettings(3,20,50,0.1);
ag1.setAgentSettings(4,10,50,0.05);
//---return(INIT_SUCCEEDED);
}
まだ誤差の大きいモデルが多いため^)、長く使えるモデルが必要です。
例えば、2ヶ月の学習と1週間の取引その通りかもしれませんが、「ALPHA ZERO」アルゴのようなランダムキャンドルシミュレーションが無制限にできるようになるまで、RDFで1日でも機能するようなモデルが発見されるとは思えません。
なぜなら、市場はほぼ1時間ごとに変化しており、突然のニュースイベントや何らかの理由で市場の動きが変わると、1つのモデルは恐ろしく失敗してしまうからです。しかし、何百万回ものローソク足シミュレーションを行っていれば、おそらく相場が変わったときに最小限の損失で回復でき、その後の損失もすぐに取り戻せるシステムになっているのではないでしょうか。それは可能だと思われます。
あなたのモデル選択方法と私のキャンドルシミュレーション方法の両方を試してみて、すべてがどうなるか見てみたいと思います:))
ちなみに、1日トレーニング、5日トレーニングなどを試しましたが、翌日には失敗してしまいました:)))))))))))))))))))))))))))))))))))))))))))))))))))))))
だから、1つのモデルでうまくいかないこともある...私の勘違いかもしれないけれど...。
あと、もうひとつだけマキシムの要望を...。
記事を公開するときは、なるべくコードをコメント するようにして、他の人がすぐに理解できるようにすると、より早く進歩できるのでは...と思います。
そうでなければ、私がコードを理解するのに長い時間がかかるとしたら、それを修正するのにさらに時間がかかるでしょう。
そこで、できるだけ多くのコメントやコードの解説を付けていただくようお願いします。とりあえず早く理解して、わからないことがあれば質問させていただきます:))
あと、もうひとつだけマキシムの要望を...。
記事を公開するときは、なるべくコードをコメントするようにして、他の人がすぐに理解できるようにすると、より早く進歩できるのでは...と思います。
そうでなければ、私がコードを理解するのに長い時間がかかるとしたら、それを修正するのにさらに時間がかかるでしょう。
そこで、できるだけ多くのコメントやコードの解説を付けていただくようお願いします。とりあえず早く理解して、わからないことがあれば質問させていただきます:))
OK、今、私はちょうど絶えず多くのものを変更し、それをコメントする意味がない。
また、出力を変更する方法を考えることもできます。リワード機能の 代わりに、ジグザグを別の設定で使うとか。OK、今、私はちょうど絶えず多くのものを変更し、それをコメントする意味がない。
また、出力を変更する方法を考えることもできます。リワード機能の 代わりに、ジグザグを別の設定で使うとか。コードをざっと見ただけですが。しかし、今まで、どこに指標があるのか、どのようにトレードのエントリーを決定しているのか、正確に把握できていません。そのため、出力をどうしたらいいのか分からない。GDMHを使った出力ということですか?
ただ、いろいろな設定でテストを実行していますが、完全にランダムなトレードを配置するようです。
また、テスト段階では「Mtrees」テキストファイルは作成されませんよね?
つまり、あなたが提供したコードは完全なものではないのですね?それとも、最適化せずにチャートに直接貼り付ければ、トレードを行うことができるのでしょうか?
コードをざっと見ただけですが。しかし、今までのところ、どこに指標があるのか、どのようにトレードのエントリーを決定しているのか、正確にはわかっていないのです。そのため、出力をどうしたらいいのか分からない。
ただ、いろいろな設定でテストを実行したのですが、おかしな挙動を示したため、サーバーを再起動したところ、完全にランダムトレードを行うようです。VPSの実カーネルと何か関係があるのでしょうか?
また、テスト段階では「Mtrees」というテキストファイルは作成されませんよね?
テスターで最初に実行するときは、"true "を選択します。
彼はランダムな取引を行い、その時に学習し、モデルを保存します。
2本目はfalseを選択。それだけです。そして、彼はモデルをアップロードし、+で交換します。
次にEAでエージェントを追加し、5つのエージェント、各エージェントに100の機能、50のツリーを追加します。
この関数では、各エージェントの終値を100個(100個の予測値)追加します。そして、データを正規化する。例えば、最初の50の特徴 - 終値、次の25のrsi、次の25のadxなど、異なる指標を追加したり、エージェントを宣言するときに予測変数の数を変更したりすることができます。
各取引の後、彼はポリシーを更新し、取引が終了したとき - 報酬(TD、時間差RL)を更新します。
本当に簡単なライブラリの使い方
トレインモードでは、各反復のエラーとログを表示します。
テスターのトレードモードでは、各エージェントのトレーニングおよびテストサブセットでの最終的な誤差を表示します。
終値100の場合の結果です。
テスターで最初に実行するときは、"true "を選択します。
彼はランダムな取引を行い、その時に学習し、モデルを保存します。
2本目は偽を選択。それだけです。そして、彼はモデルをアップロードし、+を下取りに出す。
次にEAでエージェントを追加し、5つのエージェント、各エージェントに100の機能、50のツリーを追加します。
この関数では、各エージェントの終値を100個(100個の予測値)追加します。そして、データを正規化する。例えば、最初の50の特徴 - 終値、次の25のrsi、次の25のadxなど、異なる指標を追加したり、エージェントを宣言するときに予測変数の数を変更したりすることができます。
各取引の後、彼はポリシーを更新し、取引が終了したとき - 報酬(TD、時間差RL)を更新します。
シンプルなライブラリの使い方
そうですね、これはとてもシンプルであると同時に堅牢に見えますね...実験して見ましょう...素晴らしい仕事です!!!!
では、GDMHはどこに使われているのでしょうか?
私のGDMHのコードを書こうと思っていたのです。RDFの入力と出力が行われているコードや、GDMHを実装しようとしている箇所を教えていただければ、私のコードを書いてみて、あなたのコードと私のコードの結果を比較して、評価することができます。
そうですね、これはとてもシンプルであると同時に堅牢なようです。実験して見ましょう。
では、GDMHはどこに使われているのでしょうか?
私のGDMHのコードを書こうと思っていたのです。RDFの入力と出力が行われているコードや、GDMHを実装しようとしている箇所を教えていただければ、私のコードを書いてみて、あなたのコードと私のコードの結果を比較して、評価することができます。
ここでは、単純なカーネル CRLAgent::kernelizedMatrix(void) (in library) を使用しているので、この関数を gdmh 用に変更する必要があります。
ここでは、単純なカーネル CRLAgent::kernelizedMatrix(void) (in library) を使用しているので、この関数を gdmh 用に変更する必要があります。
よし、自分でコードを書いてみようか...。
GDMHのロジックだけであれば、GDMHアルゴをMQL5のコードに翻訳・変換するのは簡単ですが、他のカーネル関数やライブラリが関係する場合は、勉強して変換する時間が必要です......。
もう一つの特徴:各エージェントを委員会で設定することができる
予測値の記入は、ここを変更するだけです。
また、異なるグループのエージェントを追加することができます
よし、自分でコードを書いてみようか...。
GDMHのロジックだけであれば、GDMHアルゴをMQL5のコードに翻訳・変換するのは簡単ですが、他のカーネル関数やライブラリが関係してくると、勉強と変換に時間がかかりますね......。
gmdhのロジックを変換していただければ、私のライブラリ用に変更することができますので、大変助かります。