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