Trên thực tế, trước khi tạo mã ví dụ này, đã có một phiên bản JavaScript của ví dụ vẽ chỉ số MACD trên hình vuông chiến lược của Nền tảng giao dịch FMZ Quant:https://www.fmz.com/strategy/151972Tuy nhiên, theo nhu cầu của người dùng, chúng tôi vẫn viết một ví dụ về phiên bản Python, có thể được sử dụng như là mã tham chiếu trong các chiến lược phát triển thiết kế vẽ.
Mã rất đơn giản:
'''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)
CácChartCfg
Từ điển biến lưu trữ thông tin cấu hình biểu đồ, chẳng hạn như:
Có bao nhiêu đường trong biểu đồ này? (Ba đường chỉ số, DIF, DEA và MACD tương ứng)
Có một đường K trong biểu đồ không? (
Trong chiến lược ví dụ này, chức năng chính bắt đầu khởi tạo biểu đồ, nó gọi chức năng Chart, và truyền cấu hình biểu đồ ChartCfg như một tham số để tạo ra đối tượng biểu đồ. Sau đó nó đi vào vòng lặp, lấy dữ liệu đường K liên tục, đánh giá rằng số lượng BAR trong dữ liệu đường K lớn hơn 50, và sau đó tính toán các chỉ số MACD (quá ít BAR không thể tính toán các chỉ số hiệu quả). Sau đó chúng ta có thể viết dữ liệu đường K và dữ liệu chỉ số vào biểu đồ. Chúng ta viết nó trong biểu đồ bằng cách sử dụng hàm cộng của đối tượng biểu đồ. Khi viết, nếu tham số cuối cùng -1 của hàm add được chỉ định, đó là giá trị để cập nhật điểm dữ liệu hiện tại. Nếu -1 không được chuyển, một điểm dữ liệu mới được thêm vào. Khi K-line BAR được tạo ra mới, một điểm dữ liệu mới được thêm vào. Khi K-line BAR không được tạo ra, BAR cuối cùng và chỉ số tương ứng được cập nhật. (Được xác định bằng cách so sánh dấu thời gian của K-line BAR)
Nó cũng có thể chạy trên một robot thực sự:
Ví dụ địa chỉ chiến lược:https://www.fmz.com/strategy/187379
Nếu bạn có bất kỳ câu hỏi nào, xin vui lòng để lại tin nhắn.