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

Anda juga boleh menjalankannya dalam masa nyata:

Alamat contoh dasar: https://www.fmz.com/strategy/187379
Jika anda mempunyai sebarang pertanyaan, terima kasih kerana meninggalkan mesej.