OANDA証券の「REST API」から取得した為替データをGoogle Spreadsheetに保存する方法
OANDA証券のREST API(以下、API)を使って取得した為替データをGoogle Spreadsheetに保存する方法について解説します。
Google Spreadsheetに保存することで、デバイスに影響することなく常に最新のデータを確認することができます。
Pythonを使って、APIを介してGoogle Spreadsheetにアクセスしてデータの更新を行います。
事前準備
OANDA証券のREST API
PythonでAPIを利用するためには、次の2点が必要です。
- 1.APIトークンの発行
- 2.oandapyV20のインストール
詳細についてはこちらの記事で解説しておりますのでご参照ください。
参考記事: Pythonで「REST API」を使用するまでの4つの手順について解説
Google API
PythonでSpreadsheetにアクセスするためにはGoogleのAPIが必要です。
必要な手順
API経由でSpreadsheetにアクセスするための手順をこちらに簡単にまとめます。
- 1.Google APIのコンソール画面から新規プロジェクトを作成する
- 2.「Google Drive API」と「Google Sheets API」を有効化する
- 3.認証情報を作成する
- 4.JSON形式の鍵ファイルを作成する
- 5.ダウンロードされたJSONファイル名を任意の名前に変更する
順番に解説していきます。
1.Google APIのコンソール画面から新規プロジェクトを作成する
まずはGoogle APIのコンソール画面より新規プロジェクトを作成します。
コンソール画面から「プロジェクトの選択」→「新しいプロジェクト」をクリックします。
プロジェクト名(ここでは「OANDA」としました)を入力して「作成」をクリックします。
2.「Google Drive API」と「Google Sheets API」を有効化する
次にAPIのサービスを有効化します。
ここで必要となるのは「Google Drive API」と「Google Sheets API」の2つです。
「APIとサービス」から「+APIとサービスの有効化」をクリックします。
ここから「Google Drive API」と「Google Sheets API」を検索して、それぞれ有効化します。
これで有効化されたAPIサービスが利用可能です。
3.認証情報を作成する
次に認証情報を作成します。
「APIとサービス」→「認証情報」→「認証情報を作成」→「サービスアカウント」から認証情報を登録します。
サービスアカウント名(ここでは「Oanda」としました)を入力して「作成して続行」をクリックします。
ロールで「編集者」を選択して「完了」をクリックします
これで認証情報が登録されました。
サービスアカウントにメールアドレスが付与されていることが確認できます。
4.JSON形式の鍵ファイルを作成する
次に鍵を作成します。
先ほど作成したサービスアカウントのメールアドレスをクリックし、「キー」→「鍵を追加」→「新しい鍵を作成」をクリックします。
キーのタイプはJSONを選択して「作成」をクリックします。
「作成」をクリックすると、JSONファイルが自動的にダウンロードされ、コンソール画面では新しい鍵が追加されていることが確認できます。
5.ダウンロードされたJSONファイル名を任意の名前に変更する
最後にダウンロードされたJSONファイル名を任意の名前に変更します。
ここではclient_secret.jsonというファイル名に変更しました。
これでGoogle APIの準備は完了です。
ライブラリのインストール
PythonでGoogleのAPIを扱うためにはライブラリをインポートする必要があります。
pipコマンドで次のライブラリをインストールしておきます。
pip install gspread oauth2client
pip install gspread-dataframe
pip install oauth2client
これで必要な準備が整いました。
OANDA証券のREST APIから取得したデータをGoogle Spreadsheetに保存する
ここからはOANDA証券のREST APIから為替データを取得し、APIを介してGoogle Spreadsheetに保存する方法について解説します。
OANDA証券 REST APIから為替データを取得する
まずはOANDA証券のREST APIから為替データを取得します。
ここでは、例として15分足のドル円ローソク足データを取得します。
import oandapyV20.endpoints.instruments as instruments
from oandapyV20 import API
import pandas as pd
# APIトークンの定義
account_id = "アカウントIDを設定してください"
access_token = "APIトークンを設定してください"
# パラメータの設定
params = {
"granularity": "M15", # ローソク足の間隔
"count": 100, # 開始日時
"price": "M", # B: Bid, A:Ask, M:Mid
}
instrument = "USD_JPY"
# API用のクラスを定義
client = API(access_token=access_token, environment="practice")
# 為替データを取得
r = instruments.InstrumentsCandles(instrument=instrument, params=params)
client.request(r)
# 為替データを格納するためのリストを定義
price_data = []
# データを1つずつ取り出してprice_dataに格納する
for row in r.response["candles"]:
# 辞書を定義
data = {}
# dataに格納する
data["datetime"] = row["time"]
data.update(row["mid"])
data["volume"] = row["volume"]
# price_dataに追加する
price_data.append(data)
# DataFrameに変換する
df = pd.DataFrame(price_data)
# カラム名の定義
columns = {
"o": "open",
"h": "high",
"l": "low",
"c": "close"
}
# カラム名の変更
df.rename(columns=columns, inplace=True)
# datetimeの型変換
datetime_format = "%Y-%m-%dT%H:%M:%S.000000000Z"
df["datetime"] = pd.to_datetime(df["datetime"], format=datetime_format)
df["datetime"] = df["datetime"]
# datatimeをindexに指定
df.set_index("datetime", inplace=True)
# 数値データをfloatに変換
df = df.astype(float)
df.head()
これで15分足のドル円のデータが取得できました。
countを100としているので、直近100個のデータが取得されています。
参考記事: Pythonで「REST API」から為替データを取得する方法について解説
Spreadsheetに為替データを保存する
次に取得した為替データをSpreadsheetに保存していきます。
Spreadsheetの用意
まずは使用するSpreadsheetを用意します。
ここではOandaというファイル名のSpreasheetを用意しました。
Spreasheetを作成したら、右上の「共有」からサービスアカウントを作成した際に付与されたメールアドレスを編集者として加えます。
これでAPIを介してSpreadsheetを編集することができます。
Google APIの動作確認
次にGoogle APIの動作確認を行います。
必要なライブラリを読み込み、Spreadsheetにアクセスします。
import gspread
from oauth2client.service_account import ServiceAccountCredentials
# use creds to create a client to interact with the Google Drive API
scope =['https://spreadsheets.google.com/feeds', 'https://www.googleapis.com/auth/drive']
creds = ServiceAccountCredentials.from_json_keyfile_name('client_secret.json', scope)
client = gspread.authorize(creds)
# Find a workbook by name and open the first sheet
# Make sure you use the right name here.
sheet = client.open("Oanda").sheet1
これで先ほど作成したOandaという名前のSpreasheetにアクセスすることができます。
scopeで利用するサービスを指定することができます。
ServiceAccountCredentials.from_json_keyfile_nameで認証情報を読み込みます。
gspread.authorizeで読み込んだ認証情報を指定すればSpreadsheetにアクセスできます。
Spreasheetにアクセスするためには、client.openでファイル名を指定して、次にシート名を指定します。
これでsheetにはOandaというSpreadsheetのSheet1が読み込まれています。
試しにA1セルに文字列を入力してみます。
sheet.update_cell(col=1, row=1, value="test value")
sheet.update_cellで行列の番号と入力する値を指定します。
Spreadsheetが更新されていることが確認できます。
DataFrameをSpreadsheetに書き込む
次に、先ほど用意した為替データをSpreasheetに書き込みます。
DataFrameを書き込む際には、gspread-dataframeというライブラリを利用すると便利です。
次のコードでは、先ほど用意した為替データをSpreadsheetに書き込んでいます。
import gspread_dataframe
gspread_dataframe.set_with_dataframe(sheet, df.reset_index())
返り値はありません。
Spreadsheetを見ると、DataFrameが反映されていることが確認できます。
これで、OandaのREST APIから取得した為替データをSpreadsheetに保存することができました。
Spreadsheetのデータを更新する
次にSpreadsheetのデータを更新する方法について解説します。
データの更新がある際には、Spreadsheetのデータも書き換える必要があります。
Spreadsheetのデータを更新する方法としては、次の2通りがあります。
- 1.最後の列にデータを追加する
- 2.元データを削除して、新たにデータを書き換える
それぞれ解説していきます。
1.最後後の列にデータを追加する
まずは最後の列にデータを追加する方法です。
これには、sheet.append_rowを使います。
引数に更新したいデータをリスト形式で指定します。
自動的に最後列を検出してデータを加えてくれます。
sheet.append_row(values=["test1", "test2", "test3", "test4", "test5", "test6"])
Spreadsheetの最後の行を見ると、データが更新されていることが確認できます。
為替データを更新する際には、ローソク足の間隔に合わせて最新のデータを取得して、Spreadsheetに列を追加していけば、常に最新のデータを保存しておくことができます。
例として、dfの最後の列を追加してみます。
row = [str(df.iloc[-1].name)] + list(df.iloc[-1].values)
sheet.append_row(values=row)
timestamp型のデータは、Jsonに変換できずエラーが発生します。
これを避けるために、timestampをstrに変換してからリスト化して引き渡しています。
rowのデータはこのように、strに変換された時刻データと価格データおよび出来高が格納されています。
Spreadsheetを確認すると、最後列にデータが追加されていることが確認できます。
2.元データを削除して、新たにデータを書き換える
2つ目の方法として、元データを削除して、新たにデータを書き換える方法をご紹介します。
この場合、更新するデータのサイズが異なると更新後のデータに不具合が生じる場合があります。
特に新規データが元データよりもデータサイズが小さくなる場合は、本データの一部が残る形になるため、最初に元データを削除する作業を加えることが重要です。
import gspread_dataframe
sheet.clear()
gspread_dataframe.set_with_dataframe(sheet, df.reset_index())
データを削除するためには、sheet.clear()を使います。
これでSpreadsheetのデータが全て削除されます。
その後にgspread_dataframe.set_with_dataframeで新しいDataFrameを更新すれば、不具合なくデータを書き換えることができます。
Spreadsheetでローソク足チャートを描く
最後に、Spreadsheetでローソク足チャートを描く方法について解説します。
A~F列を選択して、「挿入」→「グラフ」をクリックします。
作成されたグラフをダブルクリックして「グラフの種類」→「ローソク足チャート」を選択します。
次に列を指定します。
デフォルトではここの設定が異なるので、手動で設定する必要があります。
最後に「カスタマイズ」→「縦軸」から最小値と最大値を適宜設定します。
これでローソク足チャートが完成します。
Spreadsheetに常に最新のデータを保存しておけば、PCやスマートフォンなど、デバイスに影響されることなく、インターネットさえあればどこからでもデータを確認することができます。
本記事の執筆者:TAT
本記事の執筆者:TAT | 経歴 |
---|---|
2016年大学院卒業後、外資系IT企業に入社。 その後は金融情報→不動産テック→アドテク企業で、Pythonを用いたプロセスオートメーション、ダッシュボード開発、データ分析、AI開発などの業務に従事。 プログラミングや株式投資に関する情報を発信する「気ままなブログ」を運営中。 |
本ホームページに掲載されている事項は、投資判断の参考となる情報の提供を目的としたものであり、投資の勧誘を目的としたものではありません。投資方針、投資タイミング等は、ご自身の責任において判断してください。本サービスの情報に基づいて行った取引のいかなる損失についても、当社は一切の責を負いかねますのでご了承ください。また、当社は、当該情報の正確性および完全性を保証または約束するものでなく、今後、予告なしに内容を変更または廃止する場合があります。なお、当該情報の欠落・誤謬等につきましてもその責を負いかねますのでご了承ください。