ホーム » FX自動売買基礎と応用 » 【MT5 API入門⑪】Alpha Vantage APIを用いた他市場データの取得

【MT5 API入門⑪】Alpha Vantage APIを用いた他市場データの取得


今回の記事では、FXトレードに利用できる「FX以外の市場データ」の取得方法を解説します。

FXの取引対象は、2国間の通貨を組み合わせた通貨ペアです。

国の通貨の価値は、その国の経済や金融政策、貿易など、複数の要因によって大きく左右されます。

そのため、FXの分析やシステムトレードでは、FX市場のデータに限らずさまざまなデータを収集し、「利用できるものは何でも使う」という意気込みで取り組むと、良い結果につながる可能性があります。

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

米国市場のETF

ETF(上場投資信託:Exchange Traded Fund)は、投資家から集めた資金をもとに「決められた方針」に従って運用される金融商品であり、株と同じように市場が開いている時間帯では自由なタイミングで売買することが可能です。

特に米国市場(ニューヨーク証券取引所、ナスダック証券取引所)に上場しているETFは非常に種類が豊富で、分析に使える過去データが入手できます。

FX分析のためのETF

ETFはそれ自体に投資することが本来の目的ですが、さまざまな運用方針に基づくETFの価格変動の推移は、多くの市場の状況を調査する上での情報源にもなり得ます。

例えば、米ドル/円と米国債券にどのような関係性があるのかを知りたいときは、「米ドル/円の過去データ」と「米国債券に連動するETFの過去データ」の2つを比較して分析することができます。

他にも、市場参加者が景気に対して悲観的に反応する(リスクオフ)という状況をシグナルにした戦略を構築したいと考えた際には、VIXに連動するETFを利用することも可能です。

具体的にどのようなETFがあるのか、ここではFXトレードにも利用できそうなETFをいくつか例として表にまとめています。

MT5API_11_01

Alpha Vantage API

Alpha Vantageとは、株式・ETF・為替・暗号資産などの金融データをAPI経由で取得できるサービスです。

MT5 APIを使っても金融データは取得可能ですが、種類はMT5に接続しているブローカーの取り扱い銘柄に限られます。

Alpha VantageのようなサービスからMT5だけでは入手できない情報を取得することで、より高度な戦略開発に活かしていくことを目指します。

Alpha Vantageを利用するために、まずはAPIキーを作成する必要があります。

以下のURLから、無料プランのAPIキーを取得することが可能です。
https://www.alphavantage.co/support/#api-key

Alpha Vantageには無料プランといくつかの有料プランが用意されています。

1分間で利用できるAPIリクエストの制限を緩和させることや、取得できるデータの規模と種類を増やすことが可能ですが、多くの機能が無料枠で利用できるため、最初は無料プランで試すことを推奨します。

また、1分間で利用できるAPIリクエストの制限があることもあって、APIキーは他者に知られないように管理する必要があります。

APIキーを安全に管理する方法として、過去の記事「【MT5 API入門⑦】FREDから経済データを取得する」で「.envファイル」を紹介しています。

本記事内のPythonコードは、「.envファイル」を用いてAlpha VantageのAPIキーを管理することを前提に記載しています。

データ取得

データを取得する際は、Alpha Vantageの公式ドキュメント(https://www.alphavantage.co/documentation/ )に従ってコードを作成していきます。

米国株式市場のデータを取得

この記事で取得するのは、SPYというS&P500に連動するETFとします。

S&P500は米国株全体の動きを反映した代表的な指数で、それに連動するSPYも米国株を調査するのに適したETFといえます。

米国株はドルの需給にも影響を与える可能性があるため、FXトレーダーにとっても意味のあるデータと考えられます。


import os
import requests
import pandas as pd
from dotenv import load_dotenv

# --- .envファイルからAPIキーを取得 ---
load_dotenv()
ALPHAVANTAGE_API_KEY = os.getenv("ALPHAVANTAGE_API_KEY")

# --- API ---
url = "https://www.alphavantage.co/query"
params = {
    "function": "ETF_PROFILE",
    "symbol": "SPY",
    "apikey": ALPHAVANTAGE_API_KEY
}

response = requests.get(url, params=params)
profile_data = response.json()

インポートした「requests」を使ってAlpha Vantageで指定されているURLにアクセスし、情報を取得しています。

「params」には以下の情報を書き込んでいます。

  • ● 「”function”: “ETF_PROFILE”」:ETFのプロファイルを要求する
  • ● 「”symbol”: “SPY”」:銘柄はSPYを指定
  • ● 「”apikey”: ALPHAVANTAGE_API_KEY」:APIキーを入力

この3つを入力すると、任意の情報(ここではSPYのプロファイル)を要求することが可能です。

Alpha VantageからはJSON形式でデータが返ってくるので、「profile_data = response.json()」という処理によりPythonで扱いやすい形式に変換しています。

MT5API_11_02

「profile_data」はこのようなデータとなっています(長いデータなので一部のみ表示しています)。

  • 1. ETFのプロファイル(基本情報)
  • 2. どのセクターにどういった割合で投資しているかを示すセクター情報
  • 3. 保有銘柄の情報

SPYの場合だと、この3つの情報が返ってきます。

ETFのプロファイル

FXの分析が目的であれば重要というわけではないかもしれないですが、ETFのプロファイルとして取得した各項目の意味をここにまとめます。

1. 純資産額

「net_assets」で示された項目はETFの純資産額を示します。
これは、ETFに投資されている資金の総額であり、どれくらい規模の大きなETFなのかを表しています。

2. 信託報酬

「net_expense_ratio」は信託報酬を示し、ETFに投資する際の運用コストのようなイメージです。

3. 売買回転率

`portfolio_turnover`は年間でETF内のポートフォリオがどれだけ入れ替わったかを示しています。

4. 配当利回り

「dividend_yield」は配当利回りを示します。
ETFには株のように配当があるので、その大きさをこの数値で調べます。

5. 設定日

「inception_date」はETFが設定された日を示します。
そのため、この日付まで過去データが存在することになります。

6. レバレッジETF

「leveraged」はレバレッジETFかどうかを示します。
ETFにはレバレッジ型ETFが存在し、値動き自体にレバレッジがかかっているものがあります。

ETFのポートフォリオ

「profile_data」に含まれるセクター情報には割合が数値として含まれるので、グラフ化することが可能です。


import pandas as pd
import matplotlib.pyplot as plt

# --- sectors を DataFrame に変換 ---
df_sectors = pd.DataFrame(profile_data["sectors"])

# --- weight を float に変換 ---
df_sectors["weight"] = df_sectors["weight"].astype(float)

plt.figure(figsize=(8, 8))
plt.pie(
    df_sectors["weight"],
    labels=df_sectors["sector"],
    autopct="%.1f%%",
    startangle=90,
    counterclock=False
)

plt.title("SPY Sector Allocation")
plt.tight_layout()
plt.show()

MT5API_11_03

SPYがテクノロジー業界の株に最も多く投資していて、その他の業種にも広く割り当てていることがわかります。

このようにETFがどこに投資しているかを知ることで、ETF自体の特徴や構成を把握できます。

過去データの取得

それでは過去データを取得してチャートを表示する操作を行っていきましょう。


import os
import requests
import pandas as pd
from dotenv import load_dotenv

# --- .env 読み込み ---
load_dotenv()
ALPHAVANTAGE_API_KEY = os.getenv("ALPHAVANTAGE_API_KEY")

url = "https://www.alphavantage.co/query"
params = {
    "function": "TIME_SERIES_DAILY",
    "symbol": "SPY",
    "outputsize": "compact",
    "apikey": ALPHAVANTAGE_API_KEY
}

response = requests.get(url, params=params)
data = response.json()

先ほどと同様にAPIを使ってデータを取得していますが、「params」の内容を変更しています。

  • ● 「”function”: “TIME_SERIES_DAILY”」:日足の過去データを指定
  • ● 「”symbol”: “SPY”」:銘柄はSPYを指定
  • ● 「”outputsize”: “compact”」:データの規模を小規模に
  • ● 「”apikey”: ALPHAVANTAGE_API_KEY」:APIキーを入力

先ほどと同様にデータはJSON形式なので、扱いやすいようにpandasデータフレームに変換します。


df = pd.DataFrame(data["Time Series (Daily)"]).T

df = df.rename(columns={
    "1. open": "open",
    "2. high": "high",
    "3. low": "low",
    "4. close": "close",
    "5. volume": "volume"
})

df = df.astype({
    "open": float,
    "high": float,
    "low": float,
    "close": float,
    "volume": int
})

df.index = pd.to_datetime(df.index)
df = df.sort_index()

df.head()

MT5API_11_04

このような変換操作で、Pythonで扱いやすいOHLCV(4本値+出来高)の形式に変更することができます。

最後にローソク足チャートとして表示します。


import mplfinance as mpf

mpf.plot(
    df,
    type='candle', # ローソク足
    style='yahoo', # Yahoo Finance風の描画スタイル
    title='SPY', # タイトル
    volume=True, # Volumeの表示
    figsize=(12, 8) # サイズ
)

MT5API_11_05

ローソク足チャートを表示する方法は、過去の記事「【MT5 API入門⑤】Pythonでローソク足チャートを表示する方法」で解説しています。

取得できるデータの規模(どれくらい過去に遡って取得できるか)やデータの種類は、Alpha Vantageのプランによって異なります。

無料プランでコードの実行が失敗する場合は、取得したデータに「現在のプランでは対応していない」というようなメッセージが入るので、うまく動作しない場合は公式ドキュメントを確認する必要があります。

【MT5 API入門】

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

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

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

EA運用の注意点

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


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

この記事をシェアする