ホーム » FX自動売買基礎と応用 » 【MT5 API 応用編③】FXのための相関分析

【MT5 API 応用編③】FXのための相関分析


この記事では、MT5 API 応用編③として、「相関」にはどのような意味があり、どう計算されるのかをまとめています。

相関は、FXトレードのリスク管理や戦略の開発にも応用できるので、ぜひ押さえておきましょう。

相関とは

【MT5 API 応用編③】FXのための相関分析_01

この散布図は、とある学生の「テストの点数」と「勉強時間」の関係性を示しています。

データにばらつきがありますが、全体としては右上がりに分布していることが確認できます。

この傾向は「たくさん勉強した生徒ほど、高い点数を取っている」ということを示唆しています。

この例では「テストの点数」と「勉強時間」を扱いましたが、同様に2つのデータが連動する関係性を相関関係といいます。

「勉強時間が長いとテストの点数が高くなる」というような、片方のデータが大きくなると、もう一方のデータも大きくなる傾向にあることを正の相関といい、逆に片方のデータが大きくなると、もう一方のデータは小さくなる傾向にあることを負の相関(または逆相関)といいます。

相関と因果

相関は「2つのデータが一緒に動きやすい度合い」を表すものであり、片方がもう片方の原因であること(因果関係)を示すものではありません。

「テストの点数」と「勉強時間」には相関があり、「勉強をたくさんしたから点数が高くなった」という因果関係がある可能性も考えられます。

一方で、「アイスの売り上げ数」と「水難事故件数」に相関が見られたとしても、それはどちらも気温の上昇によって増えやすいためであり、両者の間に直接の因果関係があるとは考えにくいでしょう。

また、金融市場では、共通の要因に反応して一時的に相関が生まれることもあります。

特定の期間だけ発生する相関関係という可能性に注意し、期間を変えても同じ傾向があるかを確認することが重要です。

リスク分散のための相関分析

金融市場ではさまざまな場面で相関関係を見つけることができ、投資・トレードの戦略に利用されています。

一般的に投資家やトレーダーは、保有している株などの資産や運用しているトレード戦略を複数組み合わせてポートフォリオを構築します。

このとき、自身の保有する資産や戦略のリターンの相関がなるべく低くなるような組み合わせを調査して、ポートフォリオを考えます。

リターンの相関が低いもの同士は、「どこかで損失が出ても、別のところで利益が出せる」というように損失を補い合う関係となり、ポートフォリオ全体のリスクを下げる効果が期待できます。

つまり、リスクを分散させるために相関関係を分析するわけです。

相関関係を利用した戦略

トレード戦略の中には、金融市場に存在する相関関係を利用したものも多くあります。

例えば、豪ドル/米ドル(AUDUSD)を使って逆張り戦略を作ろうと考えるとします。

RSIなどのインジケーターは、現在AUDUSDが買われ過ぎなのか売られ過ぎなのかを判定するための指標として使うことができますが、これは現在の値動きを過去の値動きと比較した相対的な判定となります。

ここで視点を変えて、比較対象をAUDUSDと正の相関があるNZドル/米ドル(NZDUSD)の現在の値動きに置き換えることもできます。

つまり、AUDUSDが買われ過ぎなのか売られ過ぎなのかをNZDUSDとの相対価格で判定するということです。

相関関係であれば必ず有効になるわけではないですが、これは相関を利用した戦略の一例といえます。

相関係数

相関関係を数値化する手段としては、ピアソンの相関係数やスピアマンの相関係数が代表的です。

ここでは、特によく使われるピアソンの相関係数(以下、相関係数)について解説します。

相関係数は+1~-1の範囲の数値となり、

  • ●+1に近い→正の相関
  • ●±0に近い→無相関、または相関が弱い
  • ●-1に近い→負の相関

という見方をします。

【MT5 API 応用編③】FXのための相関分析_02

相関係数が+1のときは、2つの変数が完全に連動していることを意味しており、散布図にすると一直線の右肩上がりになります。

逆に、相関係数が-1のときは、完全な逆連動を意味し、散布図では一直線の右肩下がりになります。

0に近づくほど、ばらつきが増え連動の度合いは弱くなり、0から離れるほど連動の度合いが強くなります。

このように相関係数は連動の強さを+1~-1で判定しています。

ピアソン相関係数の計算方法

それでは、相関係数が具体的にどのように計算されるかを見ていきましょう。

これはxとyの2つの変数の相関係数を求める計算式です。

実際には「AUDUSDのリターン」と「NZDUSDのリターン」というような関係性を調べたい対象のデータを当てはめます。

【MT5 API 応用編③】FXのための相関分析_03

計算式は大きく

  • ●xとyの共分散
  • ●xの標準偏差
  • ●yの標準偏差

に分かれます。

共分散は、2つのデータが「同じ方向にズレるか」を数値化したものです。

それぞれのデータについて平均からの距離を計算し、その値同士を掛け合わせます。

【MT5 API 応用編③】FXのための相関分析_04

これにより

  • ●同じ方向にズレている→プラス
  • ●違う方向にズレている→マイナス

という計算結果が得られます。

全てのペアの掛け算が終わったら、結果を全部足して平均したものが共分散になります。

  • ●「共分散 > 0」→同じ方向に動く傾向がある
  • ●「共分散 = 0」→関係なく動いている
  • ●「共分散 < 0」→逆の方向に動く傾向がある

共分散とは、「平均より上か下か」が一致しているかどうかのスコアとも考えることができます。

この共分散を、2つのデータの標準偏差の積で割ったものが相関係数です。

共分散の絶対値の最大は、2つのデータの標準偏差の積と同じ値になります。

2つのデータの標準偏差を相関係数の式の分母にすることで、+1~-1に収まる値に調整しているわけです。

市場データの相関係数

ここからは、Pythonで実際の市場データを対象に相関係数を計算していきましょう。

【MT5 API 応用編③】FXのための相関分析_05

このように、通貨ペアのリターンを格納したデータフレームが準備されている前提で、コードを作成していきます。


import pandas as pd

# 相関係数を計算
corr = returns["EURUSD"].corr(returns["GBPUSD"])

pandasには相関係数のメソッドが用意されているので、このコードのように簡単に計算できます。

では次に、散布図を作成し、そのタイトルに計算した相関係数を出力してみます。


import pandas as pd
import matplotlib.pyplot as plt

# 相関係数
corr = returns["EURUSD"].corr(returns["GBPUSD"])

# 散布図
plt.scatter(returns["EURUSD"], returns["GBPUSD"], alpha=0.6)
plt.title(f"Correlation = {corr:.3f}")
plt.xlabel("EURUSD Return")
plt.ylabel("GBPUSD Return")
plt.show()

【MT5 API 応用編③】FXのための相関分析_06

ユーロ/米ドル(EURUSD)とポンド/米ドル(GBPUSD)のリターンには正の相関がある、ということがグラフの形状からも読み取れます。

相関係数は0.783となっており、+1に近い数値であるため、強めの正の相関関係にあるといえます。

このような方法で、2つの変数に相関関係があるのかを調査することができます。

リターンを使う理由

FXなどの金融市場データでは、価格そのものではなくリターン(もしくは対数リターン)で相関を見るのが基本となります。

価格は水準が変化し続けるものであるのに対して、リターンは0を基準に何%動くかを示すものであるため、「あの通貨ペアとこの通貨ペアの変動の相関関係」が知りたいときはリターンを用いることが多いです。

また、価格そのものを使うと、本当は相関関係が弱いのに見かけ上は連動しているように見える「見せかけの相関」に遭遇することがあります。

【MT5 API 応用編③】FXのための相関分析_07

この例では、米ドル/カナダドル(USDCAD)とユーロ/ポンド(EURGBP)の2つの通貨ペアで「リターンを使った散布図」と「価格を使った散布図」を並べて表示しています。

米ドルとカナダドルのペアと、欧州通貨であるユーロとポンドのペアでは、通貨の性質上、相関関係は発生しないように思われますが、価格を使ったときだけ負の相関があるかのような結果が出てしまっています。

分析の目的によっては、あえて価格そのものを使う場合があるかもしれませんが、どのデータを用いて分析するかは、そのデータの意味を考慮して選ぶことが重要です。

相関行列の作成

調査したいデータがEURUSDとGBPUSDのように2つの変数だけであれば、単純な相関係数を計算したり散布図を作成したりする方法で十分ですが、多くのデータを対象にする場合、このやり方は効率的とはいえません。

そこで複数のデータを対象に一括で相関関係を可視化するための方法を考えていきます。

【MT5 API 応用編③】FXのための相関分析_08

このように複数の変数(この例では11種の通貨ペアのリターン)を格納したデータフレーム「returns」があるとします。


import pandas as pd

corr_matrix = returns.corr()

returnsに複数のデータが含まれている場合でも、同様に「corr()」メソッドを使うことで相関行列を作成できます。

【MT5 API 応用編③】FXのための相関分析_09

計算結果は、このように複数のデータ同士の「相関係数」を一覧にした表(データフレーム)として出力されます。

全ての組み合わせの相関係数を総当たりで計算しているので、各数値を細かく見れば「どの組み合わせの相関が高いのか、低いのか」といった情報を得ることができます。

なお、豪ドル/円(AUDJPY)同士の組み合わせのように全く同じデータの比較は「完全に連動している」状態を示すため、相関係数は必ず1となり、相関行列にも反映されます。

ヒートマップで可視化する

相関行列を作成したとき、それを可視化する場合はヒートマップがよく用いられます。

各データのペアの相関係数を並べただけの相関行列を、色を付けて表示することで視覚的に認識しやすくなります。

実際のヒートマップを見て、その効果を確認してみましょう。


import seaborn as sns

plt.figure(figsize=(10, 8))
sns.heatmap(
    corr_matrix,                   # 描画するデータ(相関行列)
    annot=True,                    # 各セルの中に数値を表示する
    fmt=".3f",                     # 表示する数値の書式(小数点以下3桁)
    vmin=-1,                       # カラーマップの最小値(相関係数の下限)
    vmax=1,                        # カラーマップの最大値(相関係数の上限)
    cmap="coolwarm",               # 色の種類(負の相関~正の相関を色で表現)
    cbar_kws={"label": "Correlation"}  # カラーバーにCorrelationと表記
)

plt.title("FX Returns Correlation Matrix")
plt.tight_layout()
plt.show()

【MT5 API 応用編③】FXのための相関分析_10

相関係数が+1に近いほど赤く、-1に近いほど青くなるようなヒートマップを作成しています。

情報量は相関行列と同じですが、全体の傾向を視覚的に把握しやすいのはヒートマップとして可視化した方になります。

【MT5 API 応用編】

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

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

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

EA運用の注意点

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


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

この記事をシェアする