PythonのBacktesting.pyでバックテストを実施したときのメモの巻
- 2020.08.26
- Python 使いかた備忘録
- Backtesting.py, Jupyter notebook, python
Backtesting.pyを使ったときの備忘録です。
テスト用データについて
テスト用データはOHLCV(’Open’, ‘High’, ‘Low’, ‘Close’, ‘Volume’)の形であることが必要です(’Volume’は無くても良い)。
なのでOHLCVになっていないデータの場合はpandasなどで整形してから使う必要があります。
なお、OHLCV以外のカラムがあっても問題ないみたい。
使用可能なインジケーターと設定例
Backtesting.pyをインストールしただけではインジケーターはSMA(Simple Moving Average;単純移動平均)しか使えない(たぶん)ので、
TA-LibというラッパーをインストールしてTA-Libにあるインジケーターを使用すれば良い、と。
MACD、EMA、RSI、ADX、ボリンジャーバンド、その他多くのインジケーターが使えるようになります。詳しくは公式サイトでご確認ください。
<設定例>
・EMA(Exponential Moving Average;指数平滑移動平均)
・ADX(Average Directional Movement Index;平均方向性指数)
#EMAの定義
def EMA_Backtesting(values, n):
"""
Return exponential moving average of 'values', at each
step taking into acount 'n' previous values.
"""
close = pd.Series(values)
return talib.EMA(close, timeperiod=n)
#ADXの定義
def adx(array, n):
gain = pd.DataFrame(array)
gain = gain.T
gain.columns = ['close', 'high', 'low']
gain['adx'] = talib.ADX(gain['high'], gain['low'], gain['close'], n)
return gain['adx']
#ストラテジーの設定
class myST(Strategy):
n = 10 #ADXの期間を設定
n1 = 4 #EMAの期間を設定
def init(self): #ストラテジーの事前処理
self.ema1 = self.I(EMA_Backtesting, self.data.Close, self.n1)#EMAをインジケーターとして追加
self.adx = self.I(adx, [self.data.Close, self.data.High, self.data.Low], self.n)#ADXをインジケーターとして追加
現在価格の確認
self.data.Close[-1] が現在価格を表します。(価格リストの一番後ろということですね)
オーダーサイズの設定
buyまたはsellのオーダーを出す際にsizeオプションでポジションサイズを設定できる、と。
<例>100ユニットの買いオーダーを出す場合
self.buy(size = 100)
sizeの数値を0から1までに設定すると資金に対するその割合をオーダーする(たぶん)。なので、デフォルト(size = 0.9999999999999998)だと資金(cash)が許す限り買い(売り)オーダーを出すことになる、と。
1以上の数字に設定すると任意のポジションサイズにできる、と。
Jupyter notebookで表示させたときに、Optimizeの結果で検討したパラメーターの数値が見切れるので別途確認する
見たいところが見えません。。。
<解決方法> ._strategyを見てやれば良い
<例>ストラテジーmySTにおいて、st_valとtp_valをoptimizeして、結果名をstatsとして実行した場合
print(stats._strategy)
myST(sl_val=0.0015,tp_val=0.0095)
これでパラメーターを確認できた。
取引内容一覧の表示
グラフだけだと細かく確認しづらい。。。
<解決方法> ._tradesを見てやれば良い。
<例>
output = bt.run()
のように結果名を’output’として実行していた場合、
display(output._trades)
これで取引内容を確認できた。
ちょっと広告です
https://business.xserver.ne.jp/
https://www.xdomain.ne.jp/
★LOLIPOP★
.tokyo
MuuMuu Domain!
環境
この記事の内容は
Python; 3.7.2
Backtesting; 0.2.1
TA-Lib; 0.4.18
pandas; 1.0.5
jupyter; 1.0.0
にて実施しました。
おしまい
このブログはエックスサーバー で運営しております。
WordPressを使うならロリポップ!
簡単インストール完備で楽々スタート!
世界にたった一つ、あなただけのドメインを登録しよう!
格安ドメイン取得サービス─ムームードメイン─