En realidad, antes de hacer este código de ejemplo, los inventores de la plataforma de estrategia de cuantificación de la plaza:https://www.fmz.com/strategy/151972❖ Ya hay ejemplos de gráficos de indicadores de MACD en versión JavaScript. ❖ Sin embargo, los usuarios necesitan escribir un ejemplo en Python para usarlo como código de referencia en el desarrollo de gráficos de diseño de políticas.
El código es muy simple:
'''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)
Esto esChartCfg
Las variables del diccionario almacenan información de configuración de gráficos, por ejemplo:
¿Cuántas líneas hay en este gráfico? (tres líneas indicadoras, DIF, DEA, MACD)
¿Hay una línea K en este gráfico?
Los valores del MACD son relativamente pequeños, y si el par de operaciones es BTC_USDT, los indicadores se comprimirán en el gráfico, por lo que el gráfico también debe configurarse en dos ejes Y.
En esta estrategia de ejemplo, la función main comienza a iniciar el gráfico, llama a la función Chart, configura el gráfico ChartCfg como un parámetro de entrada, genera un objeto de gráfico Chart. Luego, en un ciclo continuo, obtiene datos de K líneas, determina que el indicador MACD se puede calcular siempre que el número de datos de K líneas BAR sea mayor a 50. Luego, se pueden escribir datos de K líneas y datos de indicadores en el gráfico. Para escribir un método en un gráfico se utiliza la función add para objetos de gráfico. Cuando se escribe, si se especifica el último parámetro de la función add -1, se actualiza el valor del punto de datos actual; si no se transmite -1, se agrega un punto de datos nuevo. Cuando se genera un nuevo K-line BAR, se agrega un nuevo punto de datos, y cuando no se genera un K-line BAR, se actualiza el último BAR y el indicador correspondiente.
También se puede ejecutar en disco real:
La dirección del ejemplo de estrategia es:https://www.fmz.com/strategy/187379
Si tiene alguna pregunta, gracias por dejarla.