Python版MACD画图范例

  • 2020-03-14
  • 3430
  • 3
  • 3
  • 3
  • 发明者量化

其实在做这个范例代码之前,在发明者量化交易平台策略广场:https://www.fmz.com/strategy/151972 。已经有JavaScript版本的MACD指标画图范例了。不过应用户的需求,还是写一个Python版本的例子,以供在策略开发设计画图时作为参考代码。

代码非常简单:

'''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 图表配置字典

这个ChartCfg字典变量中保存的是图表配置信息,例如:
这个图表中有几条线?(三条指标线,分别是DIF、DEA、MACD)
这个图表中有K线么?('type': 'candlestick' 这个类型就是指设置为K线数据)
MACD数值都比较小,如果交易对是BTC_USDT,画图的时候就会指标压缩在一起很不方便看,所以图表还要配置为2个Y轴。(所以'yAxis'中有两个Y轴配置,一个是指标轴,一个是K线轴)

载入数据

在这个范例策略中main函数开始执行图表的初始化,调用Chart函数,把图表配置ChartCfg作为参数传入,生成一个图表对象chart。然后进入一个循环,不停的获取K线数据,判断K线数据BAR数量只要大于50个就可以计算MACD指标(BAR太少算不出有效指标)。然后就可以把K线数据和指标数据写入图表了。
写入图表使用chart对象的方法add函数。
写入时,如果指定add函数的最后一个参数-1,为更新当前数据点的数值。如果不传-1,为新增一个数据点。
当K线BAR新生成时,新增一个数据点,当K线BAR没有生成时,更新最后一个BAR和对应的指标。(通过K线BAR的时间戳对比判断出)

可以直接回测

也可以实盘运行:

策略范例地址:
https://www.fmz.com/strategy/187379

如有问题,感谢留言。

免责声明:信息仅供参考,不构成投资及交易建议。投资者据此操作,风险自担。
如果觉得文章对你有用,请随意赞赏收藏
auend a445315834 zeropool liuliang2015 4人赞赏收藏
相关推荐
相关下载
登录后评论
最新评论 (3)

  • avatar
    2022-09-14 14:52:15 ATFX金银汇招商 [宽客网友]:
    ATFX金银汇招商
    0
    文章
    3
    关注
    0
    粉丝

    ATFX外汇黄金平台诚招个人公司资管机构代理,佣金平仓就反。不卡盘,不滑点,对冲,拨头皮,秒单,EA等无任何交易限制。正规平台支持长期大资金盈利出金。受英国FCA,塞浦路斯,毛里求斯等多重监管的在线差价合约经纪商。        ATFX代理咨询:85292029084(微信) QQ:1171513819 微信:AT5050

Copyright © 2019 宽客在线