Như một chiến lược giảng dạy, tốt nhất là phải xem xét thực hành.FMZ.COMSau một số khó khăn, các chiến lược Martingale và lưới có rủi ro và lỗ hổng của riêng mình, và với các tham số được đặt một cách thận trọng, chúng vẫn có thể hữu ích.
Binance Futures Bot
dYdX Bot
Tôi luôn đảm bảo rằng hoàn toàn không có sạc để tạo ra đường cong năng suất.
Chỉ là thiết kế chiến lược của phiên bản đầu tiên tương đối đơn giản và thô. Chỉ có một vị trí và xuất dữ liệu tổng vốn chủ sở hữu trên giao diện. Cột lợi nhuận chỉ in lợi nhuận và lỗ thực hiện, và không tính lỗ nổi. Nhiều sinh viên mới phàn nàn và yêu cầu tối ưu hóa màn hình.
Trong bài viết này, tôi sẽ làm việc với bạn để nâng cấp chiến lược, đã ổn định và thực tế trong nửa năm.
Phiên bản của chiến lược trước khi nâng cấp được ghi lại trong trang
Đây cũng là thói quen phát triển cá nhân của tôi.FMZ.COM.
Bắt đầu nâng cấp!
Trước hết, hãy tối ưu hóa màn hình LogStatus
sau đó, chúng ta tìm điểm đầu vào này và bắt đầu thiết kế mã
Tiếp theo, thêm một đoạn mã lớn ở đây:
var tblPos = {
"type" : "table",
"title" : "position",
"cols" : ["position amount", "position direction", "position average price", "position profit and loss", "contract code", "custom feild / " + SpecifyPosField],
"rows" : []
}
var descType = ["long position", "short position"]
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" : "data",
"cols" : ["current total equity", "actual profit and loss", "current price", "buy order price/amount", "sell order price/amount"],
"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)])
// Update the chart data
if (t && showLine) {
_.each(pos, function(p) {
$.PlotLine(descType[p.Type] + "position price", p.Price)
})
$.PlotLine("buy order price", buyOrder.Price)
$.PlotLine("sell order price", sellOrder.Price)
$.PlotLine("current price", t.Last)
}
// Update the status bar data
LogStatus("time:" + _D() + "\n" + "`" + JSON.stringify(tblPos) + "`" + "\n" + "`" + JSON.stringify(tbl) + "`")
Thay thế trước đó thôLogStatus
export.
LogStatus(_D(), "Current total equity:", currTotalEq, "position:", pos)
Chiến lược đã thêm 2 tham số:
showLine Kiểm tra nó, và bạn có thể sử dụng thư viện vẽ đường để vẽ trên trang bot, và vẽ giá vị trí, giá lệnh đang chờ và đường cong giá hiện tại.
Xác định trường Pos Nó được sử dụng để thiết lập trường dữ liệu vị trí thô cần được hiển thị, bởi vì tên của trường dữ liệu vị trí thô của mỗi nền tảng là khác nhau. Ví dụ như, Binance bot của tôi:
Tôi muốn hiển thịunRealizedProfit
Bạn có thể đặt tham số SpecifyPosField thành unRealizedProfit, và hiển thị nó trong thanh trạng thái.
Thiết kế tương tự như vậy cho phép chiến lược xuất khẩu dữ liệu không đồng nhất một cách thích nghi, cho phép người dùng tùy chỉnh nội dung xuất khẩu.
Bạn có thể xem dữ liệu cần được hiển thị một cái nhìn. Nó là thuận tiện hơn nhiều để quan sát tiến độ giao dịch của chiến lược, giá vị trí hiện tại, lợi nhuận và lỗ, và giá lệnh. Chiến lược này có một số rủi ro nhất định, và bot sẽ thiết lập các tham số cụ thể theo kiểm soát rủi ro của riêng nó, và chịu trách nhiệm cho lợi nhuận và lỗ của riêng nó.