
Trong chiến lược giảng dạy, tất nhiên điều tốt nhất là phải tính đến một số hiệu suất thực tế nhất định. “Chiến lược Martin cho hợp đồng tương lai tiền điện tử” đã được hiển thị trong mục Theo dõi của FMZ.COM trong gần nửa năm. Sau khi trải qua nhiều thăng trầm, người ta nhận thấy rằng chiến lược Martin và lưới có những rủi ro và hạn chế riêng, và các tham số bảo thủ không có nghĩa là không thể sử dụng.


Ông Mạnh đảm bảo rằng hoàn toàn không có việc nạp tiền để “sản xuất” đường cong lợi suất (đầu chó thủ công).
Tuy nhiên, phiên bản đầu tiên của thiết kế chiến lược khá thô sơ. Chỉ có một vị trí và tổng dữ liệu vốn chủ sở hữu đầu ra trên giao diện, và đường cong lợi suất chỉ in ra lợi nhuận và lỗ đã thực hiện, mà không tính đến khoản lỗ thả nổi. Nhiều sinh viên mới phàn nàn về vấn đề này và yêu cầu tối ưu hóa màn hình hiển thị.
Trong bài viết này, chúng ta hãy cùng nâng cấp chiến lược đã được áp dụng thực tế trong nửa năm qua.
Phiên bản chính sách trước khi nâng cấp được ghi lại trong trang Ghi chú của chính sách.

Đây cũng là thói quen phát triển cá nhân của tôi. Rất tiện lợi khi ghi lại mọi chi tiết về phát triển và lặp lại chiến lược trên FMZ.COM.
Bắt đầu nâng cấp!
Đầu tiên, hãy tối ưu hóa hiển thị “thanh trạng thái”. Những sinh viên quen thuộc với tài liệu phát triển FMZ biết rằng dữ liệu thanh trạng thái được hiển thị trên FMZ bằng cách sử dụngLogStatuschức năng. Sau đó, chúng ta tìm điểm vào này và bắt đầu thiết kế mã.

Tiếp theo, thêm một đoạn mã lớn vào đây:
var tblPos = {
"type" : "table",
"title" : "持仓",
"cols" : ["持仓数量", "持仓方向", "持仓均价", "持仓盈亏", "合约代码", "自定义字段 / " + SpecifyPosField],
"rows" : []
}
var descType = ["多头仓位", "空头仓位"]
for (var posIndex = 0 ; posIndex < pos.length ; posIndex++) {
tblPos.rows.push([pos[posIndex].Amount, descType[pos[posIndex].Type], pos[posIndex].Price, pos[posIndex].Profit, pos[posIndex].ContractType, SpecifyPosField == "" ? "--" : pos[posIndex].Info[SpecifyPosField]])
}
var tbl = {
"type" : "table",
"title" : "数据",
"cols" : ["当前总权益", "实际盈亏", "当前价格", "买单价格/数量", "卖单价格/数量"],
"rows" : []
}
var buyOrder = null
var sellOrder = null
for (var orderIndex = 0 ; orderIndex < orders.length ; orderIndex++) {
if (orders[orderIndex].Type == ORDER_TYPE_BUY) {
buyOrder = orders[orderIndex]
} else {
sellOrder = orders[orderIndex]
}
}
var realProfit = currTotalEq - totalEq
if (exchange.GetName() == "Futures_Binance") {
_.each(pos, function(p) {
realProfit += parseFloat(p.Info.unRealizedProfit)
})
}
var t = exchange.GetTicker()
tbl.rows.push([currTotalEq, realProfit, t ? t.Last : "--", (buyOrder.Price + "/" + buyOrder.Amount), (sellOrder.Price + "/" + sellOrder.Amount)])
// 更新图表数据
if (t && showLine) {
_.each(pos, function(p) {
$.PlotLine(descType[p.Type] + "持仓价格", p.Price)
})
$.PlotLine("买单挂单价格", buyOrder.Price)
$.PlotLine("卖单挂单价格", sellOrder.Price)
$.PlotLine("当前价格", t.Last)
}
// 更新状态栏数据
LogStatus("时间:" + _D() + "\n" + "`" + JSON.stringify(tblPos) + "`" + "\n" + "`" + JSON.stringify(tbl) + "`")
Thay thế dầu thô trước đóLogStatusĐầu ra
LogStatus(_D(), "当前总权益:", currTotalEq, "持仓:", pos)
Chiến lược này bổ sung thêm 2 tham số:

Tham số showLine Nếu được chọn, bạn có thể sử dụng thư viện vẽ đường thẳng để vẽ trên trang giao dịch thực, vẽ giá vị thế, giá lệnh chờ và đường cong giá hiện tại.
Tham số SpecifyPosField Được sử dụng để thiết lập các trường dữ liệu vị trí gốc cần hiển thị vì tên của các trường dữ liệu vị trí gốc khác nhau đối với mỗi lần trao đổi. Vì vậy, ở đây chúng ta thiết kế một tham số tùy chỉnh để chỉ định tên trường sẽ được hiển thị. Ví dụ, tài khoản Binance thực của tôi:

Tôi muốn hiển thị trường Info của dữ liệu thông tin vị trí (dữ liệu gốc của giao diện trao đổi)unRealizedProfitThuộc tính, tức là lợi nhuận và lỗ chưa thực hiện của vị thế. Bạn có thể đặt tham số SpecifyPosField thành unRealizedProfit. Nó sẽ được hiển thị trên thanh trạng thái.
Thiết kế tương tự như vậy cho phép chiến lược điều chỉnh đầu ra cho dữ liệu không đồng nhất, cung cấp cho người dùng tùy chọn tùy chỉnh nội dung đầu ra.


Bạn có thể thấy dữ liệu cần hiển thị rõ ràng ngay từ cái nhìn đầu tiên. Việc theo dõi tiến trình giao dịch của chiến lược, giá vị thế hiện tại, lãi lỗ và giá lệnh chờ sẽ thuận tiện hơn nhiều. Chiến lược này có một số rủi ro nhất định. Vui lòng thiết lập các thông số cụ thể theo khả năng kiểm soát rủi ro của riêng bạn và tự chịu lợi nhuận và thua lỗ. Chiến lược này chỉ được tiết lộ cho mục đích giao tiếp và học tập.