English Русский 中文 Español Deutsch Português
preview
外国為替市場向けCAPMモデルインジケータ

外国為替市場向けCAPMモデルインジケータ

MetaTrader 5エキスパート |
16 3
Yevgeniy Koshtenko
Yevgeniy Koshtenko

CAPMモデルの歴史的発展

資本資産価格モデル(CAPM)の誕生は、金融市場におけるリスクとリターンの関係に対する理解に大きな変革がもたらされた結果でした。1960年代初頭、金融学は急速な発展期にあり、研究者たちは資産価格形成を説明するための数学的に厳密なモデルの構築を目指していました。

CAPMの基礎は、1952年にハリー・マーコウィッツが提唱した現代ポートフォリオ理論の研究によって築かれました。マーコウィッツは、投資家がポートフォリオの分散投資によってリスクとリターンの関係を最適化できることを示しました。彼が提唱した効率的フロンティア(Efficient Frontier)の概念は、その後の金融理論の発展を支える基盤となりました。

ウィリアム・シャープはマーコウィッツのアイデアを発展させる過程で、ポートフォリオ最適化に伴う計算量の大きさという実務上の問題に直面しました。当時はコンピュータの計算能力が限られており、多数の資産に対する共分散行列を計算することは大きな技術的課題でした。このことが、理論的な厳密性を維持しながらも、より実務的に利用しやすい簡略化されたモデルの探求へとシャープを導きました。

1964年、シャープは有名な論文「Capital Asset Prices:A Theory of Market Equilibrium under Conditions of Risk」を発表し、その中で初めてCAPMモデルを提示しました。シャープとは独立に、ジョン・リントナーおよびヤン・モシンも類似した研究を進めており、これらの発見が持つ本質的な重要性を裏付けることとなりました。金融理論への貢献が評価され、シャープは1990年にノーベル経済学賞を受賞しています。

CAPMは学術界で急速に受け入れられ、その後、投資運用における数多くの実務的応用の基盤となりました。1970年代までには、CAPMはすでに投資ファンドや企業において、資本コストの推定や投資判断を行うための手法として広く利用されるようになっていました。


古典的CAPMモデルの数学的構造

古典的なCAPM(Capital Asset Pricing Model:資本資産価格モデル)は、その数学的構造および実務への適用可能性を規定するいくつかの重要な仮定に基づいています。モデルの中心となる方程式は、資産の期待リターンを相互に関連するパラメータ群によって表現します。

E(Ri) = Rf + βi × (E(Rm) - Rf)

ここで、E(Ri)は資産iの期待リターン、Rfは無リスク利子率、βiは資産iのベータ係数、E(Rm)は市場ポートフォリオの期待リターンを表します。

ベータ係数はこのモデルにおいて中心的な役割を果たしており、資産収益率と市場収益率との共分散を、市場収益率の分散で割った比率として定義されます。

βi = Cov(Ri, Rm) / Var(Rm)

この指標は、個別資産の収益率が市場全体の収益率の変化に対してどの程度敏感に反応するかを測定するものです。ベータが1を超える資産は市場全体よりも高いボラティリティを示し、ベータが1未満の資産は市場よりも低いボラティリティを示します。

CAPMは、システマティックリスク(ベータによって測定される市場リスク)と期待リターンとの間に線形関係が存在すると仮定しています。この関係は、一般に証券市場線(SML, Security Market Line)としてグラフ化され、経済内のすべての資産についてリスクとリターンの均衡関係を表します。

CAPMの基本的な仮定には、市場が完全競争市場であること、取引コストが存在しないこと、すべての投資家が将来の収益率について同一の期待を持つこと、無リスク利子率で貸付および借入を行えること、そして資産収益率が正規分布に従うことが含まれます。

また、このモデルでは、すべての投資家が合理的な効用最大化主体であり、ポートフォリオの期待リターンとリスクのみを基準として意思決定をおこなうと仮定しています。さらに、すべての投資家が同一の投資期間を持ち、すべての投資家が同一の市場情報にアクセスできることも前提とされています。

CAPMでは、非システマティックリスク(個別リスク)はポートフォリオの分散投資によって完全に排除できると考えられています。そのため、投資家が報酬を受け取るのはシステマティックリスクを引き受けた場合のみです。これは均衡状態において、すべての効率的ポートフォリオがリスク・リターン平面上で同一の直線上に位置しなければならないことを意味します。


CAPMを外国為替市場へ適用するための理論的基盤

古典的なCAPMの方程式は、資産の期待リターンを無リスク利子率とシステマティックリスクに対するリスクプレミアムによって表現します。通貨ペアの文脈では、この概念は特に重要な意味を持ちます。なぜなら、各通貨ペアは2つの国家経済の相対的な価値を表しており、それぞれに固有のマクロ経済リスクを内包しているためです。

MetaTrader 5プラットフォーム向けの本実装では、古典的なアプローチを修正し、ベータ係数を通貨ペアのヒストリカルボラティリティ(HV)に基づく動的なリスクプレミアムへ置き換えました。この決定は外国為替市場の特性に基づくものです。外国為替市場では、システマティックリスクは市場ポートフォリオとの相関を通じて現れるのではなく、為替レート変動の大きさ(ボラティリティ)として現れるためです。

//--- input parameters
input int      InpPeriod = 20;              // Calculation period
input double   InpRiskFreeRate = 0.05;      // Risk-free rate (annual)
input double   InpRiskPremium = 0.02;       // Currency pair risk premium
input bool     InpShowInfo = true;          // Show the info panel 

//--- indicator buffers
double ExpectedReturnBuffer[];
double RiskPremiumBuffer[];

実装における重要な特徴の一つは、リターンのばらつきを計算する際にロバストなアプローチを採用していることです。本実装では、分散推定を用いるとともに、データ数が不十分なケースを適切に処理しています。これは、市場の混乱時や流動性が低い状況においても計算の安定性を維持するうえで極めて重要です。

ボラティリティの年率換算には、年間の取引日数に相当する標準的な係数である√252を使用しています。このアプローチにより、ボラティリティ指標を、通常は年率ベースで提示される無リスク利子率と比較可能なスケールへ変換できます。

//--- annualize the indicators (252 trading days)
double annual_volatility = volatility * MathSqrt(252.0);
double annual_return = mean_return * 252.0;

//--- calculate the risk premium based on volatility
double dynamic_risk_premium = InpRiskPremium * (annual_volatility / 0.15);


インジケータ結果の経済的解釈

本インジケータで最も興味深い点は、異なる市場環境におけるその挙動です。経験的な観察によれば、期待リターンとリスクプレミアムは、市場が極端な状況にある局面で顕著に上昇する傾向があります。この現象は深い経済的背景を持ち、金融市場における価格形成の基本原理を反映しています。

ローカルな高値の形成過程では、為替レートの将来の変動に関する市場参加者の期待が再評価されるため、通貨ペアのボラティリティは自然に増加します。不確実性の増大は、投資家が当該資産を保有するために要求するリスクプレミアムの上昇につながります。同様の状況は市場の底値形成時にも観察されます。この場合、パニックや広範な投げ売りによって、将来の期待リターンが上昇する形となります。

void ShowInfoPanel(int current_bar)
{
    string info = "";
    info += "=== CAPM Forex Model ===\n";
    info += StringFormat("Risk Premium: %.2f%%\n", RiskPremiumBuffer[current_bar] * 100);
    info += StringFormat("Expected Return: %.2f%%\n", ExpectedReturnBuffer[current_bar] * 100);
    
    if(current_volatility > 0.20)
        info += "Status: HIGH RISK\n";
    else if(current_volatility > 0.10)
        info += "Status: MEDIUM RISK\n";
    else
        info += "Status: LOW RISK\n";
}

このインジケータの挙動は効率的市場の古典理論と整合しており、その理論によれば、より高いリスクはより高い期待リターンによって補償されるべきであるとされています。外国為替取引の文脈では、これはボラティリティが高まる期間が潜在的により有利な利益機会を提供する一方で、それに応じてより慎重なリスク管理アプローチを必要とすることを意味します。


技術的実装および計算面

本インジケータのアーキテクチャは2つの主要なデータバッファの使用に基づいており、それぞれが特定の分析機能を担っています。ExpectedReturnBufferは修正CAPM方程式に基づいて計算された期待リターン値を格納し、RiskPremiumBufferはボラティリティの変化に応じたリスクプレミアムの推移を反映します。

//--- plot Expected Return
#property indicator_label1  "Expected Return"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrBlue
#property indicator_style1  STYLE_SOLID
#property indicator_width1  2

//--- plot Risk Premium
#property indicator_label2  "Risk Premium"
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrRed
#property indicator_style2  STYLE_DASH
#property indicator_width2  1
CalculateCurrentVolatility関数は、過去データを扱うためのMetaTrader 5の組み込み関数を用いた、現在のボラティリティ計算アルゴリズムの最適化された実装です。CopyClose関数を使用することで、クォート配列全体を反復処理することなく、価格データへ効率的にアクセスすることができます。
double CalculateCurrentVolatility(int current_bar)
{
    if(current_bar < InpPeriod) 
        return 0.0;
    
    double returns_sum = 0.0;
    double returns_sq_sum = 0.0;
    int valid_count = 0;
    
    // Obtain close price data for calculation
    double prices[];
    int copied = CopyClose(Symbol(), PERIOD_CURRENT, current_bar - InpPeriod, InpPeriod + 1, prices);
    
    if(copied <= InpPeriod)
        return 0.0;
    
    // Calculate returns
    for(int j = 1; j < ArraySize(prices); j++)
    {
        if(prices[j-1] > 0)
        {
            double daily_return = (prices[j] - prices[j-1]) / prices[j-1];
            returns_sum += daily_return;
            returns_sq_sum += daily_return * daily_return;
            valid_count++;
        }
    }
    
    if(valid_count < 2) 
        return 0.0;
    
    double mean_return = returns_sum / valid_count;
    double variance = (returns_sq_sum / valid_count) - (mean_return * mean_return);
    double volatility = MathSqrt(MathMax(variance, 0.0));
    
    return volatility * MathSqrt(252.0); // annualized volatility
}


取引システムにおけるインジケータの実践的意義

本CAPMインジケータは、市場動向におけるリスクリターン比の変化を定量的に評価できるという特性により、高い実用価値を示しています。通貨ペアが重要なサポート水準やレジスタンス水準に近づくとき、本インジケータはボラティリティの上昇を記録し、それに応じて期待リターンの推定値を引き上げます。

この特性により、本インジケータは特に逆張り戦略を用いるトレーダーにとって有用となります。極値におけるリスクおよびリターン指標の上昇は、現在のトレンドに逆らったエントリーポイントを探すシグナルとなり得ます。なぜなら、ボラティリティの上昇はしばしば反転動きに先行するためです。

順張り戦略においては、本インジケータは現在の価格変動が妥当なリスク評価とどの程度一致しているかに関する情報を提供します。実際の値動きがインジケータによって算出された期待リターンを大幅に上回る場合、それは投機的バブルの形成、あるいはニュースに対する市場の過剰反応を示している可能性があります。


モデルの欠点および今後の発展方向

実用性にもかかわらず、外国為替市場向けに適応されたCAPMモデルには、結果の解釈において考慮すべきいくつかの概念的制約があります。リターンが正規分布に従うという基本的仮定は、特にマクロ経済ショックや政治的危機の期間において、実際の通貨市場の特性と必ずしも一致しません。

また本モデルはリターン系列における自己相関効果を考慮しておらず、これは高頻度データにおいては重要となる可能性があります。さらに、固定された無リスク利子率の使用は、特に金融政策が頻繁に変更される局面において、中央銀行金利の実際のダイナミクスを反映しない可能性があります。

インジケータ発展の有望な方向性としては、マクロ経済データとの統合による無リスク利子率の動的調整が挙げられます。これは中央銀行の現在の政策決定に応じて行われるものです。また、特定の通貨ペアのボラティリティレジームに応じてモデルパラメータを自動調整する適応型アルゴリズムの実装も注目されています。

機械学習要素を組み込むことで、市場環境の変化に適応し、期待リターン予測の精度を向上させることが可能になります。このアプローチは、特に現代のアルゴリズム取引システムにおいて、市場レジーム変化への適応速度が成功の重要な要因となる点で重要です。

開発されたCAPMインジケータは、古典的金融理論を外国為替取引の特性へ適用することに成功した試みです。リスク・リターン関係の変化を定量化できる能力により、常に変化する市場環境において合理的な取引判断を行うための有用なツールとなっています。


結論

本研究では、CAPMモデルの外国為替市場への適応がMetaTrader 5用インジケータとして効果的に実装可能であることが示されました。本ツールはボラティリティに基づいて通貨ペアの期待リターンを動的に推定し、リスク上昇局面と潜在的な収益機会を適切に識別することに成功しています。

本インジケータは、古典的モデルが適切に技術的実装されることで現代のトレードにおいても依然として有効であり、取引判断の質を向上させ得ることを示しています。


MetaQuotes Ltdによってロシア語から翻訳されました。
元の記事: https://www.mql5.com/ru/articles/18281

添付されたファイル |
CAPM_Model.mq5 (17.62 KB)
最後のコメント | ディスカッションに移動 (3)
David Wilson
David Wilson | 30 4月 2026 において 08:54
とても良い
lawrence kibet
lawrence kibet | 30 4月 2026 において 18:44
David Wilson #:
とても良い
悪くない
Joern Ulf Rechenburg
Joern Ulf Rechenburg | 11 6月 2026 において 15:27
とても興味深いですね 🧐
MQL5コミュニティOAuthを利用した外部アプリケーション連携 MQL5コミュニティOAuthを利用した外部アプリケーション連携
OAuth 2.0の認可コードフローを使用してAndroidアプリに[Sign in with MQL5]を追加する方法を学びます。このガイドでは、アプリ登録、エンドポイント、リダイレクトURI、カスタムタブ、ディープリンク処理、およびHTTPS経由で認可コードをアクセストークンに交換するPHPバックエンドについて説明します。実際のMQL5ユーザーを認証し、ランクやレピュテーションなどのプロファイルデータにアクセスできるようになります。
オプションを使わないオプション取引(第1回):基礎理論と原資産によるエミュレーション オプションを使わないオプション取引(第1回):基礎理論と原資産によるエミュレーション
MQL5プログラミング言語を用いて、原資産をベースにしたオプションのエミュレーション手法のバリエーションを解説します。選択したアプローチの長所と短所を、MOEX(モスクワ取引所)のFORTS先物市場およびBybit暗号資産取引所を例に、実際の取引所オプションと比較します。
エラー 146 (「トレードコンテキスト ビジー」) と、その対処方法 エラー 146 (「トレードコンテキスト ビジー」) と、その対処方法
この記事では、MT4において複数のEAの衝突をさける方法を扱います。ターミナルの操作、MQL4の基本的な使い方がわかる人にとって、役に立つでしょう。
カスタムインジケータワークショップ(第1回):MQL5でSupertrendインジケータを構築する カスタムインジケータワークショップ(第1回):MQL5でSupertrendインジケータを構築する
MetaTrader 5向けに、第一原理から非リペイントのSupertrendを構築します。本実装では、ボラティリティ計算にiATRハンドルとCopyBufferを使用し、SetIndexBufferによってバッファをバインドします。また、プロット設定はPlotIndexSetIntegerを用いて構成し、DRAWCOLORCANDLESと2本のラインバンドによる描画をおこないます。ロジックは確定足のみに基づいて更新され、EMPTY_VALUE を使用して非アクティブなバンドを抑制します。さらに、atrPeriodおよびatrMultiplierの入力パラメータを公開し、調整可能な設計としています。これにより、戦略およびシグナル用途のために内部バッファが明確にドキュメント化された、クリーンでEA対応のオーバーレイ型インジケータが得られます。