
バランスグラフを使用した戦略の最適化と、結果の「バランス+最大シャープレシオ」基準との比較
内容
- 1. はじめに
- 2. バランスグラフのトレンドラインを計算する方法
- 3. ALGLIBライブラリの使用法
- 4. CBalanceRegressionクラスのインクルード
- 5. EURUSD H4での最適化、フォワードテストなし
- 5.1. EA test balance regression.mq5、EURUSD H4、フォワードテストなし
- 5.2. Moving Average balance regression.mq5、EURUSD H4、フォワードテストなし
- 5.3. MACD Sample balance regression.mq5、EURUSD H4、フォワードテストなし
- 6. フォワードテストによるEURUSD M15の最適化
- 6.1. EA test balance regression.mq5、フォワードテストあり
- 6.2. MACD Sample balance regression.mq5、フォワードテストあり
- 6.3. Moving Average balance regression.mq5、フォワードテストあり
- 7. 終わりに
1. はじめに
作業するうちに、バランスグラフの履歴での成長は不十分であると気が付きました。さらに必要なのは十分な滑らさです。言い換えれば、トレンドラインからの平均二乗偏差はできるだけ小さくなければなりません。これは、利益とは別に安定性が求められることを意味します。それを達成するために、もう1つの最適化パラメータ、すなわち、バランスグラフ曲線と、回帰直線からのその値の偏差の分散を確認してみましょう。
ALGLIB数値解析ライブラリを使用して、線形回帰式の比とその他の統計的特性を取得します。
2. バランスグラフのトレンドラインを計算する方法
バランスグラフのトレンドラインを作成して、線からの偏差の平方和が最小になるようにしなければなりません。
線を計算するための方程式y=ax+bの比は標準最小二乗(LS)法によって見出されます。これには、必要な数式を全て提供するかわりに、ALGLIBライブラリの既成関数を使用して、それを私たちのニーズに適応させることにします。
2.1. 最適化基準を計算するためのアルゴリズム
5つの取引例を見てみましょう。
図1. バランスグラフと線形回帰
これら5つの取引は「残高」1-2-3-4-5バランスラインを形成します。線形回帰直線が計算され、最小二乗法を使用してプロットされます(計算はALGLIB数値解析ライブラリを使用して実行されます)。
2.2. 1番目のTrendProfit変数の導入
プロットされた回帰直線の取引当たりの利益を表します。
図2. TrendProfitパラメータ
この変数は回帰線の高さと取引回数の比として計算され、高さは点Bと点Aの回帰直線値の差として計算されます。
さて、ここで回帰直線の構築誤差、すなわち、回帰直線と平衡線との平均偏差を得る必要があります。これを線形回帰からの標準残高偏差と呼び、LR Standard error:( LR標準誤差)としてマークします。
図3. LR標準誤差
この方程式では error(誤差)はバランス値と線形回帰との差として計算されます。方程式の詳細についてはこちらを参照できます(ロシア語)。
図1で考察されるケースでは、誤差は下記のとおりです。
誤差#1 | 誤差#2 | 誤差#3 | 誤差#4 | 誤差#5 |
---|---|---|---|---|
10 000 - 10 600 = - 600 | 12 000 - 11 200 = 800 | 11 000 - 11 800 = - 800 | 14 000 - 12 400 = 1600 | 12 000 - 13 000 = - 1000 |
したがって、LR標準誤差は下記に等しくなります。
図4. 算出されたLR標準誤差
2.3. ProfitStability変数
このパラメータはバランスグラフの滑らかさを担います。以下はここでの目標です。
- 回帰直線は可能な限り水平線に対して急峻に配置するべきです。これはより多くの利益を意味します。
- 回帰直線と平衡線との平均二乗偏差はできるだけ小さくすべきです。これは取引がより安定していることを示唆しています。
ProfitStabilityはTrendProfitと LR標準エラーの比率として計算されます。
図5. ProfitStability変数
取引量が異なることによる影響を減らすためにProfitStability変数をすべての取引の総量で割ります。
3. ALGLIBライブラリの使用法
現時点(ビルド1645)で、ALGLIBライブラリはすでに長いこと標準ライブラリに統合されています( [データフォルダ]\MQL5\Include\Math\Alglib\alglib.mqh)。
図6. 標準ライブラリでのALGLIBライブラリへのパス
ALGLIBライブラリクラス
線形回帰を扱うには、次のクラスが必要です。- CLinRegクラス — 線形回帰を計算するための基本クラス
- CLinReg::LRBuildメソッド — i線形回帰計算モデル
- CLinReg::LRUnpackメソッド — 線形モデル比の復帰
- CLinearModelクラス — 補助クラス
- CLRReportクラス — 線形モデル上の拡張データを含む構造体(特に興味深いのはm_rmserrorフィールド(平均二乗誤差))
BalanceRegression.mqhクラス
線形回帰とパラメータの計算に関連する作業のすべては、Balance regression.mqhクラスで実行されます。
クラスメソッド
パラメータの設定 | |
---|---|
SetStartBalance | 初期バランスの設定 |
SetFromDate | 取引履歴を要求する初期日付の設定 |
SetVolumeNormalization | 取引量の正規化モードの設定 |
計算結果へのアクセス | |
GetProfitStability | 計算結果へのアクセス |
CBalanceRegressionの使用は次のステップを含みます。
- 初期バランスの設定 — SetStartBalanceメソッドを呼び出す
- 取引履歴を要求する初期日付の設定 — SetFromDateメソッドを呼び出す
- 取引量の正規化モードの設定 — SetVolumeNormalizationメソッドを呼び出す(取引量の正規化を使用する場合は'true'、それ以外の場合は'false'を渡す)
- 計算結果の取得 — GetProfitStabilityメソッドを呼び出し、取得した結果をOnTester関数に返す
3.1. 計算手順(GetProfitStabilityメソッド)
(手数料+スワップ+利益)> 0.0を持つ取引結果は、arr_profits配列に保存されます。すべての取引量は、total_volume変数で合計されます。
//--- double arr_profits[]; // 約定結果配列 double total_volume=0; // 合計取引量
次に、すべての取引を処理します。arr_profits配列に書き入れて、取引量をtotal_volume変数に合計します。
//--- 取引履歴を要求する HistorySelect(m_from_date,to_date); uint total_deals=HistoryDealsTotal(); ulong ticket_history_deal=0; //--- 全ての約定について for(uint i=0;i<total_deals;i++) { //--- 約定のticket_history_dealの取得を試みる if((ticket_history_deal=HistoryDealGetTicket(i))>0) { long deal_type =HistoryDealGetInteger(ticket_history_deal,DEAL_TYPE); double deal_volume =HistoryDealGetDouble(ticket_history_deal,DEAL_VOLUME); double deal_commission =HistoryDealGetDouble(ticket_history_deal,DEAL_COMMISSION); double deal_swap =HistoryDealGetDouble(ticket_history_deal,DEAL_SWAP); double deal_profit =HistoryDealGetDouble(ticket_history_deal,DEAL_PROFIT); if(deal_type!=DEAL_TYPE_BUY && deal_type!=DEAL_TYPE_SELL) continue; if(deal_commission==0.0 && deal_swap==0.0 && deal_profit==0.0) continue; total_volume+=deal_volume; int arr_size=ArraySize(arr_profits); ArrayResize(arr_profits,arr_size+1,50); // 配列のサイズを変更する if(arr_size==0) arr_profits[arr_size]=GetSetStartBalance()+deal_commission+deal_swap+deal_profit; else arr_profits[arr_size]=arr_profits[arr_size-1]+deal_commission+deal_swap+deal_profit; int d=0; } }
注:arr_profits配列の最初のエントリを作成すると、初期バランスと取引結果が合計されます。その後のすべてのエントリについては、前のエントリと取引結果を合計します。
CMatrixDouble class obクラスオブジェクトを宣言します。実際、これは行列です。取引インデックス("1"で始まる)結果を書き入れます。
//--- CMatrixDoubleオブジェクト 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]); //Print(arr_profits[i]); // デバッグ }
必要なクラスオブジェクト( CLinReg、CLinearModel、CLRReport)を宣言し、線形回帰を計算します。
//--- 線形回帰構造 CLinReg linear_regression; CLinearModel linear_model; CLRReport linear_report; int retcode; linear_regression.LRBuild(xy,arr_size,1,retcode,linear_model,linear_report); if(retcode!=1) { Print("Linear regression failed, error code=",retcode); return(0.0); } int nvars; double coefficients[]; linear_regression.LRUnpack(linear_model,coefficients,nvars); double coeff_a=coefficients[0]; double coeff_b=coefficients[1]; PrintFormat("y = %.1f x + %.1f",coeff_a,coeff_b);
最後にLRUnpackメソッドを呼び出してy = a*x + b方程式の比を取得します。その比はcoefficients配列に配置されます。
ALGLIBライブラリを使用して線形回帰を計算したので、本稿全体の焦点であるパラメータの計算に直接進みます。
//--- パラメータの計算 double TrendProfit=((double)arr_size*coeff_a+coeff_b)-(1.0*coeff_a+coeff_b); // "Y"軸上の回帰直線の投影 TrendProfit/=(double)arr_size; // 取引数で除算 double TrendMSE=linear_report.m_rmserror; // 訓練セットの二乗平均平方根誤差 double ProfitStability=TrendProfit/TrendMSE; //--- 取引量を正規化する if(GetVolumeNormalization()) ProfitStability/=total_volume; //--- 取引数で乗算する - 約定が少ないパスには興味がない ProfitStability*=arr_size; //--- return(ProfitStability*10000.0);
SetVolumeNormalizationメソッドを介して設定された初期パラメータに応じて、ProfitStabilityパラメータを合計取引量で除算します。結果をより良く表現するために、結果に10000を乗算します。
4. CBalanceRegressionクラスのインクルード
CBalanceRegressionクラスを様々なEAにインクルードするアルゴリズムを考察してみましょう。
4.1. MQL5ウィザードで生成されたエキスパートアドバイザー
ここでは取引量の正規化が結果に及ぼす影響を確認するべきです。つまり、ポジションの量を動的に計算するEAが必要です。これはMQL5ウィザードで行うことができます。エキスパートアドバイザー(生成)を選択し、資金管理モジュールの1つを資金管理ページに含めます。
- "Trading with fixed margin" — 余剰証拠金%でロットを計算する
- "Trading with fixed risk" — バランス%でロットを計算する
- "Trading with optimized trade volume" — 取引履歴によってロットを計算する
本稿では"Trading with fixed risk"資金管理モジュールを選択しましたが、EA自体は"EA test balance regression.mq5"という名前です。これを例として、CBalanceRegressionクラスファイルをインクルードする方法を示します。
ステップ1: CBalanceRegressionファイルをインクルードしてクラスオブジェクトを宣言する (m_balance_regression)。
注意:CBalanceRegressionクラスファイルは[データフォルダ]\MQL5\Include\Balance regressionフォルダに位置するべきです。
//--- 利用できる資金管理 #include <Expert\Money\MoneyFixedRisk.mqh> //--- 利用できるモジュールBalance Regression #include <Balance regression\BalanceRegression.mqh> //+------------------------------------------------------------------+ //| 入力 | //+------------------------------------------------------------------+
そして
//+------------------------------------------------------------------+ //| グローバルエキスパートオブジェクト | //+------------------------------------------------------------------+ CExpert ExtExpert; CBalanceRegression m_balance_regression; //+------------------------------------------------------------------+ //| エキスパート初期化関数 | //+------------------------------------------------------------------+
ステップ2:取引量の正規化を入力パラメータに有効/無効にするためのパラメータを追加します。
input double Money_FixRisk_Percent=10.0; // リスクの% //--- バランス正規化のための入力 input bool InpVolumeNormalization=true; // 取引量の正規化 //+------------------------------------------------------------------+ //| グローバルエキスパートオブジェクト | //+------------------------------------------------------------------+
ステップ3: CBalanceRegressionクラスのm_balance_regressionオブジェクトのパラメータ(取引履歴を要求するための初期データと取引量の正規化モード)を設定します。
//+------------------------------------------------------------------+ //| エキスパート初期化関数 | //+------------------------------------------------------------------+ int OnInit() { //--- CBalanceRegressionパラメータを設定する m_balance_regression.SetStartBalance(AccountInfoDouble(ACCOUNT_BALANCE)); m_balance_regression.SetFromDate(TimeCurrent()); m_balance_regression.SetVolumeNormalization(InpVolumeNormalization); //--- エキスパートの初期化
ステップ4:OnTester関数をファイルの最後に追加します。ここでは、(GetProfitStabilityを呼び出して)カスタム最適化基準を受け取り、テスターにパラメータを渡します。
//+------------------------------------------------------------------+ //| テスター関数 | //+------------------------------------------------------------------+ double OnTester() { //--- double ret=m_balance_regression.GetProfitStability(TimeCurrent()); //--- return(ret); }
4.2. 標準的なMACDサンプルと移動平均に基づくエキスパートアドバイザー
元になるEAはそれぞれ[データフォルダ]\MQL5\Experts\Examples\MACD\MACD Sample.mq5と [データフォルダ]MQL5\Experts\Examples\Moving Average\Moving Average.mq5です。
元になるEAを取り出し、異なる名前でコピーを保存します。私は"MACD Sample balance regression.mq5"と"Moving Average balance regression.mq5"を選びました。
ステップ1:CBalanceRegressionクラスファイルをインクルードしてクラスオブジェクトを宣言する(m_balance_regression)。
注意:CBalanceRegressionクラスファイルは[データフォルダ]\MQL5\Include\Balance regressionフォルダに位置するべきです。
MACD Sample balance regression.mq5 | Moving Average balance regression.mq5 |
---|---|
#include <Trade\AccountInfo.mqh> //--- 利用できるモジュールBalance Regression #include <Balance regression\BalanceRegression.mqh> CBalanceRegression m_balance_regression; //--- input double InpLots =0.1; // ロット | #include <Trade\Trade.mqh> //--- 利用できるモジュールBalance Regression #include <Balance regression\BalanceRegression.mqh> CBalanceRegression m_balance_regression; input double MaximumRisk = 0.02; // 最大リスク(%) |
ステップ2:取引量の正規化を入力パラメータに有効/無効にするためのパラメータを追加します。
MACD Sample balance regression.mq5 | Moving Average balance regression.mq5 |
---|---|
input int InpMATrendPeriod =26; // MAトレンド期間 //--- バランス正規化のための入力 input bool InpVolumeNormalization=true; // 取引量の正規化 //--- int ExtTimeOut=10; // 取引操作間のタイムアウト時間(秒単位) | input int MovingShift = 6; // 移動平均のシフト //--- バランス正規化のための入力 input bool InpVolumeNormalization=true; // 取引量の正規化 //--- int ExtHandle=0; |
ステップ3: CBalanceRegressionクラスのm_balance_regressionオブジェクトのパラメータ(取引履歴を要求するための初期データと取引量の正規化モード)を設定します。
MACD Sample balance regression.mq5 | Moving Average balance regression.mq5 |
---|---|
//+------------------------------------------------------------------+ //| 初期化と入力パラメータの確認 | //+------------------------------------------------------------------+ bool CSampleExpert::Init(void) { //--- CBalanceRegressionパラメータを設定する m_balance_regression.SetStartBalance(AccountInfoDouble(ACCOUNT_BALANCE)); m_balance_regression.SetFromDate(TimeCurrent()); m_balance_regression.SetVolumeNormalization(InpVolumeNormalization); //--- 共通情報を初期化する | //+------------------------------------------------------------------+ //| エキスパート初期化関数 | //+------------------------------------------------------------------+ int OnInit(void) { //--- CBalanceRegressionパラメータを設定する m_balance_regression.SetStartBalance(AccountInfoDouble(ACCOUNT_BALANCE)); m_balance_regression.SetFromDate(TimeCurrent()); m_balance_regression.SetVolumeNormalization(InpVolumeNormalization); //--- ヘッジモードが有効な場合、取引クラスによるポジションの調整を準備する |
ステップ4:両方のEAのファイルの最後にOnTester関数を追加します。ここでは、(GetProfitStabilityを呼び出して)カスタム最適化基準を受け取り、テスターにパラメータを渡します。
//+------------------------------------------------------------------+ //| テスター関数 | //+------------------------------------------------------------------+ double OnTester() { //--- double ret=m_balance_regression.GetProfitStability(TimeCurrent()); //--- return(ret); }
5. EURUSD H4での最適化、フォワードテストなし
回帰法を用いてバランスグラフを最適化するという考え方を確認できる3つのEAがあります。2つのEA(EA test balance regression.mq5および Moving Average balance regression.mq5)は取引中に動的にポジションボリュームを計算する一方、MACD Sample balance regression.mq5は固定ロットを使用します。
5.1. EA test balance regression.mq5、EURUSD H4、フォワードテストなし
オプションを見落とさずにテストを高速化するために、最適化のための2つのパラメータ、つまりポジション開閉シグナルの境界パラメータを選択しました。
図7. テスターの入力タブ
- テスト1:"Balance + max Sharp Ratio"標準パラメータの最適化
- テスト2:"Custom max"カスタムパラメータの最適化(取引量最適化パラメータは'false')
- テスト3:"Custom max"カスタムパラメータの最適化(取引量最適化パラメータは'true')
5.1.1 テスト1:"Balance + max Sharp Ratio"標準パラメータの最適化
テスト1のテスター設定(注:"Optimization"は"Balance + max Sharpe Ratio"に等しい):
図8. テスターの設定タブ
5.1.2. PC2台のホームローカルネットワークとクラウドでのテスト速度の比較
ホームネットワークには2台のコンピュータがあります。
- クアッドコアIntel Core i3-3120M @ 2.50GHz、8077MBを搭載したラップトップ:ターミナルは2番目のコンピュータ上のエージェントと通信する必要があるため、4つのエージェントのうち3つだけがテストに使用されます。
- 6コアAMD Phenom II X6 1075Tプロセッサ(4058 MB)を搭載したデスクトップ:CPUを過熱しないために、6つのうち4つだけがテストに使用されます。
図9. ホームネットワークの最適化
テスト1はホームネットワークでは21分43秒でパスしました。
キャッシュされたテスト結果を削除し、MQL5 Cloud Europe 1でテスト1を起動します。クラウドでは、テストは1分9秒で完了し、テスト費用は$0.06です。
テスト1の結果(降順で並び替えて5つの最良結果を表示):
パス | 結果 | 利益 | 予想ペイオフ | 利益係数 | 回復係数 | シャープレシオ | カスタム | エクイティDD % | 取引 | Signal_ThresholdOpen | Signal_ThresholdClose |
---|---|---|---|---|---|---|---|---|---|---|---|
346 | 4349.76 | 17818.98 | 181.83 | 1.28 | 1.45 | 0.16 | 27989.31 | 60.48 | 98 | 30 | 100 |
345 | 4349.76 | 17818.98 | 181.83 | 1.28 | 1.45 | 0.16 | 27989.31 | 60.48 | 98 | 25 | 100 |
344 | 4349.76 | 17818.98 | 181.83 | 1.28 | 1.45 | 0.16 | 27989.31 | 60.48 | 98 | 20 | 100 |
343 | 4349.76 | 17818.98 | 181.83 | 1.28 | 1.45 | 0.16 | 27989.31 | 60.48 | 98 | 15 | 100 |
327 | 4349.76 | 17818.98 | 181.83 | 1.28 | 1.45 | 0.16 | 27989.31 | 60.48 | 98 | 30 | 95 |
図10. テスト1、最適化パス346
5.1.3. テスト2:"Custom max"カスタムパラメータの最適化(取引量最適化パラメータは'false')
テスト2のテスター設定(注:"Optimization"は"Custom max"に等しい):
図11. テスターの設定タブ
テスト2のテスター設定(注:Value 行の"Volume normalization"は'false'):
図12. テスターの入力タブ
テスト2の結果(降順で並び替えて5つの最良結果を表示):
パス | 結果 | 利益 | 予想ペイオフ | 利益係数 | 回復係数 | シャープレシオ | カスタム | エクイティDD % | 取引 | Signal_ThresholdOpen | Signal_ThresholdClose |
---|---|---|---|---|---|---|---|---|---|---|---|
270 | 40085.45 | 11072.30 | 93.04 | 1.12 | 0.90 | 0.11 | 40085.45 | 41.18 | 119 | 30 | 80 |
269 | 40085.45 | 11072.30 | 93.04 | 1.12 | 0.90 | 0.11 | 40085.45 | 41.18 | 119 | 25 | 80 |
268 | 40085.45 | 11072.30 | 93.04 | 1.12 | 0.90 | 0.11 | 40085.45 | 41.18 | 119 | 20 | 80 |
267 | 40085.45 | 11072.30 | 93.04 | 1.12 | 0.90 | 0.11 | 40085.45 | 41.18 | 119 | 15 | 80 |
251 | 40085.45 | 11072.30 | 93.04 | 1.12 | 0.90 | 0.11 | 40085.45 | 41.18 | 119 | 30 | 75 |
図13. EURUSDH4、テスト2、最適化パス270
カスタムパラメータによる"Custom max"の最適化により、収益性は低下しましたが、エクイティによるドローダウンはより小さくなりました(Equity DD%列)。また、テスト2では、バランスによるドローダウンが小さくなっています。これは、図12と13を比較すると視覚的にもわかります。
5.1.4. テスト3:"Custom max"カスタムパラメータの最適化(取引量最適化パラメータは'true')
テスト3のテスター設定(テスター2と似ている)
図14. テスターの設定タブ
テスト3のテスター設定(注:Value 行の"Volume normalization"は''true''):
図15. テスターの入力タブ
クラウドでは、テストは2分27秒で完了し、テスト全体がMQL5 Cloud Europe 1で実行されました。テスト費用は$0.08です。
テスト3の結果(降順で並び替えて5つの最良結果を表示):
パス | 結果 | 利益 | 予想ペイオフ | 利益係数 | 回復係数 | シャープレシオ | カスタム | エクイティDD % | 取引 | Signal_ThresholdOpen | Signal_ThresholdClose |
---|---|---|---|---|---|---|---|---|---|---|---|
346 | 92.11 | 17818.98 | 181.83 | 1.28 | 1.45 | 0.16 | 92.11253 | 60.48 | 98 | 30 | 100 |
345 | 92.11 | 17818.98 | 181.83 | 1.28 | 1.45 | 0.16 | 92.11253 | 60.48 | 98 | 25 | 100 |
344 | 92.11 | 17818.98 | 181.83 | 1.28 | 1.45 | 0.16 | 92.11253 | 60.48 | 98 | 20 | 100 |
343 | 92.11 | 17818.98 | 181.83 | 1.28 | 1.45 | 0.16 | 92.11253 | 60.48 | 98 | 15 | 100 |
327 | 92.11 | 17818.98 | 181.83 | 1.28 | 1.45 | 0.16 | 92.11253 | 60.48 | 98 | 30 | 95 |
テスト3では、取引量パラメータが'true'に等しいので、テスト1と同じ最適オプションが定義されています。これは、線形回帰法を使用してバランスグラフを最適化するための優れたマーカーです。
結論:線形回帰法を使用しているバランスグラフの最適化により、 "Balance + max Sharp Ratio"最適化方法に劣らない、それ以上である結果を選択することができます。
5.2. Moving Average balance regression.mq5、EURUSD H4、フォワードテストなし
最適化のために以下のパラメータを選択します。
図16. テスターの入力タブ
Moving Average balance regression EAのテストを3つ実行します。
- テスト1:"Balance + max Sharp Ratio"標準パラメータの最適化
- テスト2:"Custom max"カスタムパラメータの最適化(取引量最適化パラメータは'false')
- テスト3:"Custom max"カスタムパラメータの最適化(取引量最適化パラメータは'true')
テスター設定(通貨、ティック生成方法、時間間隔は図5と同じ)
5.2.1. テスト1("Balance + max Sharp Ratio"標準パラメータの最適化)のクラウドでの実行です。クラウドでは、テストは1分22秒で完了し、テスト全体がMQL5 Cloud Europe 1で実行されました。テスト費用は$0.03です。
テスト1の結果(降順で並び替えて5つの最良結果を表示):
パス | 結果 | 利益 | 予想ペイオフ | 利益係数 | 回復係数 | シャープレシオ | カスタム | エクイティDD % | 取引 | DecreaseFactor | MovingPeriod |
---|---|---|---|---|---|---|---|---|---|---|---|
19 | 3500.83 | 1209.31 | 28.79 | 2.89 | 2.74 | 0.31 | 280.3791 | 4.29 | 42 | 9 | 13 |
18 | 3500.83 | 1209.31 | 28.79 | 2.89 | 2.74 | 0.31 | 280.3791 | 4.29 | 42 | 8 | 13 |
17 | 3500.83 | 1209.31 | 28.79 | 2.89 | 2.74 | 0.31 | 280.3791 | 4.29 | 42 | 7 | 13 |
21 | 3438.91 | 1202.00 | 28.62 | 2.76 | 2.52 | 0.31 | 287.1098 | 4.59 | 42 | 11 | 13 |
20 | 3438.91 | 1202.00 | 28.62 | 2.76 | 2.52 | 0.31 | 287.1098 | 4.59 | 42 | 10 | 13 |
最良のパス#19を見てみましょう。
図17. EURUSDH4、テスト1、最適化パス19
5.2.2. テスト2("Custom max"カスタムパラメータの最適化(取引量最適化パラメータは'false'))のクラウドで実行です。クラウドでは、結果は反転していますがキャッシュから取り出されたので、テストは0分と00秒かかります。テスト全体がMQL5 Cloud Europe 2で実行されました。テスト費用は$0.00です。
テスト2の結果(降順で並び替えて5つの最良結果を表示):
パス | 結果 | 利益 | 予想ペイオフ | 利益係数 | 回復係数 | シャープレシオ | カスタム | エクイティDD % | 取引 | DecreaseFactor | MovingPeriod |
---|---|---|---|---|---|---|---|---|---|---|---|
141 | 102076.24 | 1029.99 | 25.75 | 2.16 | 2.29 | 0.22 | 102076.2 | 3.93 | 40 | 14 | 22 |
140 | 102076.24 | 1029.99 | 25.75 | 2.16 | 2.29 | 0.22 | 102076.2 | 3.93 | 40 | 13 | 22 |
139 | 102076.24 | 1029.99 | 25.75 | 2.16 | 2.29 | 0.22 | 102076.2 | 3.93 | 40 | 12 | 22 |
142 | 101254.84 | 1037.87 | 25.95 | 2.15 | 2.31 | 0.22 | 101254.8 | 3.93 | 40 | 15 | 22 |
138 | 90936.41 | 960.67 | 24.02 | 2.09 | 2.08 | 0.21 | 90936.41 | 4.31 | 40 | 11 | 22 |
パス141はテーブルの最上部にあります(結果欄に最大値があります)。
図18. EURUSDH4、テスト2、最適化パス141
テスト2では、バランスグラフを最適化すると、 "Balance + max Sharp Ratio"パラメータによる最適化よりも良い結果が得られました。
5.2.3. テスト3クラウドでの"Custom max"カスタムパラメータの最適化(取引量最適化パラメータは'true)クラウドでは、テストは1分13秒で完了し、テスト全体がMQL5 Cloud Europe 2で実行されました。テスト費用は$0.05です。
テスト3の結果(降順で並び替えて5つの最良結果を表示):
パス | 結果 | 利益 | 予想ペイオフ | 利益係数 | 回復係数 | シャープレシオ | カスタム | エクイティDD % | 取引 | DecreaseFactor | MovingPeriod |
---|---|---|---|---|---|---|---|---|---|---|---|
141 | 13869.05 | 1029.99 | 25.75 | 2.16 | 2.29 | 0.22 | 13869.05 | 3.93 | 40 | 14 | 22 |
140 | 13869.05 | 1029.99 | 25.75 | 2.16 | 2.29 | 0.22 | 13869.05 | 3.93 | 40 | 13 | 22 |
139 | 13869.05 | 1029.99 | 25.75 | 2.16 | 2.29 | 0.22 | 13869.05 | 3.93 | 40 | 12 | 22 |
142 | 13235.93 | 1037.87 | 25.95 | 2.15 | 2.31 | 0.22 | 13235.93 | 3.93 | 40 | 15 | 22 |
138 | 12542.95 | 960.67 | 24.02 | 2.09 | 2.08 | 0.21 | 12542.95 | 4.31 | 40 | 11 | 22 |
テスト3では、テスト2と同じ最適オプションが選択されました。取引量パラメータ('true')の影響はありませんでした。
結論:"Custom max"パラメータによる最適化により、両方のテスト(テスト2及び3)でテスト1より良い結果を選ぶぶことができました。テスト3では、取引量パラメータ('true')の影響はありませんでした。
5.3. MACD Sample balance regression.mq5、EURUSD H4、フォワードテストなし
最適化のために以下のパラメータを選択します。
図19. テスターの入力タブ
MACD Sample balance regressionEAのテストを3つ実行します。
- テスト1:"Balance + max Sharp Ratio"標準パラメータの最適化
- テスト2:"Custom max"カスタムパラメータの最適化(取引量最適化パラメータは'false')
- テスト3:"Custom max"カスタムパラメータの最適化(取引量最適化パラメータは'true')
テスター設定(通貨、ティック生成方法、時間間隔は図5と同じ)
5.3.1. テスト1("Balance + max Sharp Ratio"標準パラメータの最適化)のクラウドでの実行です。クラウドでは、テストに3分55秒かかります(タスクがいくつかの低速エージェントでは実行されないので10個のタスクが他のエージェントに分散され、時間が比較的長いです)。テスト全体がMQL5 Cloud Europe 1で実行されました。テスト費用は$0.04です。
テスト1の結果:
パス | 結果 | 利益 | 予想ペイオフ | 利益係数 | 回復係数 | シャープレシオ | カスタム | エクイティDD % | 取引 | InpTakeProfit | InpTrailingStop |
---|---|---|---|---|---|---|---|---|---|---|---|
163 | 767049.82 | 363.32 | 24.22 | 3.87 | 74.02 | 24573559 | 0.91 | 15 | 25 | 50 | |
136 | 767049.82 | 363.32 | 24.22 | 3.87 | 74.02 | 24573559 | 0.91 | 15 | 25 | 45 | |
109 | 767049.82 | 363.32 | 24.22 | 3.87 | 74.02 | 24573559 | 0.91 | 15 | 25 | 40 | |
82 | 767049.82 | 363.32 | 24.22 | 3.87 | 74.02 | 24573559 | 0.91 | 15 | 25 | 35 | |
55 | 767049.82 | 363.32 | 24.22 | 3.87 | 74.02 | 24573559 | 0.91 | 15 | 25 | 30 |
この期間には取引がほとんどありません(13〜16)。より短い時間枠 (M15)でより多くの取引があることを願っています。これらのテストは以下の別のセクションに示されています。今のところ最良の結果は#163です。
図20. EURUSDH4、テスト1、最適化パス163
5.3.2. テスト2("Custom max"カスタムパラメータの最適化(取引量最適化パラメータは'false'))のクラウドで実行です。クラウドでは、結果は反転していますがキャッシュから取り出されたので、テストは0分と00秒かかります。テスト全体がMQL5 Cloud Europe 2で実行されました。テスト費用は$0.00です。
テスト2の結果:
パス | 結果 | 利益 | 予想ペイオフ | 利益係数 | 回復係数 | シャープレシオ | カスタム | エクイティDD % | 取引 | InpTakeProfit | InpTrailingStop |
---|---|---|---|---|---|---|---|---|---|---|---|
163 | 24573558.59 | 363.32 | 24.22 | 3.87 | 74.02 | 24573559 | 0.91 | 15 | 25 | 50 | |
136 | 24573558.59 | 363.32 | 24.22 | 3.87 | 74.02 | 24573559 | 0.91 | 15 | 25 | 45 | |
109 | 24573558.59 | 363.32 | 24.22 | 3.87 | 74.02 | 24573559 | 0.91 | 15 | 25 | 40 | |
82 | 24573558.59 | 363.32 | 24.22 | 3.87 | 74.02 | 24573559 | 0.91 | 15 | 25 | 35 | |
55 | 24573558.59 | 363.32 | 24.22 | 3.87 | 74.02 | 24573559 | 0.91 | 15 | 25 | 30 |
テスト2では、テスト1と同様に、最良の結果が得られました([結果]以外のすべての列を比較)。
5.3.3. テスト3クラウドでの"Custom max"カスタムパラメータの最適化(取引量最適化パラメータは'true)クラウドでは、テストは1分5秒で完了し、テスト全体がMQL5 Cloud Europe 2で実行されました。テスト費用は$0.05です。
テスト3の結果:
パス | 結果 | 利益 | 予想ペイオフ | 利益係数 | 回復係数 | シャープレシオ | カスタム | エクイティDD % | 取引 | InpTakeProfit | InpTrailingStop |
---|---|---|---|---|---|---|---|---|---|---|---|
163 | 16382372.39 | 363.32 | 24.22 | 3.87 | 74.02 | 16382372 | 0.91 | 15 | 25 | 50 | |
136 | 16382372.39 | 363.32 | 24.22 | 3.87 | 74.02 | 16382372 | 0.91 | 15 | 25 | 45 | |
109 | 16382372.39 | 363.32 | 24.22 | 3.87 | 74.02 | 16382372 | 0.91 | 15 | 25 | 40 | |
82 | 16382372.39 | 363.32 | 24.22 | 3.87 | 74.02 | 16382372 | 0.91 | 15 | 25 | 35 | |
55 | 16382372.39 | 363.32 | 24.22 | 3.87 | 74.02 | 16382372 | 0.91 | 15 | 25 | 30 |
線形回帰法を使用したバランスグラフの最適化は、 "Balance + max Sharp Ratio"を使用する場合と同様に機能しました。
6. フォワードテストによるEURUSD M15の最適化
EAは前と同じEA test balance regression.mq5、Moving Average balance regression.mq5及びMACD Sample balance regression.mq5の3つです。前のテストとは異なり、M15でフォワードテストを有効にしてテストします。
6.1. EA test balance regression.mq5、フォワードテストありテストを3つ実行します。
- テスト1:"Balance + max Sharp Ratio"標準パラメータの最適化
- テスト2:"Custom max"カスタムパラメータの最適化(取引量最適化パラメータは'false')
- テスト3:"Custom max"カスタムパラメータの最適化(取引量最適化パラメータは'true')
6.1.1. テスト1:"Balance + max Sharp Ratio"標準パラメータの最適化テスターの設定:
図21. テスターの設定タブ
テスターパラメータは図7
と同一です。クラウドではテストは2分14秒で完了し、テスト全体がMQL5 Cloud Europe 2で実行されました。テスト費用は$0.08です。
最適化結果:
パス | 結果 | 利益 | 予想ペイオフ | 利益係数 | 回復係数 | シャープレシオ | カスタム | エクイティDD % | 取引 | Signal_ThresholdOpen | Signal_ThresholdClose |
---|---|---|---|---|---|---|---|---|---|---|---|
352 | 23196.38 | 85836.92 | 721.32 | 1.47 | 2.03 | 0.24 | 2722.602 | 48.82 | 119 | 60 | 100 |
351 | 23196.38 | 85836.92 | 721.32 | 1.47 | 2.03 | 0.24 | 2722.602 | 48.82 | 119 | 55 | 100 |
333 | 23196.38 | 85836.92 | 721.32 | 1.47 | 2.03 | 0.24 | 2722.602 | 48.82 | 119 | 60 | 95 |
332 | 23196.38 | 85836.92 | 721.32 | 1.47 | 2.03 | 0.24 | 2722.602 | 48.82 | 119 | 55 | 95 |
314 | 23196.38 | 85836.92 | 721.32 | 1.47 | 2.03 | 0.24 | 2722.602 | 48.82 | 119 | 60 | 90 |
図22. EURUSDM15、テスト1、最適化パス352
フォワード結果:
パス | フォワード結果 | バック結果 | 利益 | 予想ペイオフ | 利益係数 | 回復係数 | シャープレシオ | カスタム | エクイティDD % | 取引 | Signal_ThresholdOpen | Signal_ThresholdClose |
---|---|---|---|---|---|---|---|---|---|---|---|---|
284 | 216.48 | 11708.46 | 18.91 | 1.89 | 1.02 | 0.02 | 0.02 | 7172.395 | 9.33 | 10 | 100 | 80 |
283 | 216.48 | 11708.46 | 18.91 | 1.89 | 1.02 | 0.02 | 0.02 | 7172.395 | 9.33 | 10 | 95 | 80 |
282 | 216.48 | 11708.46 | 18.91 | 1.89 | 1.02 | 0.02 | 0.02 | 7172.395 | 9.33 | 10 | 90 | 80 |
281 | 216.48 | 11708.46 | 18.91 | 1.89 | 1.02 | 0.02 | 0.02 | 7172.395 | 9.33 | 10 | 85 | 80 |
265 | 216.48 | 11708.46 | 18.91 | 1.89 | 1.02 | 0.02 | 0.02 | 7172.395 | 9.33 | 10 | 100 | 75 |
ここでの最善の選択肢は、フォワードセクションにわずか10の取引しか持たないものでした。これはもちろん不十分で、更なるテストを行う必要があります。
図23. EURUSDM15、テスト1、フォワードパス284
6.1.2. テスト2:"Custom max"カスタムパラメータの最適化(取引量最適化パラメータは'false')
最良の最適化結果(フォワードではない):
パス | 結果 | 利益 | 予想ペイオフ | 利益係数 | 回復係数 | シャープレシオ | カスタム | エクイティDD % | 取引 | Signal_ThresholdOpen | Signal_ThresholdClose |
---|---|---|---|---|---|---|---|---|---|---|---|
284 | 180332.68 | 10820.37 | 309.15 | 4.67 | 6.80 | 0.56 | 180332.7 | 7.98 | 35 | 100 | 80 |
283 | 180332.68 | 10820.37 | 309.15 | 4.67 | 6.80 | 0.56 | 180332.7 | 7.98 | 35 | 95 | 80 |
282 | 180332.68 | 10820.37 | 309.15 | 4.67 | 6.80 | 0.56 | 180332.7 | 7.98 | 35 | 90 | 80 |
281 | 180332.68 | 10820.37 | 309.15 | 4.67 | 6.80 | 0.56 | 180332.7 | 7.98 | 35 | 85 | 80 |
265 | 180332.68 | 10820.37 | 309.15 | 4.67 | 6.80 | 0.56 | 180332.7 | 7.98 | 35 | 100 | 75 |
図24. EURUSDM15、テスト2、最適化パス284
フォワード結果:
パス | フォワード結果 | バック結果 | 利益 | 予想ペイオフ | 利益係数 | 回復係数 | シャープレシオ | カスタム | エクイティDD % | 取引 | Signal_ThresholdOpen | Signal_ThresholdClose |
---|---|---|---|---|---|---|---|---|---|---|---|---|
284 | -14294.76 | 180332.68 | 18.91 | 1.89 | 1.02 | 0.02 | 0.02 | -14294.8 | 9.33 | 10 | 100 | 80 |
283 | -14294.76 | 180332.68 | 18.91 | 1.89 | 1.02 | 0.02 | 0.02 | -14294.8 | 9.33 | 10 | 95 | 80 |
282 | -14294.76 | 180332.68 | 18.91 | 1.89 | 1.02 | 0.02 | 0.02 | -14294.8 | 9.33 | 10 | 90 | 80 |
281 | -14294.76 | 180332.68 | 18.91 | 1.89 | 1.02 | 0.02 | 0.02 | -14294.8 | 9.33 | 10 | 85 | 80 |
265 | -14294.76 | 180332.68 | 18.91 | 1.89 | 1.02 | 0.02 | 0.02 | -14294.8 | 9.33 | 10 | 100 | 75 |
テスト2では、フォワードテストはテスト1と同じ結果を示します。
テスト2の線形回帰法を用いてバランスグラフを最適化することにより、テスト1("Balance + max Sharp Ratio"法)に劣らない結果を検出することができました。
6.1.3. テスト3("Custom max"カスタムパラメータの最適化(取引量最適化パラメータは'true'))のクラウドでの実行です。クラウドでは、テストは3分29秒で完了し、テスト全体がMQL5 Cloud Europe 1で実行されました。テスト費用は$0.07です。
最良の最適化結果(フォワードではない):
パス | 結果 | 利益 | 予想ペイオフ | 利益係数 | 回復係数 | シャープレシオ | カスタム | エクイティDD % | 取引 | Signal_ThresholdOpen | Signal_ThresholdClose |
---|---|---|---|---|---|---|---|---|---|---|---|
208 | 1660.90 | 10008.05 | 285.94 | 4.50 | 6.55 | 0.56 | 1660.901 | 7.98 | 35 | 100 | 60 |
207 | 1660.90 | 10008.05 | 285.94 | 4.50 | 6.55 | 0.56 | 1660.901 | 7.98 | 35 | 95 | 60 |
206 | 1660.90 | 10008.05 | 285.94 | 4.50 | 6.55 | 0.56 | 1660.901 | 7.98 | 35 | 90 | 60 |
205 | 1660.90 | 10008.05 | 285.94 | 4.50 | 6.55 | 0.56 | 1660.901 | 7.98 | 35 | 85 | 60 |
189 | 1660.90 | 10008.05 | 285.94 | 4.50 | 6.55 | 0.56 | 1660.901 | 7.98 | 35 | 100 | 55 |
図25. EURUSDM15、テスト3、最適化パス 208
"Normalization of traded volumes" を有効にしても、結果に大きな影響はありませんでした。また、最適な結果の1つは最適化された間隔内で検出されました。
最良のフォワード結果:
パス | フォワード結果 | バック結果 | 利益 | 予想ペイオフ | 利益係数 | 回復係数 | シャープレシオ | カスタム | エクイティDD % | 取引 | Signal_ThresholdOpen | Signal_ThresholdClose |
---|---|---|---|---|---|---|---|---|---|---|---|---|
266 | -103.43 | -25.56 | -7464.56 | -24.64 | 0.66 | -0.99 | -0.11 | -103.428 | 75.43 | 303 | 10 | 80 |
247 | -103.43 | -25.56 | -7464.56 | -24.64 | 0.66 | -0.99 | -0.11 | -103.428 | 75.43 | 303 | 10 | 75 |
228 | -103.43 | -25.56 | -7464.56 | -24.64 | 0.66 | -0.99 | -0.11 | -103.428 | 75.43 | 303 | 10 | 70 |
209 | -103.43 | -25.56 | -7464.56 | -24.64 | 0.66 | -0.99 | -0.11 | -103.428 | 75.43 | 303 | 10 | 65 |
156 | -120.35 | -29.28 | -8013.01 | -22.76 | 0.63 | -1.00 | -0.13 | -120.35 | 80.44 | 352 | 30 | 50 |
テスト3のフォワードテスト(取引量最適化パラメータは 'true')は、ネガティブな結果のみを示します(「フォワード結果」列を参照)。フォワードテストで最も正確で現実的な結果が選択されているため、線形回帰法を使用してバランスグラフを最適化するための良い結果です。
線形回帰法(取引量最適化パラメータが'false')を使用してバランスグラフを最適化すると"Balance max + Sharp Ratio"法に匹敵する結果を得ることができます。取引量最適化パラメータが''true'の場合、フォワードテスト結果はこの時間枠での実際のテストイメージを示します。
6.2. MACD Sample balance regression.mq5、フォワードテスト
6.2.1. テスト1("Balance + max Sharp Ratio"標準パラメータの最適化)のクラウドでの実行です。クラウドでは、テストは1分3秒で完了し、テスト全体がMQL5 Cloud Europe 1で実行されました。テスト費用は$0.06です。
最適化結果:
パス | 結果 | 利益 | 予想ペイオフ | 利益係数 | 回復係数 | シャープレシオ | カスタム | エクイティDD % | 取引 | InpTakeProfit | InpTrailingStop |
---|---|---|---|---|---|---|---|---|---|---|---|
171 | 2094.29 | 479.93 | 8.57 | 1.81 | 2.03 | 0.20 | -1.69249 | 2.30 | 56 | 65 | 50 |
144 | 2094.29 | 479.93 | 8.57 | 1.81 | 2.03 | 0.20 | -1.69249 | 2.30 | 56 | 65 | 45 |
182 | 2078.33 | 489.23 | 8.74 | 1.82 | 2.07 | 0.20 | -9.9625 | 2.29 | 56 | 120 | 50 |
155 | 2077.49 | 489.03 | 8.73 | 1.82 | 2.07 | 0.20 | -9.90369 | 2.29 | 56 | 120 | 45 |
181 | 2066.17 | 484.13 | 8.65 | 1.81 | 2.05 | 0.20 | -8.1109 | 2.29 | 56 | 115 | 50 |
図26. EURUSDM15、テスト1、最適化パス171
フォワード結果:
パス | フォワード結果 | バック結果 | 利益 | 予想ペイオフ | 利益係数 | 回復係数 | シャープレシオ | カスタム | エクイティDD % | 取引 | InpTakeProfit | InpTrailingStop |
---|---|---|---|---|---|---|---|---|---|---|---|---|
78 | 1182.13 | 1659.86 | 83.87 | 5.24 | 1.43 | 0.42 | 0.12 | -44.8452 | 1.95 | 16 | 140 | 30 |
77 | 1134.97 | 1659.86 | 78.87 | 4.93 | 1.41 | 0.40 | 0.11 | -53.5369 | 1.95 | 16 | 135 | 30 |
105 | 1107.99 | 1639.60 | 78.17 | 4.89 | 1.40 | 0.39 | 0.11 | -26.6428 | 1.96 | 16 | 140 | 35 |
76 | 1085.51 | 1659.86 | 73.87 | 4.62 | 1.38 | 0.37 | 0.11 | -62.5775 | 1.95 | 16 | 130 | 30 |
171 | 1060.24 | 2094.29 | 62.97 | 3.94 | 1.32 | 0.36 | 0.11 | -347.982 | 1.70 | 16 | 65 | 50 |
図27. EURUSDM15、テスト1、フォワードパス78
6.2.2. テスト2:"Custom max"カスタムパラメータの最適化(取引量最適化パラメータは'false')
最適化結果:
パス | 結果 | 利益 | 予想ペイオフ | 利益係数 | 回復係数 | シャープレシオ | カスタム | エクイティDD % | 取引 | InpTakeProfit | InpTrailingStop |
---|---|---|---|---|---|---|---|---|---|---|---|
168 | 84498.76 | 442.03 | 7.89 | 1.74 | 2.08 | 0.19 | 84498.76 | 2.07 | 56 | 50 | 50 |
141 | 84498.76 | 442.03 | 7.89 | 1.74 | 2.08 | 0.19 | 84498.76 | 2.07 | 56 | 50 | 45 |
114 | 84498.76 | 442.03 | 7.89 | 1.74 | 2.08 | 0.19 | 84498.76 | 2.07 | 56 | 50 | 40 |
167 | 83473.95 | 442.03 | 7.89 | 1.74 | 2.08 | 0.19 | 83473.95 | 2.06 | 56 | 45 | 50 |
140 | 83473.95 | 442.03 | 7.89 | 1.74 | 2.08 | 0.19 | 83473.95 | 2.06 | 56 | 45 | 45 |
図28. EURUSDM15、テスト2、最適化パス168
フォワード結果:
パス | フォワード結果 | バック結果 | 利益 | 予想ペイオフ | 利益係数 | 回復係数 | シャープレシオ | カスタム | エクイティDD % | 取引 | InpTakeProfit | InpTrailingStop |
---|---|---|---|---|---|---|---|---|---|---|---|---|
78 | 1182.13 | 1659.86 | 83.87 | 5.24 | 1.43 | 0.42 | 0.12 | 6462.158 | 1.95 | 16 | 140 | 30 |
77 | 1134.97 | 1659.86 | 78.87 | 4.93 | 1.41 | 0.40 | 0.11 | 5018.77 | 1.95 | 16 | 135 | 30 |
105 | 1107.99 | 1639.60 | 78.17 | 4.89 | 1.40 | 0.39 | 0.11 | 5617.275 | 1.96 | 16 | 140 | 35 |
76 | 1085.51 | 1659.86 | 73.87 | 4.62 | 1.38 | 0.37 | 0.11 | 3525.665 | 1.95 | 16 | 130 | 30 |
171 | 1060.24 | 2094.29 | 62.97 | 3.94 | 1.32 | 0.36 | 0.11 | -5131.93 | 1.70 | 16 | 65 | 50 |
図29. EURUSDM15、テスト2、フォワードパス78
テスト2の回帰法を用いたバランスグラフの最適化は、"Balance + max Sharp Ratio"法に匹敵する結果を示しました。
6.2.3. テスト3("Custom max"カスタムパラメータの最適化(取引量最適化パラメータは'true))のクラウドでの実行です。クラウドでは、テストは1分44秒で完了し、テスト全体がMQL5 Cloud Europe 1で実行されました。テスト費用は$0.08です。
最適化結果:
パス | 結果 | 利益 | 予想ペイオフ | 利益係数 | 回復係数 | シャープレシオ | カスタム | エクイティDD % | 取引 | InpTakeProfit | InpTrailingStop |
---|---|---|---|---|---|---|---|---|---|---|---|
168 | 15089.06 | 442.03 | 7.89 | 1.74 | 2.08 | 0.19 | 15089.06 | 2.07 | 56 | 50 | 50 |
141 | 15089.06 | 442.03 | 7.89 | 1.74 | 2.08 | 0.19 | 15089.06 | 2.07 | 56 | 50 | 45 |
114 | 15089.06 | 442.03 | 7.89 | 1.74 | 2.08 | 0.19 | 15089.06 | 2.07 | 56 | 50 | 40 |
167 | 14906.06 | 442.03 | 7.89 | 1.74 | 2.08 | 0.19 | 14906.06 | 2.06 | 56 | 45 | 50 |
140 | 14906.06 | 442.03 | 7.89 | 1.74 | 2.08 | 0.19 | 14906.06 | 2.06 | 56 | 45 | 45 |
フォワード結果:
パス | フォワード結果 | バック結果 | 利益 | 予想ペイオフ | 利益係数 | 回復係数 | シャープレシオ | カスタム | エクイティDD % | 取引 | InpTakeProfit | InpTrailingStop |
---|---|---|---|---|---|---|---|---|---|---|---|---|
78 | 4038.85 | 13138.16 | 83.87 | 5.24 | 1.43 | 0.42 | 0.12 | 4038.849 | 1.95 | 16 | 140 | 30 |
105 | 3510.80 | 13026.26 | 78.17 | 4.89 | 1.40 | 0.39 | 0.11 | 3510,797 | 1.96 | 16 | 140 | 35 |
77 | 3136.73 | 13138.16 | 78.87 | 4.93 | 1.41 | 0.40 | 0.11 | 3136.731 | 1.95 | 16 | 135 | 30 |
132 | 3074.09 | 13598.05 | 73.17 | 4.57 | 1.38 | 0.37 | 0.10 | 3074.089 | 1.96 | 16 | 140 | 40 |
159 | 2658.84 | 13777.31 | 68.47 | 4.28 | 1.35 | 0.35 | 0.10 | 2658.844 | 1.96 | 16 | 140 | 45 |
線形回帰法を用いたバランスグラフの最適化は、標準的な"Balance max + Sharp Ratio"法に匹敵することが判明しました。
6.3. Moving Average balance regression.mq5 EA、フォワードテスト
6.3.1. テスト1:"Balance + max Sharp Ratio"標準パラメータの最適化。テスターのInputs(入力)タブは図15に似ており、Settings(設定)タブは図23
に似ています。クラウドでは、テストは1分28秒で完了し、テスト全体がMQL5 Cloud Europe 1で実行されました。テスト費用は$0.05です。
最適化結果:
パス | 結果 | 利益 | 予想ペイオフ | 利益係数 | 回復係数 | シャープレシオ | カスタム | エクイティDD % | 取引 | DecreaseFactor | MovingPeriod |
---|---|---|---|---|---|---|---|---|---|---|---|
53 | -1.29 | -16.76 | -0.03 | 0.99 | -0.03 | 0.00 | 11966.34 | 5.92 | 525 | 4 | 16 |
52 | -1.29 | -16.76 | -0.03 | 0.99 | -0.03 | 0.00 | 11966.34 | 5.92 | 525 | 3 | 16 |
165 | -6.17 | -24.02 | -0.05 | 0.99 | -0.03 | 0.00 | -37045.4 | 6.66 | 465 | 12 | 24 |
166 | -26.36 | -49.14 | -0.11 | 0.99 | -0.07 | 0.00 | -38052.8 | 6.86 | 465 | 13 | 24 |
163 | -39.47 | -61.88 | -0.13 | 0.98 | -0.09 | 0.00 | -39156.1 | 6.62 | 465 | 10 | 24 |
図30. EURUSDM15、テスト1、最適化パス53
フォワード結果:
パス | フォワード結果 | バック結果 | 利益 | 予想ペイオフ | 利益係数 | 回復係数 | シャープレシオ | カスタム | エクイティDD % | 取引 | DecreaseFactor | MovingPeriod |
---|---|---|---|---|---|---|---|---|---|---|---|---|
48 | 409.74 | -460.18 | 185.78 | 1.06 | 1.16 | 0.80 | 0.04 | 42602.76 | 2.26 | 175 | 12 | 15 |
49 | 364.79 | -461.14 | 165.23 | 0.94 | 1.14 | 0.67 | 0.04 | 38508.36 | 2.41 | 175 | 13 | 15 |
50 | 362.45 | -460.40 | 164.15 | 0.94 | 1.14 | 0.66 | 0.04 | 38292.53 | 2.42 | 175 | 14 | 15 |
51 | 353.14 | -467.05 | 159.83 | 0.91 | 1.13 | 0.65 | 0.03 | 37460.15 | 2.42 | 175 | 15 | 15 |
47 | 350.60 | -629.53 | 144.32 | 0.82 | 1.13 | 0.65 | 0.03 | 32767.39 | 2.17 | 175 | 11 | 15 |
図31. EURUSDM15、テスト1、フォワードパス48
6.3.2. テスト2: :"Custom max"カスタムパラメータの最適化(取引量最適化パラメータは'false')
最適化結果:
パス | 結果 | 利益 | 予想ペイオフ | 利益係数 | 回復係数 | シャープレシオ | カスタム | エクイティDD % | 取引 | DecreaseFactor | MovingPeriod |
---|---|---|---|---|---|---|---|---|---|---|---|
53 | 11966.34 | -16.76 | -0.03 | 0.99 | -0.03 | 0.00 | 11966.34 | 5.92 | 525 | 4 | 16 |
52 | 11966.34 | -16.76 | -0.03 | 0.99 | -0.03 | 0.00 | 11966.34 | 5.92 | 525 | 3 | 16 |
54 | 2465.75 | -103.27 | -0.20 | 0.96 | -0.14 | -0.01 | 2465.748 | 7.19 | 525 | 5 | 16 |
57 | 813.83 | -91.78 | -0.17 | 0.97 | -0.13 | -0.01 | 813.831 | 6.75 | 525 | 8 | 16 |
56 | 813.83 | -91.78 | -0.17 | 0.97 | -0.13 | -0.01 | 813.831 | 6.75 | 525 | 7 | 16 |
フォワード結果:
パス | フォワード結果 | バック結果 | 利益 | 予想ペイオフ | 利益係数 | 回復係数 | シャープレシオ | カスタム | エクイティDD % | 取引 | DecreaseFactor | MovingPeriod |
---|---|---|---|---|---|---|---|---|---|---|---|---|
48 | 42602.76 | -73708.28 | 185.78 | 1.06 | 1.16 | 0.80 | 0.04 | 42602.76 | 2.26 | 175 | 12 | 15 |
49 | 38508.36 | -74600.92 | 165.23 | 0.94 | 1.14 | 0.67 | 0.04 | 38508.36 | 2.41 | 175 | 13 | 15 |
50 | 38292.53 | -74386.41 | 164.15 | 0.94 | 1.14 | 0.66 | 0.04 | 38292.53 | 2.42 | 175 | 14 | 15 |
51 | 37460.15 | -75315.40 | 159.83 | 0.91 | 1.13 | 0.65 | 0.03 | 37460.15 | 2.42 | 175 | 15 | 15 |
47 | 32767.39 | -107616.36 | 144.32 | 0.82 | 1.13 | 0.65 | 0.03 | 32767.39 | 2.17 | 175 | 11 | 15 |
6.3.3. テスト3("Custom max"カスタムパラメータの最適化(取引量最適化パラメータは'true))のクラウドでの実行です。クラウドでは、テストは0分42秒で完了し、テスト全体がMQL5 Cloud Europe 1で実行されました。テスト費用は$0.04です。
最適化結果:
パス | 結果 | 利益 | 予想ペイオフ | 利益係数 | 回復係数 | シャープレシオ | カスタム | エクイティDD % | 取引 | DecreaseFactor | MovingPeriod |
---|---|---|---|---|---|---|---|---|---|---|---|
53 | 243.32 | -16.76 | -0.03 | 0.99 | -0.03 | 0.00 | 243.3172 | 5.92 | 525 | 4 | 16 |
52 | 243.32 | -16.76 | -0.03 | 0.99 | -0.03 | 0.00 | 243.3172 | 5.92 | 525 | 3 | 16 |
54 | 45.69 | -103.27 | -0.20 | 0.96 | -0.14 | -0.01 | 45.68738 | 7.19 | 525 | 5 | 16 |
57 | 13.40 | -91.78 | -0.17 | 0.97 | -0.13 | -0.01 | 13.40301 | 6.75 | 525 | 8 | 16 |
56 | 13.40 | -91.78 | -0.17 | 0.97 | -0.13 | -0.01 | 13.40301 | 6.75 | 525 | 7 | 16 |
フォワード結果:
パス | フォワード結果 | バック結果 | 利益 | 予想ペイオフ | 利益係数 | 回復係数 | シャープレシオ | カスタム | エクイティDD % | 取引 | DecreaseFactor | MovingPeriod |
---|---|---|---|---|---|---|---|---|---|---|---|---|
48 | 1772.90 | -997.81 | 185.78 | 1.06 | 1.16 | 0.80 | 0.04 | 1772.899 | 2.26 | 175 | 12 | 15 |
49 | 1591.91 | -994.94 | 165.23 | 0.94 | 1.14 | 0.67 | 0.04 | 1591.912 | 2.41 | 175 | 13 | 15 |
50 | 1577.12 | -987.34 | 164.15 | 0.94 | 1.14 | 0.66 | 0.04 | 1577.123 | 2.42 | 175 | 14 | 15 |
51 | 1537.14 | -972.44 | 159.83 | 0.91 | 1.13 | 0.65 | 0.03 | 1537.142 | 2.42 | 175 | 15 | 15 |
47 | 1473.35 | -1540.90 | 144.32 | 0.82 | 1.13 | 0.65 | 0.03 | 1473.354 | 2.17 | 175 | 11 | 15 |
テスト3の線形回帰法を使用してバランスグラフを最適化すると、テスト1の結果が完全に繰り返されます。言い換えれば、Moving Average balance regression.mq5 EAは取引で動的ロット計算を適用しますが、取引量最適化を有効にしても結果に影響はありません。
線形回帰法を用いたバランスグラフの最適化は、標準的な"Balance max + Sharp Ratio"法に匹敵することが判明しました。
7. 終わりに
線形回帰法を用いてバランスグラフを適用した結果は、"Balance + max Sharp Ratio"最適化法に同等であることが判明しました。動的ロットを使用するEAによる結果は興味深い結果ものです。場合によっては、"traded volumes normalization"(取引量の正規化)設定とフォワードテストの組み合わせによってより現実的なイメージが得られます。
私は、記述された方法には存在する権利があり、収益性の高い取引や損失を生み出す取引の期間を考慮して得られた価値を試すことなどによってさらに改善できると信じています。
MetaQuotes Ltdによってロシア語から翻訳されました。
元の記事: https://www.mql5.com/ru/articles/3642





- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索