Sebelum membuat kod contoh ini, pencipta menjumlahkan strategi platform perdagangan Square:https://www.fmz.com/strategy/151972◦ Terdapat contoh gambar pegangan MACD versi JavaScript. Walau bagaimanapun, pengguna memerlukan untuk menulis contoh versi Python untuk digunakan sebagai kod rujukan ketika mereka membangunkan grafik reka bentuk strategi.
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画图'
},
'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)
Yang iniChartCfg
Variabel kamus menyimpan maklumat konfigurasi grafik, seperti:
Berapa banyak garis dalam carta ini? (Tiga garis, iaitu DIF, DEA, MACD)
Adakah terdapat garis K di dalam grafik ini?
Nilai MACD adalah lebih kecil, jika pasangan dagangan adalah BTC_USDT, indikator akan tertekan bersama-sama ketika menggambar, jadi grafik juga disusun sebagai 2 paksi Y.
Dalam strategi contoh ini, fungsi utama memulakan inisialisasi carta, memanggil fungsi Chart, mengkonfigurasi carta ChartCfg sebagai parameter yang dihantar, menghasilkan objek carta. Kemudian masuk ke dalam gelung, terus mendapatkan data baris K, memutuskan jika bilangan baris K data BAR lebih besar daripada 50 boleh dikira sebagai penunjuk MACD (BAR tidak boleh dikira sebagai penunjuk yang tidak sah); kemudian data baris K dan data penunjuk boleh ditulis ke dalam carta. Menulis kaedah pada carta menggunakan objek carta dengan fungsi add. Apabila ditulis, jika parameter terakhir fungsi add ditetapkan, -1 untuk mengemas kini nilai titik data semasa; jika tidak dihantar, -1 untuk menambah titik data baru. Satu titik data baru ditambahkan apabila K baris BAR baru dihasilkan, dan apabila K baris BAR tidak dihasilkan, update BAR terakhir dan penunjuk yang sepadan.
Ia juga boleh digunakan pada cakera:
Contoh strategi di:https://www.fmz.com/strategy/187379
Jika anda mempunyai sebarang soalan, terima kasih.