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

Sie können es auch in Echtzeit ausführen:

Beispieladresse für Richtlinie: https://www.fmz.com/strategy/187379
Wenn Sie Fragen haben, hinterlassen Sie uns bitte eine Nachricht.