Trước khi làm mã mẫu này, các nhà phát minh đã định lượng chiến lược của sàn giao dịch tại Quảng trường:https://www.fmz.com/strategy/151972Các ví dụ về đồ họa chỉ số MACD có sẵn trong phiên bản JavaScript. Tuy nhiên, người dùng cần phải viết một ví dụ trong phiên bản Python để sử dụng để làm mã tham khảo khi phát triển đồ họa thiết kế.
Có rất nhiều người muốn làm điều đó.
'''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)
Cái này.ChartCfg
Các biến từ điển lưu trữ thông tin cấu hình biểu đồ, ví dụ:
Có bao nhiêu đường trong biểu đồ này? (Ba đường chỉ số, DIF, DEA, MACD)
Có đường K trên biểu đồ này không? (hình chữ: "candlestick" nghĩa là "được thiết lập như một đường K")
Các giá trị MACD đều tương đối nhỏ, nếu cặp giao dịch là BTC_USDT, các chỉ số sẽ bị nén lại khi vẽ biểu đồ rất khó để xem, vì vậy biểu đồ cũng phải được cấu hình theo 2 trục Y. Vì vậy, các đường dây yAxis có hai cấu hình trục Y, một là trục chỉ số và một là trục K.
Trong chính sách ví dụ này, hàm main bắt đầu thực hiện khởi tạo biểu đồ, gọi hàm Chart, cấu hình biểu đồ ChartCfg như một tham số nhập, tạo ra một đồ thị đối tượng biểu đồ. Sau đó đi vào một vòng lặp, liên tục lấy dữ liệu đường K, quyết định số lượng dữ liệu đường K BAR chỉ lớn hơn 50 để tính chỉ số MACD (BAR không tính chỉ số hiệu quả); sau đó bạn có thể viết dữ liệu đường K và dữ liệu chỉ số vào biểu đồ. Viết phương pháp vào biểu đồ bằng cách sử dụng đối tượng biểu đồ add function. Khi ghi, nếu tham số cuối cùng của add được chỉ định là -1, nó sẽ cập nhật giá trị của điểm dữ liệu hiện tại. Nếu không truyền -1, nó sẽ thêm một điểm dữ liệu mới. Một điểm dữ liệu mới được thêm vào khi K-line BAR được tạo ra, và khi K-line BAR không được tạo ra, cập nhật BAR cuối cùng và chỉ số tương ứng.
Có thể chạy trên ổ đĩa thực:
Địa chỉ của ví dụ chiến lược:https://www.fmz.com/strategy/187379
Xin vui lòng để lại ý kiến nếu có bất kỳ câu hỏi nào.