avatar of 发明者量化-小小梦 发明者量化-小小梦
konzentrieren Sie sich auf Private Nachricht
4
konzentrieren Sie sich auf
1271
Anhänger

MACD-Zeichnungsbeispiel in der Python-Version

Erstellt in: 2020-02-27 19:18:17, aktualisiert am: 2023-10-09 22:50:01
comments   0
hits   2701

MACD-Zeichnungsbeispiel in der Python-Version

MACD-Zeichnungsbeispiel in der Python-Version

Tatsächlich habe ich vor der Erstellung dieses Beispielcodes das Inventor Quantitative Trading Platform Strategy Square gefunden: https://www.fmz.com/strategy/151972. Es gibt bereits eine JavaScript-Version des Zeichenbeispiels des MACD-Indikators. Aufgrund der Benutzernachfrage wurde jedoch eine Python-Version des Beispiels geschrieben, die als Referenzcode bei der Entwicklung und Gestaltung von Strategien dienen soll.

Der Code ist ganz 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画图'
    },
    'yAxis': [{
        'title': {'text': 'K线'},
        'style': {'color': '#4572A7'},
        'opposite': False
    }, {
        'title': {'text': '指标轴'},
        'opposite': True
    }],
    'series': [{
        'type': 'candlestick',
        'name': '当前周期',
        '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
        # 计算指标
        macd = TA.MACD(r)
        
        LogStatus(_D(), len(r))
        
        # 画图
        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-Diagrammkonfigurationswörterbuch

DasChartCfgIn der Wörterbuchvariable werden die Diagrammkonfigurationsinformationen gespeichert, zum Beispiel: Wie viele Linien hat dieses Diagramm? (Drei Indikatorlinien, nämlich DIF, DEA, MACD) Gibt es in diesem Diagramm Kerzen? (‘Typ’: ‘Kerzenhalter’ bedeutet, es als Kerzenhalterdaten festzulegen) Die MACD-Werte sind relativ klein. Wenn das Handelspaar BTC_USDT ist, werden die Indikatoren beim Zeichnen des Diagramms zusammengedrückt, was sehr unpraktisch zu lesen ist. Daher muss das Diagramm mit zwei Y-Achsen konfiguriert werden. (Es gibt also zwei Y-Achsen-Konfigurationen in „yAxis“, eine ist die Indikatorachse und die andere ist die K-Linienachse)

Daten werden geladen

In dieser Beispielstrategie beginnt die Hauptfunktion mit der Ausführung der Diagramminitialisierung, ruft die Diagrammfunktion auf, übergibt die Diagrammkonfiguration ChartCfg als Parameter und generiert ein Diagrammobjektdiagramm. Dann tritt es in eine Schleife ein, um kontinuierlich K-Line-Daten zu erhalten. Solange die Anzahl der K-Line-Daten-BARs größer als 50 ist, kann der MACD-Indikator berechnet werden (wenn es zu wenige BARs gibt, kann kein effektiver Indikator berechnet werden) . Anschließend können Sie die K-Linien-Daten und Indikatordaten in das Diagramm schreiben. Um in ein Diagramm zu schreiben, verwenden Sie die Add-Methode des Diagrammobjekts. Wenn beim Schreiben der letzte Parameter der Add-Funktion -1 ist, wird der Wert des aktuellen Datenpunkts aktualisiert. Wenn -1 nicht übergeben wird, wird ein neuer Datenpunkt hinzugefügt. Wenn ein K-Line-BAR neu generiert wird, wird ein neuer Datenpunkt hinzugefügt. Wenn kein K-Line-BAR generiert wird, werden der letzte BAR und der entsprechende Indikator aktualisiert. (Beurteilt durch Vergleich der Zeitstempel von K-line BAR)

Kann direkt Backtests durchführen

MACD-Zeichnungsbeispiel in der Python-Version

Sie können es auch in Echtzeit ausführen: MACD-Zeichnungsbeispiel in der Python-Version

Beispieladresse für Richtlinie: https://www.fmz.com/strategy/187379

Wenn Sie Fragen haben, hinterlassen Sie uns bitte eine Nachricht.