ホーム » FX自動売買基礎と応用 » 【MT5 API入門⑩】金融データ分析におけるボラティリティの解説

【MT5 API入門⑩】金融データ分析におけるボラティリティの解説


価格変動の激しさを示すボラティリティは、リターンと同じように金融データ分析の基本で、非常に多くの分析で利用されています。

この記事では、ボラティリティについて「どう計算し、どう利用できるのか」を解説します。

※この記事はAPIトレードに関する知識を提供することを目的としています。
技術的なお問い合わせは受け付けておりません。技術的な課題はお客様ご自身で解決をお願いいたします。

ボラティリティとは

ボラティリティとは「価格変動の激しさ」や「リターンのばらつきの度合い」を示すものです。

金融の分野では古くから、「投資におけるリスクとは、リターンのばらつきである」と考えられてきました。

ボラティリティが高い銘柄への投資・トレードは、ハイリスクハイリターンになりやすいため、一般的には「リターンが高く、そのばらつき(リスク)が低い」投資・トレードが理想的とされています。

ボラティリティの活用例

株式投資には、ボラティリティの高い銘柄は枚数を減らし、ボラティリティの低い銘柄は枚数を増やしてポートフォリオ全体のバランスをとるリスクパリティというアプローチがあります。

FXのシステムトレードでも、複数の通貨ペアをトレードするときにボラティリティに応じてロット数の管理をすることで、リスクを偏らせないマネジメントを行えます。

また、リスクマネジメントの観点だけでなく戦略構築の活用例として、ボラティリティの変化をシグナルとするボラティリティブレイクアウト戦略が有名です。

レンジ相場からトレンド相場へ移行するタイミングでは、価格変動が急激に大きくなることがしばしばありますが、このような値動きをシステム的に検出するためにボラティリティが利用できます。

ボラティリティの変化を計測して、急激な拡大をシグナルとしてトレンド相場の初動からエントリーを狙うのがボラティリティブレイクアウト戦略です。

標準偏差

一般的にボラティリティとは「リターンのばらつき」を示すと解説しましたが、この「ばらつき」は標準偏差で表されることが多いです。

標準偏差は、データのばらつきを表す統計学の基本的な指標で、多くの分析で重要な役割を果たします。

では、標準偏差がどのように数値化されるのかを確認していきましょう。

下の図は、グレーの点で示したサンプルデータにどの程度のばらつきがあるかを可視化したものです。

MT5API_10_01

図の中央の青色の水平線は、サンプルデータの平均値を示しています。

平均値からサンプルデータの各点までの距離を赤色で描画しています。

ばらつきが大きなデータは、赤色の線の平均的な長さが長くなり、ばらつきが小さなデータは、赤色の線の平均的な長さが短くなります。

MT5API_10_02

MT5API_10_03

標準偏差とは、この赤線の全体的な長さを測ってばらつきを表現している指標といえます。

標準偏差の計算方法

MT5API_10_04

この計算式を手順として説明すると…

  • 1. 各データから平均値を引く
  • 2. 1の結果を2乗する
  • 3. 2の結果の総和を求める
  • 4. データの個数(n-1)で割る
  • 5. 最後に平方根を求める

このような計算方法で標準偏差を求めます。

各データから平均値を引くのは、先ほどの図でいうところの赤線の距離を求めたいからで、そのあと2乗しているのはデータが平均以上でも平均以下でも引き算の結果がマイナスにならないためです(距離を知りたいのでマイナスになってはいけない)。

2乗した後、総和を求めてからデータの個数で割るのは、平均値を求めるのと同じように、「各データと平均値との距離」の平均的な長さを知りたいからです。

最後に平方根を求めるのは、途中で2乗しているのでデータのスケールを元に戻すために行っています。

ただし、平方根がなくてもデータのばらつきは表現できているので、目的によっては(スケールを元に戻す必要がない場合は)そのまま使用することもあり、この場合は標準偏差ではなく分散と呼ばれます。

標準偏差は平方根がついている、分散は平方根がない、と覚えるとわかりやすいです。

ボラティリティの計算方法

ボラティリティはリターン(価格の変化率)の標準偏差のことを指します。

つまり、先ほど説明した標準偏差をリターンによって求めるだけの作業となります。


vol = df["returns"].std()

Pythonのpandasには標準偏差を求める機能が用意されており、あらかじめリターンをpandasのデータとして準備しておけば、このような簡単なコードで計算が可能です。

ボラティリティの年率換算

日足で計算した日次リターンのボラティリティと、月足で計算した月次リターンのボラティリティは、全く異なる数値となることがほとんどです。

これは、日足よりも月足のほうが一期間あたりの振れ幅が大きいのと同様に、「日次リターンの標準的なばらつき」よりも「月次リターンの標準的なばらつき」のほうが大きくなるためです。

しかし、同じ銘柄・同じ計算期間(例:過去3年分の米ドル/円)を対象としているにもかかわらず、時間軸が変わるだけでボラティリティが大きく異なる数値になるのは、直感に反すると感じる方もいるでしょう。

そこで、ボラティリティを同じ尺度で比較するための一般的な解決策として年率換算が用いられます。

MT5API_10_05

日次リターンで求めたボラティリティであれば、√252を掛けるだけで年率換算することができます。

252という数値は、年間の営業日数(相場が動く日数)を示しており、週次や月次の場合も、それに対応した数値に置き換えて計算します。

週次は年間52週あることを考えて√52を、月次は年間12か月あることを考え√12を掛けます。


import numpy as np

# 日足終値で計算したリターン(日次リターン)の場合
daily_vol = df["daily_returns"].std()
annual_vol_daily = daily_vol * np.sqrt(252)

# 週足終値で計算したリターン(週次リターン)の場合
weekly_vol = df["weekly_returns"].std()
annual_vol_weekly = weekly_vol * np.sqrt(52)

# 月足終値で計算したリターン(月次リターン)の場合
monthly_vol = df["monthly_returns"].std()
annual_vol_monthly = monthly_vol * np.sqrt(12)

Pythonでは、このようなコードで計算することができます。

リターンの標準偏差を求めるところはどれも同じですが、年率換算のときのルート内の数値を間違えないように注意が必要です。

ローリングボラティリティ

相場のボラティリティは変化し続けるものです。

どの銘柄にもボラティリティが高いときや低いときが存在し、常に変化し続けています。

このボラティリティの変化の様子をデータで表したものが、ローリングボラティリティです。

ローリングボラティリティの計算は、移動平均線などのテクニカル指標の計算方法と同様に、計算対象のデータを1つずつシフトしながら時系列データを作成します。


import numpy as np

df["rolling_vol_20d"] = (
    df["returns"]
    .rolling(window=20) # 20本分で計算
    .std()
    * np.sqrt(252) # 年率換算
)

このようなコードでローリングボラティリティを示す列をpandasデータフレームに追加することができます。

ここでは、計算対象を直近20本分、リターンの頻度を日次と想定した上で年率換算しています。

MT5API_10_06

グラフ化するとこのようなデータとなり、ボラティリティの変化の様子が可視化されます。

トレードでは、ボラティリティの変化に応じてロット数を調整しリスクマネジメントを行ったり、ボラティリティの変化をロジックに組み込んで戦略を構築したりすることができます。

【MT5 API入門】

本記事の執筆者:藍崎@システムトレーダー

               
本記事の執筆者:藍崎@システムトレーダー 経歴
藍崎@システムトレーダー個人投資家としてEA開発&システムトレード。
トレードに活かすためのデータサイエンス / 統計学 / 数理ファイナンス / 客観的なデータに基づくテクニカル分析 / 機械学習 / MQL5 / Python

EA(自動売買)を学びたい方へオススメコンテンツ

EA運用の注意点

OANDAではEA(自動売買)を稼働するプラットフォームMT4/MT5の基本的な使い方について、画像や動画付きで詳しく解説しています。MT4/MT5のインストールからEAの設定方法までを詳しく解説しているので、初心者の方でもスムーズにEA運用を始めることが可能です。またOANDAの口座をお持ちであれば、独自開発したオリジナルインジケーターを無料で利用することもできます。EA運用をお考えであれば、ぜひ口座開設をご検討ください。


本ホームページに掲載されている事項は、投資判断の参考となる情報の提供を目的としたものであり、投資の勧誘を目的としたものではありません。投資方針、投資タイミング等は、ご自身の責任において判断してください。本サービスの情報に基づいて行った取引のいかなる損失についても、当社は一切の責を負いかねますのでご了承ください。また、当社は、当該情報の正確性および完全性を保証または約束するものでなく、今後、予告なしに内容を変更または廃止する場合があります。なお、当該情報の欠落・誤謬等につきましてもその責を負いかねますのでご了承ください。

この記事をシェアする