[PYTHON] So erstellen Sie einen benutzerdefinierten Backtrader-Indikator

__ 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.

Klassenerklärung

class MyStochastic1(bt.Indicator): Deklarieren Sie zunächst die Klasse "MyStochastic1", die die Backtrader Indicator-Klasse erbt.

Linien Objekteinstellungen

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.

Lines Objektindex und Slice

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. ** ** **

Parametereinstellungen (params)

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.

Ploteinstellungen (plotinfo)

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.

Schreiben Sie einen Ausdruck in die Init-Methode

Formelerstellung Nr. 1 Aufrufen eines integrierten Indikators zur Berechnung

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.

Erstellen eines Ausdrucks Teil 2 Fügen Sie einen Wert in das Lines-Objekt ein

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.

Datenfeed (Daten)

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.

Abkürzung

--- 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.

nächste Methode

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.

Abschluss Aufruf in der Strategieklasse

__ 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')

1sto.png

Die Stokastik wird sicher angezeigt.

Rauer Fluss bis Cerebro beginnt

__ 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.

  1. Beschreiben Sie den Inhalt des automatischen Handels und den Indikator, der dafür in der Strategieklasse (TestStrategy) aufgerufen werden soll.
  2. Instanziiere Cerebro cerebro = bt. Cerebro ()
  3. Übergeben Sie CSV-Daten an cerebro cerebro.adddata (data)
  4. Laden Sie die Strategie in cerebro cerebro.addstrategy (TestStrategy)
  5. Starten Sie cerebro cerebro.run ()
  6. Zeigen Sie das Diagramm "cerebro.plot ()" an

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.

Zusammenfassung

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.

Verweise

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

So erstellen Sie einen benutzerdefinierten Backtrader-Indikator
Wie erstelle ich eine japanisch-englische Übersetzung?
Wie erstelle ich einen Crawler?
So erstellen Sie eine rekursive Funktion
[Blender] So erstellen Sie ein Blender-Plug-In
Wie erstelle ich einen Crawler?
[Python] Wie man eine Klasse iterierbar macht
Wie erstelle ich eine Pelican Site Map?
Wie man ein Dialogsystem für Anfänger erstellt
So erstellen Sie ein Wörterbuch mit einer hierarchischen Struktur.
So erstellen Sie ein QGIS-Plug-In (Paketerzeugung)
Ich las "Wie man ein Hacking Lab macht"
So rufen Sie eine Funktion auf
[Go] So erstellen Sie einen benutzerdefinierten Fehler für Sentry
Wie man ein Terminal hackt
So erstellen Sie ein Python-Paket mit VS Code
So erstellen Sie mit Flask einen BOT für Cisco Webex-Teams
[Python] So erstellen Sie eine Liste von Zeichenfolgen Zeichen für Zeichen
Wie erstelle ich ein Multiplayer-Online-Actionspiel mit Slack?
So erstellen Sie ein Hacking-Labor - Kali Linux (2020.1) VirtualBox 64-Bit Teil 2-
So erstellen Sie ein Hacking-Labor - Kali Linux (2020.1) VirtualBox 64-Bit-Edition -
Wie erstelle ich ein Python-Paket (geschrieben für Praktikanten)
Wie man ein einfaches Flappy Bird-Spiel mit Pygame macht
So setzen Sie einen symbolischen Link
So erstellen Sie ein Conda-Paket
So erstellen Sie eine virtuelle Brücke
Wie erstelle ich eine Docker-Datei?
[Blender] So erstellen Sie Blender-Skripte mehrsprachig
So löschen Sie einen Docker-Container
So erstellen Sie eine Konfigurationsdatei
So machen Sie einen String in Python zu einem Array oder ein Array zu einem String
So erstellen Sie einen Befehl zum Lesen der Einstellungsdatei mit Pyramide
So erstellen Sie eine Überwachungskamera (Überwachungskamera) mit Opencv und Python
So passen Sie U-Boot mit einer benutzerdefinierten Karte für OSD335X an (Hinweis)
[C-Sprache] So erstellen, vermeiden und erstellen Sie einen Zombie-Prozess
Spigot (Papier) Einführung in die Erstellung eines Plug-Ins für 2020 # 01 (Umgebungskonstruktion)
So führen Sie einen Komponententest durch Teil 1 Entwurfsmuster zur Einführung
[Python] Wie erstelle ich eine Matrix aus sich wiederholenden Mustern (repmat / tile)
So machen Sie Word Cloud-Zeichen monochromatisch
So teilen und speichern Sie einen DataFrame
So erstellen Sie eine Sphinx-Übersetzungsumgebung
So erstellen Sie einen Git-Klonordner
So fügen Sie ein Paket mit PyCharm hinzu
So zeichnen Sie ein Diagramm mit Matplotlib
Machen wir einen Jupyter-Kernel
[Colab] So kopieren Sie einen riesigen Datensatz
[Python] So invertieren Sie eine Zeichenfolge
So installieren Sie ein Paket mithilfe eines Repositorys
[Ubuntu] So führen Sie ein Shell-Skript aus
[Cocos2d-x] So erstellen Sie eine Skriptbindung (Teil 2)
So machen Sie Multi-Boot-USB (Windows 10-kompatibel)
So erstellen Sie ein Repository aus Medien
Ich habe eine Web-API erstellt
Um eine Diktat-Eigenschaft schreibgeschützt zu machen
So wählen Sie eine Seaborn-Farbpalette aus
So testen Sie auf einer von Django authentifizierten Seite
[Cocos2d-x] So erstellen Sie eine Skriptbindung (Teil 1)
So führen Sie Maya Python-Skripte aus