O recurso está a ser carregado... Carregamento...

Exemplo de desenho MACD Python

Autora:FMZ~Lydia, Criado: 2022-12-01 16:54:01, Atualizado: 2023-09-11 08:59:21

img

Na verdade, antes de fazer este exemplo de código, já existe uma versão JavaScript do exemplo de desenho do indicador MACD no quadrado de estratégia da plataforma de negociação FMZ Quant:https://www.fmz.com/strategy/151972No entanto, de acordo com as necessidades do usuário, ainda escrevemos um exemplo de versão Python, que pode ser usado como código de referência no desenho de design de desenvolvimento de estratégia.

O código é muito simples:

'''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)

Dicionário de configuração de gráficosCfg

OChartCfgO dicionário de variáveis armazena informações sobre a configuração do gráfico, tais como: Quantas linhas existem neste gráfico? (Três linhas de indicadores, DIF, DEA e MACD, respectivamente) Existe uma linha K no gráfico? (type: candlestick refere-se ao tipo definido como dados de linha K) Os valores do MACD são relativamente pequenos. Se o par de negociação for BTC_USDT, ao desenhar, os indicadores serão comprimidos juntos, o que é muito inconveniente de ver, por isso o gráfico também deve ser configurado como dois eixos Y. (Portanto, existem duas configurações de eixo Y no yAxis, uma é o eixo do indicador e a outra é o eixo da linha K)

Dados de carga

Nesta estratégia de exemplo, a função principal começa a inicializar o gráfico, chama a função Chart e passa a configuração do gráfico ChartCfg como um parâmetro para gerar um objeto de gráfico. Em seguida, entra em um loop, obtém dados de linha K constantemente, julga que o número de BAR nos dados de linha K é maior que 50, e depois calcula indicadores MACD (muito poucos BAR não podem calcular indicadores eficazes). Nós escrevemos no gráfico usando a função de adição do objeto gráfico. Ao escrever, se o último parâmetro -1 da função de adição for especificado, é o valor para atualizar o ponto de dados atual. Quando o BAR da linha K é recém-gerado, um novo ponto de dados é adicionado. Quando o BAR da linha K não é gerado, o último BAR e o indicador correspondente são atualizados. (Determinado comparando os carimbos de tempo do BAR da linha K)

Pode ser testado diretamente

img

Também pode ser executado em um robô real:

img

Endereço de exemplo de estratégia:https://www.fmz.com/strategy/187379

Se tiver alguma pergunta, por favor deixe uma mensagem.


Relacionados

Mais.