Die Ressourcen sind geladen. Beförderung...

Beispiel für eine MACD-Zeichnung in Python

Schriftsteller:FMZ~Lydia, Erstellt: 2022-12-01 16:54:01, Aktualisiert: 2023-09-11 08:59:21

img

Tatsächlich gibt es vor der Erstellung dieses Beispielcodes bereits eine JavaScript-Version des MACD-Indikatorzeichnungsbeispiels auf dem Strategie-Feld der FMZ Quant Trading Platform:https://www.fmz.com/strategy/151972. Jedoch, entsprechend den Bedürfnissen des Benutzers, schreiben wir immer noch ein Beispiel von Python-Version, die als Referenzcode in der Strategieentwicklung Design-Zeichnung verwendet werden kann.

Der Code ist sehr einfach:

'''backtest
start: 2020-01-28 00:00:00
end: 2020-02-26 00:00:00
period: 1d
exchanges: [{"eid":"OKEX","currency":"BTC_USDT"}]
'''

ChartCfg = {
    '__isStock': True,
    'title': {
        'text': 'Python drawing'
    },
    'yAxis': [{
        'title': {'text': 'K-line'},
        'style': {'color': '#4572A7'},
        'opposite': False
    }, {
        'title': {'text': 'index axis'},
        'opposite': True
    }],
    'series': [{
        'type': 'candlestick',
        'name': 'current period',
        'id': 'primary',
        'data': []
    }, {
        'type': 'line',
        'id': 'dif',
        'name': 'DIF',
        "yAxis" : 1,
        'data': []
    }, {
        'type': 'line',
        'id': 'dea',
        'name': 'DEA',
        "yAxis" : 1,
        'data': []
    }, {
        'type': 'line',
        'id': 'macd',
        'name': 'MACD',
        "yAxis" : 1,
        'data': []
    }]
}

def main():
    global ChartCfg
    preTime = 0
    chart = Chart(ChartCfg)
    chart.reset()
    while True:
        while True:
            r = _C(exchange.GetRecords)
            if len(r) > 50:
                break
        # calculate the indicator
        macd = TA.MACD(r)
        
        LogStatus(_D(), len(r))
        
        # drawing
        for i in range(len(r)):
            if r[i]["Time"] == preTime:
                chart.add(0, [r[i]["Time"], r[i]["Open"], r[i]["High"], r[i]["Low"], r[i]["Close"]], -1)
                chart.add(1, [r[i]["Time"], macd[0][i]], -1)
                chart.add(2, [r[i]["Time"], macd[1][i]], -1)
                chart.add(3, [r[i]["Time"], macd[2][i]], -1)
            elif r[i]["Time"] > preTime:
                chart.add(0, [r[i]["Time"], r[i]["Open"], r[i]["High"], r[i]["Low"], r[i]["Close"]])
                chart.add(1, [r[i]["Time"], macd[0][i]])
                chart.add(2, [r[i]["Time"], macd[1][i]])
                chart.add(3, [r[i]["Time"], macd[2][i]])
                preTime = r[i]["Time"]
        Sleep(500)

ChartCfg-Wörterbuch für die Chartkonfiguration

DieChartCfgWörterbuchvariablen speichern Informationen zur Kartenkonfiguration, wie z. B.: Wie viele Linien gibt es in diesem Diagramm? (drei Indikatorlinien, DIF, DEA und MACD) Gibt es eine K-Linie im Diagramm? (type: candlestick bezieht sich auf den Typ, der als K-Liniendaten gesetzt ist) MACD-Werte sind relativ klein. Wenn das Handelspaar BTC_USDT ist, werden die Indikatoren beim Zeichnen zusammengedrückt, was sehr unbequem zu sehen ist, so dass das Diagramm auch als zwei Y-Achsen konfiguriert werden sollte. (Daher gibt es zwei Y-Achsenkonfigurationen in yAxis, eine ist die Indikatorachse und die andere ist die K-Linienachse)

Lastdaten

In dieser Beispielstrategie beginnt die Hauptfunktion, das Chart zu initialisieren, sie ruft die Chart-Funktion an und gibt die Chartkonfiguration ChartCfg als Parameter weiter, um ein Chartobjekt zu erzeugen. Dann tritt sie in eine Schleife ein, erhält ständig K-Liniendaten, beurteilt, dass die Anzahl der BAR in K-Liniendaten mehr als 50 ist, und berechnet dann MACD-Indikatoren (zu wenige BAR können keine effektiven Indikatoren berechnen). Dann können wir die K-Liniendaten und Indikatordaten in das Chart schreiben. Wir schreiben es in das Diagramm, indem wir die Add-Funktion des Diagrammobjekts verwenden. Wenn beim Schreiben der letzte Parameter -1 der Add-Funktion angegeben ist, ist er der Wert, um den aktuellen Datenpunkt zu aktualisieren. Wenn die K-Line BAR neu generiert wird, wird ein neuer Datenpunkt hinzugefügt. Wenn die K-Line BAR nicht generiert wird, werden die letzte BAR und der entsprechende Indikator aktualisiert. (Bestimmt durch Vergleich der Zeitstempel der K-Line BAR)

Es kann direkt getestet werden.

img

Es kann auch auf einem echten Bot laufen:

img

Strategiebeispiel Adresse:https://www.fmz.com/strategy/187379

Wenn Sie Fragen haben, hinterlassen Sie bitte eine Nachricht.


Verwandt

Mehr