見出し画像

ゆる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));
SMA

チャートを見ながら追うようなトレードではないためか、書籍内のグラフはほぼ線グラフでした。
ということなので、せっかくなので、ローソクチャートのバージョンも作ってみました。
追加で 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))
ローソクチャートとSMA


いつもありがとうございます! いただいたサポートは開発費(サーバー運用費)などに使わせていただきます!