avatar of 发明者量化-小小梦 发明者量化-小小梦
フォロー ダイレクトメッセージ
4
フォロー
1271
フォロワー

Python版MACD描画例

作成日:: 2020-02-27 19:18:17, 更新日:: 2023-10-09 22:50:01
comments   0
hits   2701

Python版MACD描画例

Python版MACD描画例

実際、このサンプル コードを作成する前に、Inventor Quantitative Trading Platform Strategy Square を見つけました: https://www.fmz.com/strategy/151972。 MACD インジケーターの描画例の JavaScript バージョンはすでに存在します。ただし、ユーザーの要望に応えて、戦略の開発と設計時に参照コードとして使用できるように、サンプルの 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辞書変数には、チャートの構成情報が格納されます。次に例を示します。 このグラフには何本の線がありますか? (3つのインジケーターライン、すなわちDIF、DEA、MACD) このチャートにはローソク足はありますか? (‘type’: ‘candlestick’ このタイプは K ラインデータに設定することを意味します) MACDの値は比較的小さいため、取引ペアがBTC_USDTの場合、チャートを描画するときに指標が圧縮され、読みにくくなります。そのため、チャートは2つのY軸で構成する必要があります。 (したがって、「yAxis」には 2 つの Y 軸構成があり、1 つはインジケーター軸、もう 1 つは K ライン軸です)

データの読み込み中

この例の戦略では、メイン関数はチャートの初期化の実行を開始し、Chart 関数を呼び出し、チャート構成 ChartCfg をパラメーターとして渡し、チャート オブジェクト チャートを生成します。その後、ループに入り、Kラインデータを継続的に取得します。KラインデータBARの数が50より大きい限り、MACDインジケーターを計算できます(BARが少なすぎると、有効なインジケーターを計算できません)。 。次に、K ライン データとインジケーター データをチャートに書き込むことができます。 チャートに書き込むには、チャート オブジェクトの add メソッドを使用します。 書き込み時に、add 関数の最後のパラメータが -1 の場合、現在のデータ ポイントの値が更新されます。 -1 が渡されない場合、新しいデータ ポイントが追加されます。 K ライン バーが新しく生成されると、新しいデータ ポイントが追加されます。K ライン バーが生成されない場合は、最後のバーと対応するインジケーターが更新されます。 (KラインBARのタイムスタンプを比較して判断)

直接バックテストが可能

Python版MACD描画例

リアルタイムで実行することもできます: Python版MACD描画例

ポリシー例のアドレス: https://www.fmz.com/strategy/187379

ご質問がございましたら、メッセージを残していただければ幸いです。