記事"バランスグラフを使用した戦略の最適化と、結果の「バランス+最大シャープレシオ」基準との比較"についてのディスカッション

 

新しい記事 バランスグラフを使用した戦略の最適化と、結果の「バランス+最大シャープレシオ」基準との比較 はパブリッシュされました:

本稿では、バランスグラフ分析に基づいたカスタム取引戦略最適化基準をさらにもう1つ考察します。線形回帰は、ALGLIBライブラリの関数を使用して計算されます。

MACD Sample balance regression.mq5、EURUSD H4、フォワードテストなし

最適化のために以下のパラメータを選択します。

図19. テスターの入力タブ

19. テスターの入力タブ

MACD Sample balance regressionEAのテストを3つ実行します。

  • テスト1:"Balance + max Sharp Ratio"標準パラメータの最適化
  • テスト2:"Custom max"カスタムパラメータの最適化(取引量最適化パラメータは'false')
  • テスト3:"Custom max"カスタムパラメータの最適化(取引量最適化パラメータは'true')

作者: Vladimir Karputov

 

この記事は、目標を達成するために標準ライブラリを使用する 例として興味深い。私はMT4で2年以上バランスRMS分析を使っていますが、ポジションの平均化を行うExpert Advisorでは非常に有用な手法です。

個人的には、この記事にはカスタムレポートの作成、つまり、特にエージェントを通じて最適化を行う場合に、最適化の結果をファイルに書き出すことに関する情報が不足しています。

 

最近の記事にも(探すのが面倒なので)「線形回帰」が使われていた。私はそれについて詳細なコメントを述べたが、繰り返そう。

どちらの著者も同じ間違いを犯している。「線形回帰」と「線形近似」という質的に異なる概念を混同しているのだ。前者は確率変数を指し、後者は決定論的変数を指す。両者の方程式は、誤差である確率変数によって異なっている。Alglibではどうなのか知りませんが、普通の統計パッケージでは、回帰係数の評価には誤差があり、それは計算された係数の公称値の倍数になることがあるので、誤差の計算は悲しい結果をもたらします:係数の値は計算され、我々はそれを見ますが、現実にはそれは存在せず、我々は見たものを使うことができません。この状況は、記事では考慮されておらず、"線形回帰 "という用語について、記事は絶対に間違っています。


線形回帰」という言葉を「線形近似」に変えれば、バランスがランダムな値ではなく決定論的な値の集合とみなされるという記事の本質に対応することになり、非常に興味深く有用な記事となる。

 

私のファイルにはなぜかbalanceregressionが含まれていません。トラブルシューティングの方法はありますか?ファイルにはincludeで保存してあります。


 
Scott David Maclean :

私のファイルにはなぜかbalanceregressionが含まれていません。トラブルシューティングの方法はありますか?ファイルにはincludeで保存してあります。


1.エラーの説明を読んで、パスをチェックして ください。

2.少なくとも、完全なコードと、指定されたフォルダにファイルが存在する証拠が必要です。

 

一般的な質問なのですが、取引結果の配列を作成する際、なぜ収支がプラスの取引のみを考慮するのでしょうか? つまり、なぜarr_profits (commission + swap + profit) > 0.0 の取引のみで満たされるのでしょうか?

残高曲線の窪み(これは取引の損失が発生した場合の結果です)は、LR線、ひいてはGetProfitStabilityにも 影響を与えないのでしょうか?

 

BalanceRegression.mphをコンパイルしようとすると、いくつかのエラーが発生しました:


コメントアウトされた2行が以下のエラーを発生させた。少し調べてみると、alglibライブラリが更新されていた。

更新された行はコンパイルされ、コードは実行されるが、私はCMatrixDoubleを使ったことがないので、この修正が正しいかどうかは100%わからない。


operator[] constant variable cannot be passed as reference


 CMatrixDouble xy(arr_size,2);
   for(int i=0;i<arr_size;i++)
     {
      //xy[i].Set(0,i+1);
      //xy[i].Set(1, arr_profits[i]);
      
      xy.Set(i, 0, i+1);
      xy.Set(i, 1, arr_profits[i]);


また、同じファイル内のコメントアウトされた行は未定義の変数を返していた:

//double TrendMSE=linear_report.m_rmserror;

double TrendMSE=linear_report.m_RMSError;