
Chúng ta hãy tiếp tục với bài viết trước:Thiết kế hệ thống quản lý đồng bộ đơn hàng dựa trên định lượng FMZ (1)Sau khi thảo luận với các chuyên gia, chúng tôi bắt đầu thiết kế chiến lược sao chép giao dịch đồng bộ.
Hãy xem xét những vấn đề thiết kế sau:
var isStopFollow = false // 用于标记当前是否跟单
var reStartPwd = null // 用于记录重启密码

Sau đó thêm các điều khiển tương tác trên trang chỉnh sửa chiến lược để tạm dừng/khởi động lại chiến lược (nó không dừng giao dịch thực tế mà chỉ tạm dừng logic, dừng theo lệnh và không làm gì cả). Khi tạm dừng, bạn có thể đặt mật khẩu tạm dừng để ngay cả khi bạn có API KEY mở rộng订单同步管理系统类库(Single Server)Ngay cả một phiên giao dịch thực sự cũng không thể đánh thức được chiến lược của bạn. Khi khởi động lại giao dịch sao chép, hãy nhập mật khẩu được cài đặt sẵn để đánh thức chức năng giao dịch sao chép.
Mã triển khai các chức năng liên quan:
...
// 判断交互指令
if (arr.length == 2) {
// 带控件的按钮
if (arr[0] == "stop/restart") {
// 暂停/重启跟单
if (!isStopFollow) {
isStopFollow = true
reStartPwd = arr[1]
Log("已经停止跟单,", "设置的重启密码为:", reStartPwd, "#FF0000")
} else if (isStopFollow && arr[1] == reStartPwd) {
isStopFollow = false
reStartPwd = null
Log("已经重启跟单,", "清空重启密码。", "#FF0000")
} else if (isStopFollow && arr[1] != reStartPwd) {
Log("重启密码错误!")
}
}
continue
}

specifiedAmount: chỉ định số lượng của lệnh tiếp theo. Giá trị mặc định là -1, nghĩa là không chỉ định.
zoomAmountRatio: phóng to theo số lượng đơn hàng trong tín hiệu đã gửi, ví dụ, tín hiệu đã gửi là:ETH_USDT,swap,buy,1, nhân số lượng đặt hàng với zoomAmountRatio. Mặc định là -1, nghĩa là không có chức năng thay đổi tỷ lệ.
var amount = specifiedAmount == -1 ? action.amount : specifiedAmount
amount = zoomAmountRatio == -1 ? amount : amount * zoomAmountRatio
Ở đây chúng tôi thực hiện số lượng đơn hàng cần được theo dõi trong tín hiệu nhận đượcPhónghoặcChỉ định các giá trị cụ thể。
Đặt lệnh giao ngay bằng thư viện lớp: https://www.fmz.com/strategy/10989 Thư viện lệnh tương lai: https://www.fmz.com/strategy/203258
function trade(action) {
// 切换交易对,设置合约
exchange.SetCurrency(action.symbol)
if (action.ct != "spot") {
exchange.SetContractType(action.ct)
}
var retTrade = null
var amount = specifiedAmount == -1 ? action.amount : specifiedAmount
amount = zoomAmountRatio == -1 ? amount : amount * zoomAmountRatio
if (action.direction == "buy") {
retTrade = action.ct == "spot" ? $.Buy(amount) : $.OpenLong(exchange, action.ct, amount)
} else if (action.direction == "sell") {
retTrade = action.ct == "spot" ? $.Sell(amount) : $.OpenShort(exchange, action.ct, amount)
} else if (action.direction == "closebuy") {
retTrade = action.ct == "spot" ? $.Sell(amount) : $.CoverLong(exchange, action.ct, amount)
} else if (action.direction == "closesell") {
retTrade = action.ct == "spot" ? $.Buy(amount) : $.CoverShort(exchange, action.ct, amount)
}
return retTrade
}
Vì vậy, bạn thấy đấy, để đặt hàng chỉ cần một câu:$.Sell(amount) 、$.Buy(amount) 、 $.OpenLong(exchange, action.ct, amount) .. Chờ đợi.
Trước订单同步管理系统(Synchronous Server)Mã tạm thời là như sau:

Bắt đầu thiết kế lại ngay bây giờ订单同步管理系统(Synchronous Server):
// 全局变量
var isStopFollow = false
var reStartPwd = null
function trade(action) {
// 切换交易对,设置合约
exchange.SetCurrency(action.symbol)
if (action.ct != "spot") {
exchange.SetContractType(action.ct)
}
var retTrade = null
var amount = specifiedAmount == -1 ? action.amount : specifiedAmount
amount = zoomAmountRatio == -1 ? amount : amount * zoomAmountRatio
if (action.direction == "buy") {
retTrade = action.ct == "spot" ? $.Buy(amount) : $.OpenLong(exchange, action.ct, amount)
} else if (action.direction == "sell") {
retTrade = action.ct == "spot" ? $.Sell(amount) : $.OpenShort(exchange, action.ct, amount)
} else if (action.direction == "closebuy") {
retTrade = action.ct == "spot" ? $.Sell(amount) : $.CoverLong(exchange, action.ct, amount)
} else if (action.direction == "closesell") {
retTrade = action.ct == "spot" ? $.Buy(amount) : $.CoverShort(exchange, action.ct, amount)
}
return retTrade
}
function parseCmd(cmd) {
var objAction = {}
// 解析cmd ,例如:ETH_USDT,swap,buy,1
var arr = cmd.split(",")
if (arr.length != 4) {
return null
}
objAction.symbol = arr[0]
objAction.ct = arr[1]
objAction.direction = arr[2]
objAction.amount = arr[3]
return objAction
}
function main() {
// 清除所有日志
LogReset(1)
if (isSimulateOKEX) {
exchange.IO("simulate", true)
Log("切换到OKEX模拟盘!")
}
// 设置精度
exchange.SetPrecision(pricePrecision, amountPrecision)
// 检查缩放、指定不能同时设置
if (specifiedAmount != -1 && zoomAmountRatio != -1) {
throw "不能同时指定同步量和缩放量"
}
while (true) {
var cmd = GetCommand()
if (cmd) {
Log("cmd: ", cmd)
var arr = cmd.split(":")
// 判断交互指令
if (arr.length == 2) {
// 带控件的按钮
if (arr[0] == "stop/restart") {
// 暂停/重启跟单
if (!isStopFollow) {
isStopFollow = true
reStartPwd = arr[1]
Log("已经停止跟单,", "设置的重启密码为:", reStartPwd, "#FF0000")
} else if (isStopFollow && arr[1] == reStartPwd) {
isStopFollow = false
reStartPwd = null
Log("已经重启跟单,", "清空重启密码。", "#FF0000")
} else if (isStopFollow && arr[1] != reStartPwd) {
Log("重启密码错误!")
}
}
continue
}
// 允许跟单
if (!isStopFollow) {
// 解析跟单信号交互指令
var objAction = parseCmd(cmd)
if (objAction) {
// 解析正确
var ret = trade(objAction)
} else {
Log("错误的信号指令 cmd:", cmd)
}
}
}
// 显示跟单情况
LogStatus(_D(), isStopFollow ? "停止同步" : "保持同步", "\n")
Sleep(1000)
}
}
Lần này, tài khoản có lệnh sẽ sử dụng tài khoản Binance thật để thử nghiệm, còn tài khoản thật để sao chép lệnh sẽ sử dụng tài khoản OKEX. Chúng tôi vẫn sử dụng hàm kiểm tra được sử dụng trong bài viết trước (订单同步管理系统类库(Single Server)Trong mẫumainchức năng).

Chúng tôi vừa thay đổi hướng giao dịch sang bán khống và khối lượng giao dịch thành 0,003 (hợp đồng dựa trên USDT của Binance có thể đặt lệnh theo số thập phân). Tuy nhiên, tài khoản OKEX phải là số nguyên (lệnh giao dịch OKEX phải được đặt ở dạng số nguyên), vì vậy tôi chỉ định các tham số chiến lượcspecifiedAmountlà 1.

订单同步管理系统类库(Single Server)Chức năng kiểm tra kích hoạt một giao dịch thực tế.

Chiến lược sao chép lệnh theo thời gian thực nhận được tín hiệu và thực hiện hành động sao chép:

Sàn giao dịch mở lệnh tương ứng.

Tiếp theo, hãy thử đóng vị thế và thay đổi hướng lệnh trong hàm chính thử nghiệm để đóng vị thế bán khống 0,003 hợp đồng.

Sau đó chạy lại đĩa thực sự chịu trách nhiệm lấy lệnh (订单同步管理系统类库(Single Server))。

Hoạt động tương tự cũng được kích hoạt bằng cách sao chép thứ tự thực:

Địa chỉ chính sách: Thư viện lớp hệ thống quản lý đồng bộ hóa đơn hàng (Máy chủ đơn) Đặt hàng máy chủ đồng bộ
Thiết kế chiến lược chỉ dành cho mục đích giao tiếp và học tập. Vui lòng sửa đổi, điều chỉnh và tối ưu hóa theo nhu cầu sản xuất thực tế.