#カスタムインジケーターのimport
いままでは説明のため同一のスクリプト内にカスタムインジケータークラスを書きました。しかしカスタムインジケータークラスだけを別のpyファイルに書いて、ストラテジーのスクリプトとは別々に使う方が便利です。
カスタムインジケーターのファイル名を仮に customindicator.py とすると、ストラテジーの冒頭部分に
import customindicator as cind
(任意のわかりやすい名前)
と書いてストラテジークラスのinitメソッド内には
self.myind1 = cind.MyStochastics1(self.data)
と書きます。
customindicator.py はストラテジーのスクリプトと同じディレクトリに置きます。Jupyternotebookを使っていてデフォルト設定のままならば C:\Users\ユーザー名\
です。
customindicator.py
import backtrader as bt
class MyStochastic1(bt.Indicator):
lines = ('k', 'd', )
params = (
('k_period', 14),
('d_period', 3), # タプルの最後にもコンマ(、)をいれる
)
def __init__(self):
highest = bt.ind.Highest(self.data, period=self.p.k_period)
lowest = bt.ind.Lowest(self.data, period=self.p.k_period)
self.lines.k = k = (self.data - lowest) / (highest - lowest)
self.lines.d = bt.ind.SMA(k, period=self.p.d_period)
sto2.py
%matplotlib notebook
from __future__ import (absolute_import, division, print_function,
unicode_literals)
import datetime
import os.path
import sys
import backtrader as bt
import customindicator as cind #
class TestStrategy(bt.Strategy):
def __init__(self):
self.myind1 = cind.MyStochastics1(self.data)
if __name__ == '__main__':
cerebro = bt.Cerebro()
cerebro.addstrategy(TestStrategy)
datapath = 'C:\\Users\\XXXX\\orcl-1995-2014.txt'
# Create a Data Feed
data = bt.feeds.YahooFinanceCSVData(
dataname=datapath,
fromdate=datetime.datetime(2000, 1, 1),
todate=datetime.datetime(2000, 12, 31),
reverse=False)
cerebro.adddata(data)
cerebro.run(stdstats=False)
cerebro.plot(style='candle')