avatar of 发明者量化-小小梦 发明者量化-小小梦
focar em Mensagem privada
4
focar em
1271
Seguidores

Exemplo de desenho MACD em versão Python

Criado em: 2020-02-27 19:18:17, atualizado em: 2023-10-09 22:50:01
comments   0
hits   2701

Exemplo de desenho MACD em versão Python

Exemplo de desenho MACD em versão Python

Na verdade, antes de criar este código de exemplo, encontrei a plataforma de negociação quantitativa Inventor Strategy Square: https://www.fmz.com/strategy/151972. Já existe uma versão JavaScript do exemplo de desenho do indicador MACD. No entanto, em resposta à demanda do usuário, uma versão Python do exemplo foi escrita para servir como código de referência ao desenvolver e projetar estratégias.

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画图'
    },
    '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)

Dicionário de configuração de gráfico ChartCfg

esseChartCfgA variável do dicionário armazena as informações de configuração do gráfico, por exemplo: Quantas linhas há neste gráfico? (Três linhas indicadoras, nomeadamente DIF, DEA e MACD) Há algum candlestick neste gráfico? (‘type’: ‘candlestick’ Este tipo significa defini-lo para dados da linha K) Os valores MACD são relativamente pequenos. Se o par de negociação for BTC_USDT, os indicadores serão comprimidos juntos ao desenhar o gráfico, o que é muito inconveniente de ler. Portanto, o gráfico deve ser configurado com 2 eixos Y. (Portanto, existem duas configurações do eixo Y em ‘yAxis’, uma é o eixo indicador e a outra é o eixo da linha K)

Carregando dados

Nesta estratégia de exemplo, a função principal começa a executar a inicialização do gráfico, chama a função Chart, passa a configuração do gráfico ChartCfg como um parâmetro e gera um objeto de gráfico chart. Em seguida, ele entra em um loop para obter continuamente dados da linha K. Enquanto o número de BARs de dados da linha K for maior que 50, o indicador MACD pode ser calculado (se houver muito poucos BARs, nenhum indicador efetivo pode ser calculado) . Então você pode escrever os dados da linha K e os dados do indicador no gráfico. Para escrever em um gráfico, use o método add do objeto do gráfico. Ao escrever, se o último parâmetro da função add for -1, o valor do ponto de dados atual será atualizado. Se -1 não for passado, um novo ponto de dados será adicionado. Quando uma BAR de K-line é gerada recentemente, um novo ponto de dados é adicionado. Quando uma BAR de K-line não é gerada, a última BAR e o indicador correspondente são atualizados. (Julgado pela comparação dos carimbos de data e hora da BAR da linha K)

Pode fazer backtest diretamente

Exemplo de desenho MACD em versão Python

Você também pode executá-lo em tempo real: Exemplo de desenho MACD em versão Python

Exemplo de endereço de política: https://www.fmz.com/strategy/187379

Caso tenha alguma dúvida, obrigado por deixar uma mensagem.