【MT5 API入門⑧】金融データ分析の基礎:リターンと対数
この記事では、金融データ分析におけるリターンと対数の役割について解説します。
トレーダーにとっての金融データ分析の目的として最もわかりやすいのは、「株価やFXレートに隠れたデータの偏り(エッジ)を見つけ、プラスの期待値の戦略を作成する」ということではないでしょうか。
株価やFXレートの変化の仕方に、ノイズとは違う、繰り返し再現される傾向やパターンを分析して発見することが、その後のシステムトレード戦略の構築につながっていきます。
そのような目的の前に、まずは分析する対象を明らかにするため「価格の変化」を数値として表現する必要があります。
今回の記事では、価格の変化をデータとして扱うための基礎知識であるリターンや対数について、Pythonでの計算方法を交えて説明します。
※この記事はAPIトレードに関する知識を提供することを目的としています。技術的なお問い合わせは受け付けておりません。技術的な課題はお客様ご自身で解決をお願いいたします。
リターンの活用イメージ
実践的な金融データ分析では、あらゆるシーンでリターンが活用されています。
詳しい分析方法は、今後の記事で少しずつ解説していく予定ですが、ここでは活用シーンの一例を紹介しておきます。
| 活用例 | 概要 |
|---|---|
| カレンダーアノマリー分析 | 曜日・月・時間帯などでリターンをグループ化し、平均的な偏りを調べる |
| 市場間の相関分析 | 異なる市場(例:ユーロ/米ドル×英ポンド/米ドル)のリターン同士の相関を算出する |
| 統計的アービトラージ | 相関の高いペアから平均回帰性を見つけてトレードする戦略 |
| リターン予測モデル | 多変数からリターンを予測する機械学習モデルを構築する |
価格差
「価格の変化」の数値表現として最も単純なのが、価格差(終値の差分)です。
1つ前の終値が150.000円で、直近の終値が150.250円であった場合、価格差は+0.250円となります。
このような流れで、全ての終値について価格差を連続して計算した差分系列を求めます。
import pandas as pd
rates_df["diff"] = rates_df["close"].diff()

このコードでは、4本値が含まれるデータフレーム「rates_df」に「diff」という名前で差分系列を追加しています。
リターン(変化率収益率)
実際のデータ分析では、価格差より変化率を使用するシーンが多くあります。
価格差が「1つ前の終値との差」であるのに対して、変化率は「1つ前の終値に対する増減率」です。
1つ前の終値が150.000円で、直近の終値が151.500円であった場合、変化率は+1%となります。
変化率は、多くの場面でリターンとも呼ばれます。
株価の変化率(収益率)であれば株価リターン、FXであればFXリターン、または個別の通貨ペアを指して米ドル/円リターンなどと言われることもあります。
rates_df["return"] = rates_df["close"].pct_change()

先ほどのデータフレームに「return」という名称でリターンを追加しています。
リターンの計算は、さまざまな分析で非常によく利用するため、ぜひ覚えておきましょう。
価格差よりもリターンが用いられる理由
過去15年間の米ドル/円で相場分析を行うシーンを考えてみましょう。
米ドル/円は高いときで160円近辺を推移していた時期もあれば、低いときには80円を下回っていたときもあり、約2倍の差があったことになります。
仮に1日の変化の大きさが1%程度だったと仮定すると、160円の時期と80円の時期では同じ1%の変化でも価格にすると2倍の差が発生します。
160円の1%は1.60円で、80円の1%は0.80円となり、過去15年間の米ドル/円の相場分析では、160円だった時期の影響を大きく受けたアンフェアな分析となってしまう恐れがあります。

わかりやすい例として、2000年以降のS&P500の価格変動を見ていきましょう。
この図では、赤枠で囲った価格水準が高い箇所では大きな価格変動を起こしているのに対して、緑枠の価格水準が低い箇所は価格変動が小さくなっていることがわかります。
価格差を使って分析すると、この場合は赤枠の期間の影響を強く受けた分析となってしまいます。
厳密な表現ではないですが、長期にわたり大きな価格変動があった過去相場をできるだけ公平な視点で分析するために、価格差よりもリターンが好まれることが多いと考えられます。
対数リターン
リターンと同様に、金融データ分析でよく用いられるのが対数リターンです。
対数リターンは先ほど解説した通常のリターンとは異なりますが、近似値になることが知られています。
そのため、通常のリターンと同様に「価格の変化」を示す指標として利用できます。

この式は、前日の終値から当日の終値までどのくらい価格変化があったかを示す、リターンと対数リターンの計算式です。
import numpy as np
rates_df["log_close"] = np.log(rates_df["close"])
rates_df["log_return"] = rates_df["log_close"].diff()

通常の終値の対数をとった列を「log_close」として作成し、log_closeの差分を「log_return」としています。
このlog_retrunが対数リターンとなります。
リターンを示す列「return」と「log_return」は完全に一致しているわけではないですが、近似値になっていることが見て取れます。
対数リターンのメリット
通常のリターンと対数リターンは近似値であり、同様に価格の変化を示すなら、わざわざ計算時に対数を使う対数リターンにはどのようなメリットがあるのでしょうか。

先ほど例に挙げた図と同じデータを使い、通常チャートと対数チャートを並べて比較します。
対数チャートとは、通常の価格データ(終値など)から対数をとったもので、Pythonの例でいうlog_closeにあたります。
通常のチャートでは、価格水準が高いと変動が大きく見え、低いと値動きが押しつぶされるという視覚的な扱いにくさがありますが、対数チャートではそのような不公平さが解消されていることがグラフの形状から観察できます。
ここで先ほどのPythonコードを振り返ると、対数リターンの計算は対数をとった終値の単純な差分を求めているだけです。
つまり、対数チャートの一点一点はその瞬間の変化率を近似していることになります。
昨日の値から一日分の対数リターンを足せば今日の値が計算できて、1週間前の値から1週分の対数リターンを引けば、2週前の値がわかるようなイメージです。
このような数値的な扱いやすさから、対数リターンはデータ分析に適していると考えることができます。
【MT5 API入門】
- ・【MT5 API入門①】MT5 APIとPythonを接続したシステムトレードの基礎知識
- ・【MT5 API入門②】PythonとMT5を接続する方法
- ・【MT5 API入門③】PythonでMT5からデータを取得する方法
- ・【MT5 API入門④】PythonからMT5の新規注文と決済注文を実行
- ・【MT5 API入門⑤】Pythonでローソク足チャートを表示する方法
- ・【MT5 API入門⑥】テクニカル指標を計算してチャートにインジケーターを表示する方法
- ・【MT5 API入門⑦】FREDから経済データを取得する
- ・【MT5 API入門⑧】金融データ分析の基礎:リターンと対数
本記事の執筆者:藍崎@システムトレーダー
| 本記事の執筆者:藍崎@システムトレーダー | 経歴 |
|---|---|
![]() |
個人投資家としてEA開発&システムトレード。 トレードに活かすためのデータサイエンス / 統計学 / 数理ファイナンス / 客観的なデータに基づくテクニカル分析 / 機械学習 / MQL5 / Python |
EA(自動売買)を学びたい方へオススメコンテンツ

OANDAではEA(自動売買)を稼働するプラットフォームMT4/MT5の基本的な使い方について、画像や動画付きで詳しく解説しています。MT4/MT5のインストールからEAの設定方法までを詳しく解説しているので、初心者の方でもスムーズにEA運用を始めることが可能です。またOANDAの口座をお持ちであれば、独自開発したオリジナルインジケーターを無料で利用することもできます。EA運用をお考えであれば、ぜひ口座開設をご検討ください。
本ホームページに掲載されている事項は、投資判断の参考となる情報の提供を目的としたものであり、投資の勧誘を目的としたものではありません。投資方針、投資タイミング等は、ご自身の責任において判断してください。本サービスの情報に基づいて行った取引のいかなる損失についても、当社は一切の責を負いかねますのでご了承ください。また、当社は、当該情報の正確性および完全性を保証または約束するものでなく、今後、予告なしに内容を変更または廃止する場合があります。なお、当該情報の欠落・誤謬等につきましてもその責を負いかねますのでご了承ください。
