記事"Expert Advisors最適化のカスタム基準作成"についてのディスカッション - ページ 3

 

多くの実験を経て、私も同じような結論に達した。この記事や議論を見つけるのに、なぜこんなに時間がかかったのかわからない。

私は、ブレイクアウトとトレンドに乗る戦略が、数少ない超高収益のトレードにのみ適合しがちだという問題から始めた。そのため、オプティマイザーはその数少ない取引を「気にかける」だけで、ストップ幅を広くし、利食い幅を 遠くし、シグナルがその数少ない取引を捕らえ、最大限に搾り取るようにしていました。利益に対するddの比率を最適化しても、利益の90%はこれらの取引によるものであった。私は、ブレイクアウト/トレンド・ライド・ストラトの頭を切り落とすことなく、何らかの方法でこの動作を制限したかったのです。相対的なddパーセント(利益に対するdd比率ではなく、相対的なddパーセントだけで、他には何もしない)を最適化すると、最小取引と最小利益係数(約1.3)が満たされている限り、今後良い結果が得られることがわかった。


//............... 

sinput double mint; //最適化のための最小取引。取引回数が少ない場合にはペナルティを課す。 

sinput double minpf; //最適化のための最小利益係数。PFが小さいランにはペナルティを課す。

//...............

double OnTester()

{ 

	 double dd=TesterStatistics(STAT_BALANCE_DDREL_PERCENT);//バランスの代わりにエクイティもうまく機能した。

	 double pf=TesterStatistics(STAT_PROFIT_FACTOR);

	 int    tt=TesterStatistics(STAT_TRADES); 

	 double custom=(100-dd);

	 if (mint>t) custom=custom*(tt/mint); // 最低取引額を満たさない場合、ペナルティを課す。

	 if (minpf>minpf) custom=custom*((pf-1)/(minpf-1)) // また、このラインは、ペナルティが少ないpfを課すだけでなく、失点がマイナスになる。

	 return(custom); 

}

 

 

利益を伴わないのは間違っているように思えるが、pfの最低基準を持つことで、ほとんどの場合、かなり収益性の高い取引が上位に表示される。利益が出ているランからddを取り除くことは、通常、利益を増やすことになる。いずれにせよ、より収益性の高い取引を選択し、最終的な手直しを手作業で注意深く行うことで、(この優れた記事の最後の方(https://www.mql5.com/ja/articles/156)にあるような 多くのカーブフィッティングを避けながら、オプティマイザーに初期作業の多くをさせることができます。私は以下のようなコードで実験し、さまざまな結果を得た。(パーセンテージ・ベースのスコアの上に追加のウェイトを置き始めたら、リスクと開始バランスの変更も実験に含めるべきです)

//.............

sinput double pfw //利益率の重み 

//.............

        double custom=(100-dd)+(pf-1)*pfw;
//...........
Guide to Testing and Optimizing of Expert Advisors in MQL5
Guide to Testing and Optimizing of Expert Advisors in MQL5
  • 2010.10.12
  • Samuel
  • www.mql5.com
This article explains the step by step process of identifying and resolving code errors as well as the steps in testing and optimizing of the Expert Advisor input parameters. You will learn how to use Strategy Tester of MetaTrader 5 client terminal to find the best symbol and set of input parameters for your Expert Advisor.
 

この記事がMT4に適用できるかどうか、どなたか教えてください。すでにMT5から多くのプロパティが採用されているようです。

一般的に、私のタスクは、MT5テスターで簡単に見ることができるように、 MT4テスターで LR相関と LR標準誤差の 値だけを取得することです。

テスト実行の最後にdeinit()関数でこれらの値を読み取り、最適化されたパラメータの値とともにファイルに書き込みたいだけです。

もしかしたら、誰かがすでにそのようなことを行っていて、私が車輪を再発明しなくても済むように、準備できた結果(LR相関とLR標準誤差の値を計算するために必要な関数)を共有してくれるかもしれません。

 
solandr:

この記事がMT4に適用できるかどうか、どなたか教えてください。すでにMT5から多くのプロパティが採用されているようです。

一般的に、私のタスクは、MT5テスターで簡単に見ることができるように、 MT4テスターで LR相関と LR標準誤差の 値だけを取得することです。

テスト実行の最後にdeinit()関数でこれらの値を読み取り、最適化されたパラメータの値とともにファイルに書き込みたいだけです。

もしかしたら、誰かがすでにそのようなことを行っていて、私が車輪を再発明しなくても済むように、準備できた結果(LR相関とLR標準誤差の値を計算するために必要な関数)を共有してくれるかもしれません。

ヒストリーのトレードでLR相関とLR標準誤差を計算する例がAlgLibに あります(MQL4Scripts\Alglib\UseAlglib.mq4)。
 
Automated-Trading:
ヒストリーのトレードに対するLR相関とLR標準誤差の計算例はAlgLibに あります(MQL4Scripts\Alglib ĈUseAlglib.mq4)。
ありがとうございます!調べてみます。
 
solandr:
ありがとう!調べてみるよ。

分かりました。相関は計算されているようです。

ただ一つ考えなければならなかったのは、この点がMT4 Build 670のテスターでは機能しないという事実です:

//--- 初期残高を得る
      if(order_type==6) // op_balance=6
        {
         if(NormalizeDouble(OrderProfit()+OrderSwap(),2)>=0.0)
            if(balance==0.0)
               balance=OrderProfit();
        }

テスターにはタイプ6の注文がないのです。

つまり、MT4テスターで実行し、ダウンロードしたzipファイルに含まれているUseAlglib.mq4のコードを使用する場合、deinit()関数からの呼び出しを通じて、以下のようになります。

残高は0のままです。そして、"Trading operations with zero balance "というエラーが表示される。

MT4のテスターで必要な初期残高の値をコード自体に挿入するだけで、すべてが完璧にカウントされるようになりました。

おそらく開発者は、ライブラリの将来のバージョンでこの点を考慮してくれるでしょう。

 

ケリー基準(ストラテジー)を以下のコードでテストしました:


double OnTester(void)
  {
   //https://www.investopedia.com/articles/trading/04/091504.asp
   double w=((TesterStatistics(STAT_PROFIT_TRADES)+TesterStatistics(STAT_LOSS_TRADES))>0)?TesterStatistics(STAT_PROFIT_TRADES)/(TesterStatistics(STAT_PROFIT_TRADES)+TesterStatistics(STAT_LOSS_TRADES)):0; // 勝利確率
   double r=((TesterStatistics(STAT_GROSS_LOSS)!=0)&&(TesterStatistics(STAT_LOSS_TRADES)!=0)&&(TesterStatistics(STAT_PROFIT_TRADES)!=0))?(TesterStatistics(STAT_GROSS_PROFIT)/TesterStatistics(STAT_PROFIT_TRADES))/(-TesterStatistics(STAT_GROSS_LOSS)/TesterStatistics(STAT_LOSS_TRADES)):0; // 勝ち負けの比率;
   double Kelly=(r!=0)?w-((1-w)/r):0; // ケリー・クライテリオン
   return(Kelly);
  }


メタトレーダーのストラテジーテスターが 0(ゼロ)の利益トレードを利益トレードとして計算するのかわかりません。どなたか教えてください。

 
Ingvar Engelbrecht:

さて、私はまたここにいる。この宇宙の一匹狼だ :-)

私は、計算された直線の傾きを方程式に取り込もうと、真直度カスタム基準を試してきました。このままでは、非常に微弱な利益で非常に高い評価を与えることができます。最終的な利益を加えるだけで

を計算に入れても、それ以上良くなりません。実際の傾きを計算式に加えるために、私は以下のようにコードを変更しました。

これは完璧な解決策ではないが、私が見たいものに近い。このコードでは、バランスまたは利益と一緒に結果を使用しても問題ありません。


あなたがこれを投稿してからずいぶん時間が経っていることは知っていますが、あなたがまだこれで遊んでいるか、他の誰かが同じ直球基準の実装を探している場合に備えて。

https://community.darwinex.com/t/equity-curve-straigthness-optimization-with-metatrader/3976

Equity Curve Straigthness Optimization with Metatrader
Equity Curve Straigthness Optimization with Metatrader
  • 2018.05.16
  • KlondikeFX
  • community.darwinex.com
An underrated feature of Metatrader’s Backtester is its ability to define a custom fitness function for the genetic optimization process. Meaning that you no longer are limited to rather simple metrics like final balance or profit factor but can evaluate the quality of each test run with your own individual calculations. To give a quick...
 

関連するチュートリアルは、EAのプログラミングについてなど、情報が多すぎて、他のチュートリアルにあるような、EAを購入し、最小限のプログラミング能力しかない平均的なパンターには適用できないものです。

デフォルトでは、遺伝子アルゴのMT5用の有用な基準は「バランス・マックス」だけで、それを数回繰り返し、複数のペアで使用するために、低いドローダウンを見つけるまで結果を漁らなければならないことに気づきました。

私が必要とする基準:- 20ドローダウン未満のマックスバランス、10ドローダウン未満のマックスバランス

 
一匹狼がここにいる😁。
 


「一匹狼」の皆さんへ:厳密なテスト基準を作り、それを自動化することは正しい道です。
私も同じことをしようとして、ストラテジーテスターに それをやってもらいたいと思ってこの記事にたどり着きました。