記事"強化学習におけるモンテカルロ法の応用"についてのディスカッション - ページ 5

 

ありがとうございます。

クローズ、オープン、ハイ、ロー、プライス・ティピカル、ティック・ボリューム、およびこれらの派生物を試してみました。

オプティマイザーが「パスが完了した後に何らかのエラーが発生した」と文句を言う問題がありましたが、最終的にこれを突き止めることができました。

例えば、Close[1]-Close[2]のような導関数を計算する場合、Closeの値が同じだと導関数がゼロになることがあります。このような入力ベクトル値に対しては、すべてのベクトル値に定数(たとえば1000)を追加するのが最も簡単な修正方法であることがわかりました。 これにより、オプティマイザーのエラーは解消され、RDFも機能するようになりました。

また、同じテストを何度も実行すると、意図しない結果になってしまうことにも気づきました。 記録したRDFファイルを削除して、もう一度最適化を実行したほうがいい場合もあります。

私はまだ実験中で、他のタイプの機能についてもアイデアがあります。


 
Mark Flint:

ありがとう、マキシム。

コードをいじって、特徴入力ベクトルにさまざまなタイプのデータを導入しました。 クローズ、オープン、ハイ、ロー、プライス・ティピカル、ティック・ボリューム、およびこれらの派生物を試してみました。

オプティマイザーが「パスが完了した後に何らかのエラーが発生した」と文句を言う問題がありましたが、最終的にこれを突き止めることができました:オプティマイザーのエラーは、入力ベクトルのデータにゼロ値がある場合に発生します。

例えば、Close[1]-Close[2]のような導関数を計算する場合、Closeの値が同じだと導関数がゼロになることがあります。このような入力ベクトル値に対しては、すべてのベクトル値に定数(例えば1000)を追加するのが最も簡単な修正方法であることがわかりました。 これにより、オプティマイザーのエラーは解消され、RDFも機能するようになりました。

また、同じテストを何度も実行すると、意図しない結果になってしまうことにも気づきました。 記録したRDFファイルを削除して、もう一度最適化を実行したほうがいい場合もあります。

私はまだ実験中で、他のタイプの機能についてもアイデアがあります。


こんにちは、マーク。特徴選択アルゴリズムによりますが(この記事の場合は、「再帰的消去関数」の1特徴/別の特徴(価格リターンを使用)です)、cl[1]-cl[2]を使用している場合、dividerに「0」があると、この「何らかのエラー」が発生する可能性があります。

そう、オプティマイザはランダム・サンプリング(RDFランダム・アルゴリズム)を使用しているため、実行されるオプティマイザによって異なることがあるのです。これを修正するには、エキスパートのOnInint()関数でMathSrand(number_of_passes)を使うか、他の固定数を使うことができます。

削除済み  
Maxim Dmitrievsky:

はい、すべてのロジック(RFを含む)をopen clカーネルで書き直した場合 :) また、ランダムフォレストは最悪のGPU実行可能性と並列性を持っています。

Maximさん、あなたのコードを見ていて気づいたのですが、最適化中に最適なモデル、特徴量、パラメータ 値のファイルが保存されるにもかかわらず("OFFLINE")、更新エージェントポリシーと更新エージェント報酬も "OFFLINE "になっています。オフラインモードではMQLInfoInteger(MQL_OPTIMIZATION) == trueであり、あなたのEAでデモまたはライブ口座で実行されているときはMQLInfoInteger(MQL_OPTIMIZATION) == falseなので、EAがライブで実行されている間、報酬とポリシーはどのように更新されているのでしょうか?何か見逃しているのでしょうか?


//+------------------------------------------------------------------+
//|エージェント・ポリシーの更新|
//+------------------------------------------------------------------+
CRLAgent::updatePolicy(double action,double &featuresValues[]) {
   if(MQLInfoInteger(MQL_OPTIMIZATION)) {
      numberOfsamples++;
      RDFpolicyMatrix.Resize(numberOfsamples,features+2);
      // 入力変数
      for(int i=0;i<features;i++)
         RDFpolicyMatrix[numberOfsamples-1].Set(i,featuresValues[i]);
      //出力変数
      RDFpolicyMatrix[numberOfsamples-1].Set(features,action);
      RDFpolicyMatrix[numberOfsamples-1].Set(features+1,1-action);
     }
  }
//+------------------------------------------------------------------+
|エージェント報酬の更新|
//+------------------------------------------------------------------+
CRLAgent::updateReward(void) {
   if(MQLInfoInteger(MQL_OPTIMIZATION)) {
      if(getLastProfit()>0) return;
      double randomReward = (getLastOrderType()==0) ? 1 : 0;
      RDFpolicyMatrix[numberOfsamples-1].Set(features,randomReward);
      RDFpolicyMatrix[numberOfsamples-1].Set(features+1,1-randomReward);
     }
  }
 
developeralgo:

Maximさん、あなたのコードを見ていて気づいたのですが、最適化中に最適なモデル、フィーチャー、パラメータ値を含むファイルが保存されているにもかかわらず("オフライン")、更新エージェントポリシーと更新エージェント報酬も "オフライン "になっています。オフラインモードではMQLInfoInteger(MQL_OPTIMIZATION) == trueであり、あなたのEAでデモまたはライブ口座で実行されているときはMQLInfoInteger(MQL_OPTIMIZATION) == falseなので、EAがライブで実行されている間、報酬とポリシーはどのように更新されているのでしょうか?何か見逃しているのでしょうか?


ポリシーと報酬は実際の取引では更新されません。オプティマイザでランダムフォレストを 学習するためにのみ必要です。

 

" #include <MT4Orders.mqh> " というファイルがありません。

これはMT4エキスパートなのでしょうか、それともMT5エキスパートなのでしょうか?

 
ffoorr:

このファイルがありません、" #include <MT4Orders.mqh> " そして、フォンクションはMT4のフォンクションのように見えます。

これはMT4エキスパートなのでしょうか、それともMT5エキスパートなのでしょうか?

このライブラリを使用すると、MT4の注文スタイルをMT5で使用できます。

https://www.mql5.com/ru/code/16006

MT4Orders
MT4Orders
  • www.mql5.com
Данная библиотека позволяет работать с ордерами в MQL5 (MT5-hedge) точно так же, как в MQL4. Т.е. ордерная языковая система (ОЯС) становится идентичной MQL4. При этом сохраняется возможность параллельно использовать MQL5-ордерную систему. В частности, стандартная MQL5-библиотека будет продолжать полноценно работать. Выбор между ордерными...
 
Maxim Dmitrievsky:

OK ありがとう

 

誤りまたは非推奨:
CRLAgent::getRDFstructure(void) { .......

正しい:
void CRLAgent::getRDFstructure(void) { .......

コンパイラの別バージョン

 
Otto Pauser:

正しくないか非推奨:
CRLAgent::getRDFstructure(void) { ... ....

right:
void CRLAgent::getRDFstructure(void) { .......

コンパイラーの別バージョン

はい、最新のビルドではチェックが厳しくなりました。

 

こんにちは、マキシム。あなたの仕事ぶりには感謝しています。あなたのコードをテストしようとしたのですが、mq4ファイルに以下のようなエラーが表示されました。

'getRDFstructure' -関数は すでに定義されており、型が異なります RL_Monte_Carlo.mqh 76 11

'RecursiveElimination' - 関数はすでに定義されており、型が異なる RL_Monte_Carlo.mqh 133 11

'updatePolicy' - 関数は既に定義されており、型が異なる RL_Monte_Carlo.mqh 221 11

'updateReward' - 関数は既に定義されており、型が異なる RL_Monte_Carlo.mqh 236 11

'setAgentSettings' - 既に定義されている関数で、型が異なる RL_Monte_Carlo.mqh 361 12

'updatePolicies' - 既に定義されている関数で、型が異なる RL_Monte_Carlo.mqh 373 12

'updateRewards' - 関数はすでに定義されており、型が異なります RL_Monte_Carlo.mqh 380 12

この問題を解決する方法をご存知ですか?