__ Wie kann ich den Indikator selbst erstellen? __ __
Indikatorerstellung
Lassen Sie uns als Beispiel eine Stokastik erstellen und deren Inhalt betrachten.
sto1.py
import backtrader as bt
class MyStochastic1(bt.Indicator): #bt.Vererbungsanzeige
lines = ('k', 'd', ) #Linienobjekt, das auf dem Plot angezeigt werden soll
params = (
('k_period', 14), #Geben Sie Parameter mit Tapples an
('d_period', 3), #Komma am Ende des Taple(、)Einstellen
)
plotinfo = dict(plot =True,
subplot=True,
plotname='',
)
def __init__(self):
highest = bt.indicators.Highest(self.datas[0], period=self.params.k_period)
lowest = bt.indicators.Lowest(self.datas[0], period=self.params.k_period)
self.lines.k = k = (self.datas[0] - lowest) / (highest - lowest)
self.lines.d = bt.ind.SimpleMovingAverage(k, period=self.params.d_period)
def next(self):
pass
Dies ist das Gesamtbild der Indikatorklasse. Für die Berechnung der Stokastik ist ein 14-Tage-Höchst- / Tiefstpreis erforderlich. Kombinieren Sie sie mit dem Schlusskurs, um den Änderungsbetrag zu berechnen, und glätten Sie ihn mit einem einfachen gleitenden 3-Tage-Durchschnitt.
class MyStochastic1(bt.Indicator):
Deklarieren Sie zunächst die Klasse "MyStochastic1", die die Backtrader Indicator-Klasse erbt.
lines=('k','d')
In Stocastics gibt es zwei Zeilen: K und D. Also richte ich zwei Linienobjekte ein, die im Plot angezeigt werden sollen. Dieses Lines-Objekt ähnelt "Indexpuffer" in MQL4 und ist ein ** iterierbares Array **, in dem numerische Werte und Zeitachsen verbunden sind. Cerebro zeichnet dieses Linienobjekt im Diagramm.
In MQL4 wird der neueste Balken durch [0] dargestellt. Ab dem letzten Balken erhöht sich die Zahl mit zunehmendem Alter um 1, 2, 3, .... Selbst im Backtrader wird das neueste Bar / Lines-Objekt durch [0] dargestellt. Dies ist das gleiche wie bei MQL4. Wenn der Balken jedoch basierend auf 0 älter wird, werden Minuszeichen wie -1, -2, -3 ... hinzugefügt.
In dieser Hinsicht können Lines-Objekte die ursprünglichen Python-Slicing-Operationen nicht ausführen. Wenn Sie Slices verwenden möchten, verwenden Sie die Methode get ().
myslice = self.lines.my_sma.get (vor = 0, Größe = 1)
[-1] Nur ein Array außer [0]
myslice = self.lines.my_sma.get (vor = 0, Größe = 10)
10 Arrays von [-1] bis [-10] außer [0]
myslice = self.lines.my_sma.get (vor = -1, Größe = 5)
Sequenzen von [-2] bis [-6] außer [-1]
** * Der Operator [] kann nur in der nächsten Methode für Linienobjekte verwendet werden. Ich werde die nächste Methode zu einem späteren Zeitpunkt zusammenfassen. ** ** **
params = (
('k_period', 14),
('d_period', 3),
* # Fügen Sie am Ende ein Komma hinzu *
)
Stocastics berechnet über einen Zeitraum von 14 Tagen und glättet die Ergebnisse mit einem einfachen gleitenden 3-Tage-Durchschnitt. (K_period, d_period) Dieser Parameter legt es fest. Geben Sie durch Taple of Taple oder dict () an. (Referenz 1)
Es wird wie self.params.k_period als "self.params.name" ausgedrückt. Achten Sie bei Taples darauf, das letzte Komma nicht zu vergessen.
plotinfo = dict(plot =True, subplot=True, plotname='', )
Sie können die Einstellungen beim Plotten ändern.
Plot: Plotanzeige Ein / Aus Unterplot: Unterfensteranzeige wechseln Plotname: Anzeigename der Fußnote (Klassenname wird angezeigt, wenn leer)
Es gibt andere Einstellungselemente.
highest = bt.indicators.Highest(self.datas[0],period=self.params.k_period)
lowest = bt.indicators.Lowest(self.datas[0],period=self.params.k_period)
Beschreiben Sie die Berechnung der Stockatics in der Init-Methode.
Berechnen Sie zunächst die hohen und niedrigen Preise für 14 Tage. Glücklicherweise hat der Backtrader einen Indikator, der die hohen und niedrigen Preise für einen bestimmten Zeitraum berechnet.
Eingebaute Indikatoren können mit bt.indicators.XXXX () aufgerufen werden. (Anmerkung s am Ende!) Hier nennen wir Höchste und Niedrigste, um die höchsten und niedrigsten Werte während der k_period-Periode zu finden. Ich habe das Ergebnis in die höchsten und niedrigsten Linienobjekte eingefügt.
self.lines.k = k = (self.datas[0] - lowest) / (highest - lowest)
self.lines.d = bt.ind.SimpleMovingAverage(k,period=self.params.d_period)
Das zu zeichnende Lines-Objekt wird durch "self.lines.name" dargestellt. k ist "self.lines.k" und d ist "self.lines.d". Das resultierende Linienobjekt kann auch für Berechnungen verwendet werden. Um die Notation der Berechnung in der nächsten Zeile zu vereinfachen, wird sie hier "k" zugewiesen und an den einfachen Indikator für den gleitenden Durchschnitt übergeben.
self.datas[0]
Self.datas [0] in der Formel steht für "die ersten CSV-Daten". Sofern nicht anders angegeben, wird der Schlusskurs verwendet. Da beispielsweise mehrere Daten übergeben werden können, wenn zwei CSV-Daten wie täglich und wöchentlich übergeben werden, muss zuerst der kleinere Zeitrahmen und später der größere Zeitrahmen angegeben werden. Mit anderen Worten, Daten [0] müssen tägliche Daten sein und Daten [1] müssen wöchentliche Daten sein. Dieses Mal werden nur tägliche Daten übergeben.
--- | Offiziell | Kürzung |
---|---|---|
lines | self.lines.XXX | self.l.XXX |
params | self.params.XXX | self.p.XXX |
datas | self.datas[0].close | self.data.nah oder selbst.data |
indicators | bt.indicators.XXX | bt.ind.XXX |
Alias | SimpleMovingAverage | SMA |
Backtrader kann abgekürzt werden. Es ist praktisch, aber es kann verwirrend sein, bis Sie sich daran gewöhnt haben. Tatsächlich können Sie diesmal alle Plotinfos weglassen. Wenn Plot, Unterplot, Plotname weggelassen werden, werden die Standardeinstellungen verwendet.
Ich habe es diesmal nicht verwendet, aber wenn Sie die Bedingungen beurteilen oder die Verarbeitung für jeden Balken durchführen möchten, beschreiben Sie den Inhalt in der nächsten Methode.
__ Wie zeige ich die Anzeige an? __ __
Alle Einstellungen sind abgeschlossen. Wenn Sie diese Indikatorklasse innerhalb der init-Methode der Strategieklasse instanziieren, zeichnet Cerebro sie im Diagramm auf. Sie können die Instanz frei benennen.
self.myind1 = MyStochastic1(self.data)
(Erklärende Kommentare wurden an verschiedenen Stellen hinzugefügt und werden so weit wie möglich abgekürzt.)
sto12.py
%matplotlib notebook
from __future__ import (absolute_import, division, print_function,
unicode_literals)
import datetime
import os.path
import sys
import backtrader as bt
class MyStochastic1(bt.Indicator):
lines = ('k', 'd', ) #Linienobjekt, das auf dem Plot angezeigt werden soll
params = (
('k_period', 14), #Geben Sie Parameter mit Tapples an
('d_period', 3), #Komma am Ende des Taple(、)Einstellen
)
#Kürzung
#plotinfo = dict()
def __init__(self):
#Um genau zu sein, selbst.datas[0]Kann ausgelassen werden
# self.params.k_Zeit und Selbst weglassen.p.k_period
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)
class TestStrategy(bt.Strategy):
def __init__(self):
#Der Teil des Instanznamens myind1 kann ein beliebiger Name sein
self.myind1 = MyStochastic1(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')
Die Stokastik wird sicher angezeigt.
__ Was ist Cerebro? __ __
Dies ist die Kernfunktion von Backtrader. Wenn Sie diesen Cerebro starten, nachdem Sie verschiedene Einstellungen vorgenommen haben, wird er automatisch kaufen und verkaufen, analysieren und optimieren und die Ergebnisse automatisch zeichnen. Ich werde den Ablauf bis zum Start von Cerebro im vorherigen Skript überprüfen.
cerebro = bt. Cerebro ()
cerebro.adddata (data)
cerebro.addstrategy (TestStrategy)
cerebro.run ()
Wenn Sie eine Strategieklasse "TestStrategy" erstellen, die Sie für sich selbst halten, CSV-Daten angeben und dann Cerebro ausführen, wird der Inhalt dieser Klasse "TestStrategy" automatisch ausgeführt. Dieses Mal kaufen und verkaufen wir nicht automatisch, aber Cerebro plant es, weil Stocastics in "Test Strategy" verwendet wird.
Was haben Sie gedacht? Um benutzerdefinierte Indikatoren mit Backtrader zu verwenden, erstellen Sie Ihre eigene Klasse von benutzerdefinierten Indikatoren und instanziieren Sie sie innerhalb der Strategieklasse.
Referenz 1
Referenz 2 2.Gold vs SP500 https://www.backtrader.com/blog/posts/2016-12-13-gold-vs-sp500/gold-vs-sp500/
Recommended Posts