Contoh gambar MACD Python

Penulis:Lydia, Dibuat: 2022-12-01 16:54:01, Diperbarui: 2023-09-11 08:59:21

img

Sebenarnya, sebelum membuat kode contoh ini, sudah ada versi JavaScript dari contoh gambar indikator MACD pada kotak strategi dari FMZ Quant Trading Platform:https://www.fmz.com/strategy/151972Namun, sesuai dengan kebutuhan pengguna, kita masih menulis contoh versi Python, yang dapat digunakan sebagai kode referensi dalam strategi pengembangan desain gambar.

Kode sangat sederhana:

'''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 Kamus konfigurasi grafik

PeraturanChartCfgKamus variabel menyimpan informasi konfigurasi grafik, seperti: Berapa banyak garis yang ada dalam grafik ini? (Tiga garis indikator, masing-masing DIF, DEA dan MACD) Apakah ada K-line dalam grafik? (type: candlestick mengacu pada jenis yang ditetapkan sebagai data K-line) Nilai MACD relatif kecil. Jika pasangan perdagangan adalah BTC_USDT, saat menggambar, indikator akan dikompresi bersama, yang sangat tidak nyaman untuk dilihat, sehingga grafik juga harus dikonfigurasi sebagai dua sumbu Y. (Oleh karena itu, ada dua konfigurasi sumbu Y di yAxis, satu adalah sumbu indikator dan yang lainnya adalah sumbu garis K)

Data beban

Dalam strategi contoh ini, fungsi utama mulai menginisialisasi grafik, memanggil fungsi Chart, dan melewati konfigurasi grafik ChartCfg sebagai parameter untuk menghasilkan objek grafik. Kemudian masuk ke loop, mendapatkan data K-line terus-menerus, menilai bahwa jumlah BAR dalam data K-line lebih dari 50, dan kemudian menghitung indikator MACD (terlalu sedikit BAR tidak dapat menghitung indikator yang efektif). Kemudian kita dapat menulis data K-line dan data indikator ke dalam grafik. Kita menulisnya dalam grafik dengan menggunakan fungsi add dari objek grafik. Saat menulis, jika parameter terakhir -1 dari fungsi add ditentukan, itu adalah nilai untuk memperbarui titik data saat ini. Ketika K-line BAR baru dihasilkan, titik data baru ditambahkan. Ketika K-line BAR tidak dihasilkan, BAR terakhir dan indikator yang sesuai diperbarui.

Ini bisa backtested langsung

img

Ini juga bisa berjalan pada bot nyata:

img

Contoh alamat strategi:https://www.fmz.com/strategy/187379

Jika Anda memiliki pertanyaan, silakan tinggalkan pesan.


Berkaitan

Lebih banyak