Zur Erklärung habe ich eine benutzerdefinierte Indikatorklasse im selben Skript geschrieben. Es ist jedoch bequemer, nur die benutzerdefinierte Indikatorklasse in eine separate Py-Datei zu schreiben und sie getrennt vom Strategieskript zu verwenden.
Wenn der Dateiname des benutzerdefinierten Indikators ** customindicator.py ** lautet, steht er am Anfang der Strategie.
customindicator as cind importieren
(beliebiger beschreibender Name)
In der init-Methode der Strategieklasse
self.myind1 = cind.MyStochastics1(self.data)
Schreiben.
Platzieren Sie customindicator.py im selben Verzeichnis wie das Strategieskript. Wenn Sie Jupyter Notebook verwenden und die Standardeinstellungen beibehalten, lautet dies "C: \ Benutzer \ Benutzername ".
customindicator.py
import backtrader as bt
class MyStochastic1(bt.Indicator):
lines = ('k', 'd', )
params = (
('k_period', 14),
('d_period', 3), #Komma am Ende des Taple(、)Einstellen
)
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')
Recommended Posts