Ejemplo de dibujo MACD de Python

El autor:- ¿ Por qué?, Creado: 2022-12-01 16:54:01, Actualizado: 2023-09-11 08:59:21

img

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)

Dicionario de configuración de gráficos

ElChartCfgel 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? (tipo: candlestick se refiere al tipo establecido como datos de línea K) Los valores MACD son relativamente pequeños. Si el par de operaciones es BTC_USDT, al dibujar, los indicadores se comprimirán juntos, lo que es muy inconveniente de ver, por lo que el gráfico también debe configurarse como dos ejes Y. (Por lo tanto, hay dos configuraciones de eje Y en yAxis, una es el eje del indicador y la otra es el eje de la línea K)

Datos de carga

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)

Se puede probar directamente.

img

También se puede ejecutar en un bot real:

img

Dirección de ejemplo de estrategia:https://www.fmz.com/strategy/187379

Si tiene alguna pregunta, por favor deje un mensaje.


Relacionados

Más.