ゆるFX ~『Pythonからはじめるアルゴリズムトレード』を読む~
先月、オライリーから発売された『Pythonからはじめるアルゴリズムトレード』を読んでいます。
同じ著者の『Pythonによるファイナンス 第2版』ではAPIに関してはFXCMだけでしたが、こちらはOanda APIを使ったサンプルもありました。(しかし、Oandaを使うのはCFD取引だけでした。海外のOandaだとCFD取引もAPIでできるようですが、現状は日本のOandaではCFD取引はできません……)
著者の作成したoanda用のパッケージが使い易かったので、紹介しときます。
以下のようにして、データを取得します
import tpqoa
# 認証情報
oanda = tpqoa.tpqoa('pyalgo.cfg')
# 取得する通貨ペア
instrument = 'EUR_USD'
# データ開始終了
start = dt.datetime(2020, 3, 25)
stop = dt.datetime(2020, 3, 30)
# 時間単位
granularity = 'S5'
# 価格指定(売/買/仲値)
price = 'M'
# データ取得
data = oanda.get_history(instrument, start, stop, granularity, price)
data.info()
取得したデータはそのままpandasのデータフレームにしてくれます。またインデックスは時間になっています。
さらに、APIは1回5000リクエスト制限があるのですが、これを使うと、期間指定やインターバル指定で5000リクエスト以上必要な時に、自動で繰り返しリクエストしてデータフレームに収めてくれます。
使っていて気付いたデメリットとしては、直接、APIリクエストする場合は、bid, ask, 仲値をまとめて取得したいときに、BAM のように指定ができたのですが、このパッケージでは、いずれか1つずつしかリクエストできないようになっていました。
最後に、APIでデータ取得してSMAのグラフを書いてみます。
import tpqoa
import numpy as np
import datetime as dt
import pandas as pd
from pylab import mpl, plt
start = dt.datetime(2020, 4, 1)
stop = dt.datetime(2020, 5, 1)
granularity = 'H1'
price = 'M'
data = oanda.get_history(instrument, start, stop, granularity, price)
data['SMA1'] = data['c'].rolling(30).mean()
data['SMA2'] = data['c'].rolling(100).mean()
data[['c', 'SMA1', 'SMA2']].plot(figsize=(10, 6));
チャートを見ながら追うようなトレードではないためか、書籍内のグラフはほぼ線グラフでした。
ということなので、せっかくなので、ローソクチャートのバージョンも作ってみました。
追加で mplfinance というパッケージを読み込むとローソクチャートが描画できました。
import mplfinance as mpf
df = data.rename(columns = {'o': 'Open', 'h': 'High', 'l': 'Low', 'c': 'Close', 'volume': 'Volume'})
mpf.plot(df[:200], type='candle', mav=(30, 100), figratio=(12,4))
いつもありがとうございます! いただいたサポートは開発費(サーバー運用費)などに使わせていただきます!