資源の読み込みに... 荷物...

Python の MACD 図の例

作者: リン・ハーンFMZ~リディア, 作成日:2022-12-01 16:54:01, 更新日:2023-09-11 08:59:21

img

実際,この例コードを作成する前に,すでにFMZ量子取引プラットフォームの戦略スクエアにMACD指標の図示例のJavaScriptバージョンがあります.https://www.fmz.com/strategy/151972開発戦略の設計図に参照コードとして使用できます. 開発戦略は,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 drawing'
    },
    'yAxis': [{
        'title': {'text': 'K-line'},
        'style': {'color': '#4572A7'},
        'opposite': False
    }, {
        'title': {'text': 'index axis'},
        'opposite': True
    }],
    'series': [{
        'type': 'candlestick',
        'name': 'current period',
        '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
        # calculate the indicator
        macd = TA.MACD(r)
        
        LogStatus(_D(), len(r))
        
        # drawing
        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変数辞書では,次のようなチャート構成情報を保存します. このグラフにはどれだけの線がありますか? (それぞれ3つの指標線,DIF,DEA,MACD) グラフにK線がありますか? (type: candlestickはK線データとして設定されたタイプを指します) MACD値は比較的小さい.取引ペアが BTC_USDTである場合,引くとき,インジケーターは圧縮され,見るのは非常に不便であるため,チャートも2つのY軸として構成されるべきである. (したがって,yAxisには2つのY軸構成があり,一つはインジケーター軸であり,もう一つはK線軸である)

負荷データ

この例の戦略では,メイン関数はチャートを初期化し,チャート関数を呼び出し,チャート構成 ChartCfg をパラメータとしてチャートオブジェクトを生成するために渡します.その後ループに入り,K線データを常に取得し,K線データ内の BAR の数が 50 以上であると判断し,その後 MACD インディケーターを計算します (効果的インディケーターを計算できない BAR が少ない).その後,K線データとインディケーターデータをチャートに書き込むことができます. グラフオブジェクトのadd関数を使って書き込みます 書き込むとき,add関数の最後のパラメータ -1 が指定されている場合,現在のデータポイントを更新する値です. -1 が転送されない場合,新しいデータポイントが追加されます. K線 BAR が新しく生成されたとき,新しいデータポイントが追加されます. K線 BAR が生成されない場合,最後の BAR と対応する指標が更新されます. (K線 BAR のタイムスタンプを比較することによって決定されます)

直接バックテストできます

img

本物のボットでも動作できます

img

戦略の例アドレス:https://www.fmz.com/strategy/187379

質問があれば メッセージを残してください


関連性

もっと