
Sebenarnya, sebelum membuat contoh kode ini, saya menemukan Inventor Quantitative Trading Platform Strategy Square: https://www.fmz.com/strategy/151972. Sudah ada versi JavaScript dari contoh gambar indikator MACD. Namun, sebagai tanggapan terhadap permintaan pengguna, versi Python dari contoh tersebut ditulis untuk dijadikan kode referensi saat mengembangkan dan merancang strategi.
Kodenya 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画图'
},
'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)
iniChartCfgVariabel kamus menyimpan informasi konfigurasi grafik, misalnya:
Ada berapa garis pada grafik ini? (Tiga garis indikator, yaitu DIF, DEA, MACD)
Apakah ada kandil dalam grafik ini? (‘type’: ‘candlestick’ berarti mengaturnya sebagai data candlestick)
Nilai MACD relatif kecil. Jika pasangan perdagangannya adalah BTC_USDT, indikator akan dipadatkan bersama saat menggambar grafik, yang sangat merepotkan untuk dibaca. Oleh karena itu, grafik harus dikonfigurasi dengan dua sumbu Y. (Jadi ada dua konfigurasi sumbu Y di ‘yAxis’, satu adalah sumbu indikator dan yang lainnya adalah sumbu garis K)
Dalam contoh strategi ini, fungsi utama mulai menjalankan inisialisasi bagan, memanggil fungsi Bagan, meneruskan konfigurasi bagan ChartCfg sebagai parameter, dan menghasilkan bagan objek bagan. Kemudian memasuki loop untuk terus memperoleh data K-line. Selama jumlah BAR data K-line lebih besar dari 50, indikator MACD dapat dihitung (jika BAR terlalu sedikit, tidak ada indikator efektif yang dapat dihitung) . Kemudian Anda dapat menulis data garis K dan data indikator ke dalam grafik. Untuk menulis pada bagan, gunakan metode tambah pada objek bagan. Saat menulis, jika parameter terakhir fungsi tambah adalah -1, nilai titik data saat ini akan diperbarui. Jika -1 tidak dilewatkan, titik data baru akan ditambahkan. Saat K-line BAR baru dibuat, titik data baru ditambahkan. Saat K-line BAR tidak dibuat, BAR terakhir dan indikator terkait diperbarui. (Dinilai dengan membandingkan cap waktu K-line BAR)

Anda juga dapat menjalankannya secara real time:

Contoh alamat kebijakan: https://www.fmz.com/strategy/187379
Jika Anda memiliki pertanyaan, terima kasih telah meninggalkan pesan.