Sumber dimuat naik... memuat...

Contoh lukisan MACD Python

Penulis:FMZ~Lydia, Dicipta: 2022-12-01 16:54:01, Dikemas kini: 2023-09-11 08:59:21

img

Sebenarnya, sebelum membuat kod contoh ini, sudah ada versi JavaScript contoh lukisan penunjuk MACD pada kotak strategi Platform Dagangan Kuantum FMZ:https://www.fmz.com/strategy/151972. Walau bagaimanapun, mengikut penggunas keperluan, kita masih menulis contoh versi Python, yang boleh digunakan sebagai kod rujukan dalam strategi pembangunan reka bentuk lukisan.

Kodnya 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 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 carta

PeraturanChartCfgKamus pemboleh ubah menyimpan maklumat konfigurasi carta, seperti: Berapa banyak garis terdapat dalam carta ini? (Tiga garis penunjuk, DIF, DEA dan MACD masing-masing) Adakah terdapat K-garis dalam carta? (type: candlestick merujuk kepada jenis yang ditetapkan sebagai data K-garis) Nilai MACD agak kecil. Jika pasangan dagangan adalah BTC_USDT, semasa menggambar, penunjuk akan disampatkan bersama, yang sangat tidak selesa untuk dilihat, jadi carta juga harus dikonfigurasi sebagai dua paksi Y. (Oleh itu, terdapat dua konfigurasi paksi Y di yAxis, satu adalah paksi penunjuk dan yang lain adalah paksi garis K)

Data beban

Dalam strategi contoh ini, fungsi utama bermula untuk memulakan carta, ia memanggil fungsi Carta, dan lulus konfigurasi carta ChartCfg sebagai parameter untuk menjana objek carta. Kemudian ia memasuki gelung, mendapatkan data K-garis secara berterusan, menilai bahawa bilangan BAR dalam data K-garis lebih daripada 50, dan kemudian mengira penunjuk MACD (terlalu sedikit BAR tidak dapat mengira penunjuk berkesan). Kemudian kita boleh menulis data K-garis dan data penunjuk ke dalam carta. Kita tulis dalam carta dengan menggunakan fungsi tambah objek carta. Apabila menulis, jika parameter terakhir -1 fungsi tambah ditentukan, ia adalah nilai untuk mengemas kini titik data semasa. Apabila K-line BAR baru dijana, titik data baru ditambahkan. Apabila K-line BAR tidak dijana, BAR terakhir dan penunjuk yang sepadan dikemas kini. (Ditentukan dengan membandingkan cap masa K-line BAR)

Ia boleh backtested terus

img

Ia juga boleh berjalan pada bot sebenar:

img

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

Jika anda mempunyai sebarang soalan, sila tinggalkan mesej.


Berkaitan

Lebih lanjut