Python版MACD畫圖範例

其實在做這個範例代碼之前,在發明者量化交易平臺策略廣場: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

如有問題,感謝留言。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章