De hecho, antes de hacer este ejemplo de código, ya existe una versión JavaScript del ejemplo de dibujo del indicador MACD en el cuadrado de estrategia de la plataforma de negociación de FMZ Quant:https://www.fmz.com/strategy/151972Sin embargo, de acuerdo con las necesidades del usuario, todavía escribimos un ejemplo de versión de Python, que puede ser utilizado como código de referencia en el dibujo de diseño de desarrollo de estrategias.
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 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)
ElChartCfg
el diccionario de variables almacena información sobre la configuración de los gráficos, como:
¿Cuántas líneas hay en este gráfico? (tres líneas de indicadores, DIF, DEA y MACD respectivamente)
¿Existe una línea K en el gráfico? (
En este ejemplo de estrategia, la función principal inicializa el gráfico, llama a la función Chart y pasa la configuración del gráfico ChartCfg como parámetro para generar un objeto de gráfico. Luego entra en un bucle, obtiene datos de línea K constantemente, juzga que el número de BAR en los datos de línea K es mayor de 50 y luego calcula indicadores MACD (demasiado pocos BAR no pueden calcular indicadores efectivos). Lo escribimos en el gráfico usando la función de suma del objeto del gráfico. Cuando se escribe, si se especifica el último parámetro -1 de la función de adición, es el valor para actualizar el punto de datos actual. Cuando el K-line BAR se genera de nuevo, se agrega un nuevo punto de datos. Cuando no se genera el K-line BAR, se actualiza el último BAR y el indicador correspondiente. (Determinado comparando las marcas de tiempo del K-line BAR)
También se puede ejecutar en un bot real:
Dirección de ejemplo de estrategia:https://www.fmz.com/strategy/187379
Si tiene alguna pregunta, por favor deje un mensaje.