記事「自動売買ロボット向けリスクマネージャー(第1回):EA向けリスク管理用インクルードファイル」についてのディスカッション

 

新しい記事「自動売買ロボット向けリスクマネージャー(第1回):EA向けリスク管理用インクルードファイル」はパブリッシュされました:

トレードには、高いレベルのリスク管理と、そのルールを厳格に守る規律が求められます。本記事では、トレーダーが失敗する主な原因を分析し、MQL5プラットフォーム向けのCEnhancedRiskManagerクラスという技術的ソリューションを提示します。また、アグレッシブなグリッドEAを使った実践的なテストもおこないます。

経験上、十分に考えられたリスク管理システムを持たないトレーディング口座は、短期間で運用が終わってしまう傾向があります。

ほとんどすべての初心者トレーダーが陥る、典型的な心理的トラップが3つあります。最初のトラップは、利益が続いた後の高揚感です。市場で何度か連続して利益を上げると、「自分は市場を理解した」「市場の秘密を解き明かした」という感覚に陥ることがあります。心の中で、「今は利益が出ている。もっとリスクを取っても大丈夫だ」と考え始め、ロットを増やしたり、ストップロスを無視したり、同時に保有するポジション数を増やしたりします。その結果は予測できます。数週間かけて積み上げた利益を、わずか1日で失ってしまうことがあります。

2つ目のトラップは、相場が反転することを期待してポジションを持ち続けることです。ポジションの含み損がさらに拡大し、画面上の赤い数字がどんどん大きくなっていきます。それでもトレーダーはポジションを手放しません。「もうすぐ反転する」「これは単なる調整だ」「市場は永遠に下落し続けることはない」。何千人ものトレーダーが、このような言葉を自分に言い聞かせます。そして最終的に、マージンコールによってトレードを続けられなくなることがあります。

3つ目の、そして最も危険なトラップは、自分自身のルールを無視することです。トレーダーは、自分のトレードシステムを作り、明確なエントリー・決済ルールを設定し、リスク上限も決めます。しかし、ある時点で、「一度くらいルールを破っても大丈夫だろう」という考えが浮かびます。そして、ストップロスを解除したり、最大ロット数を超えたり、トレンドに逆らったポジションを取ったりするようになります。これは避けがたい破綻への道です。トレーダー自身も、そのことを十分に理解しているにもかかわらず、自分を止められなくなってしまうことがあります。

自動売買ロボット向けリスクマネージャー(第1回):EA向けリスク管理用インクルードファイル


作者: Yevgeniy Koshtenko

 
アイデアやコードを共有していただきありがとうございます。ご意向通りに活用させていただきます。
 
MQL4用のバージョンはあるのでしょうか?
 

こんにちは、ご尽力ありがとうございます!

ただ、記事で説明されている内容に対応するクラスのコードをぜひ見てみたいと思います。例えば

記事内:

enum ENUM_RISK_CALC_TYPE {
    RISK_CALC_BALANCE_ONLY,   // 残高のみに基づく計算
    RISK_CALC_EQUITY_ONLY,    // エクイティのみに基づく計算
    RISK_CALC_COMBINED,       // 複合計算
    RISK_CALC_ADAPTIVE        // 適応計算
};

添付ファイルには:

enum ENUM_RISK_CALC_TYPE {
    RISK_CALC_BALANCE_ONLY,   // Only Balance
    RISK_CALC_EQUITY_ONLY,    // Only Equity
    RISK_CALC_BALANCE_EQUITY, // Balance/Equity (US Prop Style)
    RISK_CALC_PROP_STANDARD   // Standard Prop Company Rules
};

記事で言及されている「適応型計算」が、添付されたクラスのコードには全く反映されていません。

また、コードには、アドバイザーのコンパイルを妨げるエラーがあります:

// Trading Object
    CTrade              m_trade;

publicセクションには次のように記述されている必要があります:

ご確認をお願いいたします。

 
私もコンパイルが通らず、124行目で止まってしまいます: 123 // トレードオブジェクトのマジックナンバーの設定
124 g_RiskManager.m_trade.SetExpertMagicNumber(InpMagicNumber);
 
Борис Ворона #:
私もコンパイルが通らず、124行目で止まってしまいます: 123 // トレードオブジェクトのマジックナンバーの設定
124 g_RiskManager.m_trade.SetExpertMagicNumber(InpMagicNumber);
クラス定義ファイル EnhancedPropRiskManager.mqh において、「CTrade m_trade;」という行を private セクションから public セクションに移動してください:
 
ありがとうございます。これでコンパイルできるようになりました。ただ、レスポンシブ版はコンパイルできません。
 

マーチンゲール法を採用した稼働中のアドバイザーにリスクマネージャーを適用しました

リスクマネージャーを使用しない場合の2025年のテスト結果は以下の通りです:

一方、リスクマネージャーを最適に設定した場合は以下の通りです:

ご覧の通り、最大ドローダウンは半分になり、利益は4倍になりました。

 

アルゴリズム取引において私が極めて重要だと考える点は、戦略の質と引き受けるリスクの量を明確に区別することです。

高い収益性だけでは、それを達成するためにシステムが預託金に対する高い負担を維持したり、大きなドローダウンに耐えたりする必要がある場合、その意味は比較的薄いと言えます。

私の場合、まずドローダウン、最大エクスポージャー、執行の安定性、そして様々な市場条件におけるシステムの挙動といったパラメータを評価することを優先しています。

また、リスク管理ルールをシステムロジックそのものの中に組み込み、単に好調な局面が続いているという理由だけでエクスポージャーを増やさないようにすることも重要だと考えています。

長期的には、アルゴリズムがどれだけの利益を上げられるかを分析することと同じくらい、どれだけの損失を許容できるかを管理することも 重要だと考えています。

 
Aleksander Gladkov #:

マーチンゲール法を採用した稼働中のアドバイザーにリスクマネージャーを適用した

リスクマネージャーを使用しない場合の2025年のテスト結果は以下の通りです:

一方、リスクマネージャーを最適に設定した場合の結果はこちらです:

ご覧の通り、最大ドローダウンは半分になり、利益は4倍になりました。

エクイティに対する相対的なドローダウンも縮小し、妥当な範囲内に収まるようになりました。

以前は50%を超えていましたが(現実的には確実に資金が底をつき、ストップアウトに至る水準です)、現在は約20%となり、少なくともセント単位で試してみる価値が出てきました。

取引回数が3分の1に減少したのは少し不思議です。多すぎますし、本来あるべき姿ではありません。

PS/マーチンゲール法の実験を行っていたにもかかわらず。マーチンゲール法は、その定義上、それ自体が純粋なマネーマネジメントの手法です。 この結果は何を物語っているのでしょうか?主に、マーチンゲール戦略を十分に練り上げられていないことを示しています。リスクの取りすぎや、逆に不足している部分があるようです… ;-)
明らかに改善の余地があります。