avatar of 发明者量化-小小梦 发明者量化-小小梦
fokus pada mesej peribadi
4
fokus pada
1271
Pengikut

Contoh lukisan MACD versi Python

Dicipta dalam: 2020-02-27 19:18:17, dikemas kini pada: 2023-10-09 22:50:01
comments   0
hits   2701

Contoh lukisan MACD versi Python

Contoh lukisan MACD versi Python

Sebenarnya, sebelum membuat kod sampel ini, saya menemui Dataran Strategi Platform Dagangan Kuantitatif Pencipta: https://www.fmz.com/strategy/151972. Sudah ada versi JavaScript contoh lukisan penunjuk MACD. Walau bagaimanapun, sebagai tindak balas kepada permintaan pengguna, versi Python bagi contoh ditulis untuk berfungsi sebagai kod rujukan semasa membangunkan dan mereka bentuk strategi.

Kod ini sangat mudah:

'''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)

Kamus konfigurasi carta ChartCfg

iniChartCfgPembolehubah kamus menyimpan maklumat konfigurasi carta, contohnya: Berapakah bilangan baris dalam graf ini? (Tiga garis penunjuk, iaitu DIF, DEA dan MACD) Adakah terdapat sebarang batang lilin dalam carta ini? (‘jenis’: ‘candlestick’ bermaksud menetapkannya sebagai data candlestick) Nilai MACD agak kecil Jika pasangan dagangan ialah BTC_USDT, penunjuk akan dimampatkan bersama-sama semasa melukis carta, yang sangat menyusahkan untuk dibaca, carta mesti dikonfigurasikan dengan dua paksi Y. (Jadi terdapat dua konfigurasi paksi-Y dalam ‘yAxis’, satu ialah paksi penunjuk dan satu lagi ialah paksi K-line)

Memuatkan data

Dalam strategi contoh ini, fungsi utama mula melaksanakan permulaan carta, memanggil fungsi Carta, melepasi konfigurasi carta ChartCfg sebagai parameter dan menjana carta objek carta. Kemudian ia memasuki gelung untuk mendapatkan data talian K secara berterusan Selagi bilangan BAR data talian K lebih daripada 50, penunjuk MACD boleh dikira (jika terdapat terlalu sedikit BAR, tiada penunjuk berkesan boleh dikira) . Kemudian anda boleh menulis data K-line dan data penunjuk ke dalam carta. Untuk menulis pada carta, gunakan kaedah tambah objek carta. Semasa menulis, jika parameter terakhir fungsi tambah ialah -1, nilai titik data semasa akan dikemas kini. Jika -1 tidak diluluskan, titik data baharu akan ditambah. Apabila BAR K-line baru dijana, titik data baharu ditambah Apabila BAR K-line tidak dijana, BAR terakhir dan penunjuk yang sepadan dikemas kini. (Dinilai dengan membandingkan cap masa K-line BAR)

Boleh backtest terus

Contoh lukisan MACD versi Python

Anda juga boleh menjalankannya dalam masa nyata: Contoh lukisan MACD versi Python

Alamat contoh dasar: https://www.fmz.com/strategy/187379

Jika anda mempunyai sebarang pertanyaan, terima kasih kerana meninggalkan mesej.