Vor der Erstellung dieses Beispielcodes haben die Erfinder die Quantifizierung der Handelsplattform Strategie Square beschrieben:https://www.fmz.com/strategy/151972◦ Es gibt bereits MACD-Pointerdiagramm-Beispiele in der JavaScript-Version. ◦ Es ist jedoch ein Bedarf der Anwender, ein Beispiel in der Python-Version zu schreiben, das als Referenzcode für die Entwicklung von Designdiagrammen verwendet wird.
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画图'
},
'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)
Das hier.ChartCfg
In den Wörterbuchvariablen werden Chartkonfigurationsinformationen gespeichert, z. B.:
Wie viele Linien gibt es auf diesem Diagramm? (Drei Linien sind DIF, DEA und MACD)
Gibt es K-Linien in diesem Diagramm?
Die MACD-Werte sind relativ klein, wenn das Handelspare BTC_USDT ist, werden die Indikatoren beim Zeichnen sehr unpraktisch zusammengedrückt, so dass das Diagramm auch als 2 Y-Achs konfiguriert wird.
In diesem Beispiel wird die Main-Funktion mit der Initialization des Chartes begonnen, die Chart-Funktion aufgerufen, das Chart als ChartCfg konfiguriert und als Parameter eingegeben, um ein Chart-Objekt zu erzeugen. Dann geht es in einen Kreislauf, holt ständig K-Linien-Daten ab und entscheidet, ob die Anzahl der K-Linien-Daten BAR größer als 50 ist, um einen MACD-Indikator zu berechnen. Schreiben Sie Methoden in ein Diagramm mit Chart-Objekten. Bei der Eingabe wird der letzte Parameter der Add-Funktion - 1 angegeben, wenn der Wert des aktuellen Datensatzes aktualisiert wird. Wenn nicht - 1 übermittelt wird, wird ein neuer Datensatz hinzugefügt. Wenn K-Line BAR neu erzeugt wird, wird ein neuer Datenpunkt hinzugefügt, wenn K-Line BAR nicht erzeugt wurde, wird das letzte BAR und die entsprechenden Indikatoren aktualisiert.
Sie können auch auf einem Festplatte laufen:
Das Strategie-Problem ist:https://www.fmz.com/strategy/187379
Wenn Sie Fragen haben, lassen Sie es uns bitte wissen.