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

Modelo de diagrama MACD em Python

Autora:Inventor quantificado - sonho pequeno, Criado: 2020-02-27 19:18:17, Atualizado: 2023-10-09 22:50:01

img

Modelo de diagrama MACD em Python

Antes de fazer este exemplo de código, os inventores quantificaram a estratégia da plataforma de negociação:https://www.fmz.com/strategy/151972O exemplo de gráfico de indicadores MACD já está disponível em JavaScript. No entanto, os usuários precisam escrever um exemplo em Python para usar como código de referência no desenvolvimento de gráficos de design estratégico.

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)

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

Esta éChartCfgAs variáveis do dicionário armazenam informações de configuração de gráficos, como: Quantas linhas há neste gráfico? (três linhas indicadoras, DIF, DEA, MACD) Há uma linha K neste gráfico? (Candlestick type type) Os valores do MACD são relativamente pequenos, e se o par de negociação for BTC_USDT, o indicador será comprimido quando o gráfico for desenhado, por isso o gráfico também deve ser configurado para dois eixos Y.

Carregar dados

Nesta estratégia de exemplo, a função main inicializa o gráfico, invoca a função Chart, configura o gráfico ChartCfg como um parâmetro de entrada, gera um objeto gráfico Chart. Em seguida, entra em um ciclo, obtém dados de linha K sem parar, julga se o número de linhas de dados BAR é maior do que 50 para calcular indicadores MACD (BAR não é um indicador válido); e depois pode escrever dados de linha K e indicadores no gráfico. Escrever um método para um gráfico usando objetos de gráfico. Ao escrever, se o último parâmetro da função add for especificado -1, o valor do ponto de dados atual será atualizado. Se não for transmitido -1, um novo ponto de dados será adicionado. Quando o Kline BAR é recriado, um novo ponto de dados é adicionado, e quando o Kline BAR não é criado, o último BAR e o indicador correspondente são atualizados.

Pode ser detectado diretamente.

img

A plataforma também pode ser executada em disco físico:img

O exemplo de estratégia é:https://www.fmz.com/strategy/187379

Se você tem alguma dúvida, por favor deixe um comentário.


Relacionados

Mais.