Ejemplos de gráficos MACD en Python

El autor:Un sueño pequeño., Creado: 2020-02-27 19:18:17, Actualizado: 2023-10-09 22:50:01

img

Ejemplos de gráficos MACD en Python

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)

ChartCfg Diccionario de configuración de gráficos

Esto esChartCfgLas 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.

Cargar datos

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.

Se puede volver a medir directamente

img

También se puede ejecutar en disco real:img

La dirección del ejemplo de estrategia es:https://www.fmz.com/strategy/187379

Si tiene alguna pregunta, gracias por dejarla.


Relacionados

Más.