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)
Esta éChartCfg
As 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.
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.
A plataforma também pode ser executada em disco físico:
O exemplo de estratégia é:https://www.fmz.com/strategy/187379
Se você tem alguma dúvida, por favor deixe um comentário.