avatar of 发明者量化-小小梦 发明者量化-小小梦
Seguir Mensajes Privados
4
Seguir
1271
Seguidores

Ejemplo de dibujo MACD de la versión Python

Creado el: 2020-02-27 19:18:17, Actualizado el: 2023-10-09 22:50:01
comments   0
hits   2701

Ejemplo de dibujo MACD de la versión Python

Ejemplo de dibujo MACD de la versión Python

De hecho, antes de hacer este código de muestra, encontré la estrategia de la plataforma de comercio cuantitativo de Inventor, Strategy Square: https://www.fmz.com/strategy/151972. Ya existe una versión en JavaScript del ejemplo de dibujo del indicador MACD. Sin embargo, en respuesta a la demanda de los usuarios, se escribe una versión Python del ejemplo para que sirva como código de referencia al desarrollar y diseñar 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画图'
    },
    '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)

Diccionario de configuración de gráficos ChartCfg

esteChartCfgLa variable de diccionario almacena la información de configuración del gráfico, por ejemplo: ¿Cuántas líneas hay en este gráfico? (Tres líneas indicadoras, a saber: DIF, DEA, MACD) ¿Hay velas en este gráfico? (‘type’: ‘candlestick’ Este tipo significa configurarlo en datos de la línea K) Los valores MACD son relativamente pequeños. Si el par de negociación es BTC_USDT, los indicadores se comprimirán entre sí al dibujar el gráfico, lo que resulta muy incómodo de leer. Por lo tanto, el gráfico debe configurarse con dos ejes Y. (Entonces, hay dos configuraciones del eje Y en ‘yAxis’, una es el eje del indicador y la otra es el eje de la línea K)

Cargando datos

En esta estrategia de ejemplo, la función principal comienza a ejecutar la inicialización del gráfico, llama a la función Chart, pasa la configuración del gráfico ChartCfg como parámetro y genera un objeto de gráfico. Luego, entra en un bucle para obtener continuamente datos de la línea K. Mientras la cantidad de BAR de datos de la línea K sea mayor a 50, se puede calcular el indicador MACD (si hay muy pocas BAR, no se puede calcular ningún indicador efectivo) . Luego puedes escribir los datos de la línea K y los datos del indicador en el gráfico. Para escribir en un gráfico, utilice el método add del objeto de gráfico. Al escribir, si el último parámetro de la función de suma es -1, se actualizará el valor del punto de datos actual. Si no se pasa -1, se agregará un nuevo punto de datos. Cuando se genera una barra de línea K, se agrega un nuevo punto de datos. Cuando no se genera una barra de línea K, se actualizan la última barra y el indicador correspondiente. (A juzgar por la comparación de las marcas de tiempo de la línea K BAR)

¿Puede realizar pruebas retrospectivas directamente?

Ejemplo de dibujo MACD de la versión Python

También puedes ejecutarlo en tiempo real: Ejemplo de dibujo MACD de la versión Python

Ejemplo de dirección de política: https://www.fmz.com/strategy/187379

Si tiene alguna pregunta, gracias por dejar un mensaje.