Python版MACD図示例

作者: リン・ハーン小さな夢, 作成日: 2020-02-27 19:18:17, 更新日: 2023-10-09 22:50:01

img

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の3つの線) このグラフにはK線がありますか? (type:candlestick) このタイプはK線に設定されたデータです. MACD値は比較的小さいので,取引対がBTC_USDTである場合,グラフを描くときに指針が圧縮されることが非常に不都合であるため,グラフは2つのY軸に配置される.

データをアップロード

この例の策略では,main関数はグラフの初期化を実行し,Chart関数を呼び,グラフ配置ChartCfgを参数として入力し,グラフオブジェクトチャートを生成します. そして,ループに入ると,K線データを絶え間なく取得し,K線データのBAR数が50以上であればMACD指標を計算できます.その後,K線データと指標データをグラフに書き込むことができます. Chart object を使って方法を書く add 関数. 書き込み時に,add関数の最後の参数が指定されている場合-1,現在のデータポイントを更新する数値である.転送しない場合は-1,新しいデータポイントを追加する. K線BARが新しく生成されたとき,新しいデータポイントを追加し,K線BARが生成されていないとき,最後のBARと対応する指標を更新します.

直接再測定できます

img

リアルディスクでも実行できます:img

戦略例の住所:https://www.fmz.com/strategy/187379

疑問があれば,ご連絡ください.


関連性

もっと