
Với sự phổ biến và phát triển của giao dịch định lượng, các nhà đầu tư thường cần quản lý một số lượng lớn tài khoản thực, điều này mang lại những thách thức rất lớn cho việc ra quyết định, giám sát và thực hiện giao dịch. Để nâng cao hiệu quả quản lý và giảm khó khăn trong hoạt động, các nhà giao dịch trên FMZ có thể sử dụng API mở rộng của FMZ để quản lý kiểm soát nhóm. Bài viết này sẽ khám phá những lợi thế của việc sử dụng API mở rộng FMZ trong giao dịch định lượng và cách đạt được quản lý kiểm soát nhóm hiệu quả.
Nhiều người dùng có tài khoản khách hàng riêng cần được quản lý và duy trì. Khi có nhiều tài khoản khách hàng, cần có cách quản lý và duy trì thuận tiện hơn (ít nhất là một chục tài khoản và nhiều nhất là hàng trăm tài khoản). FMZ cung cấp API mở rộng mạnh mẽ và việc quản lý kiểm soát nhóm thông qua API mở rộng của FMZ trở thành lựa chọn lý tưởng.
Thông qua API mở rộng của FMZ, bạn có thể theo dõi tập trung các hoạt động giao dịch và trạng thái tài sản của tất cả các tài khoản thực. Cho dù đó là kiểm tra vị trí của từng tài khoản, hồ sơ giao dịch lịch sử hay theo dõi tình hình lãi lỗ của tài khoản theo thời gian thực, thì đều có thể thực hiện được.
// 全局变量
var isLogMsg = true // 控制日志是否打印
var isDebug = false // 调试模式
var arrIndexDesc = ["all", "running", "stop"]
var descRobotStatusCode = ["空闲中", "运行中", "停止中", "已退出", "被停止", "策略有错误"]
var dicRobotStatusCode = {
"all" : -1,
"running" : 1,
"stop" : 4,
}
// 扩展的日志函数
function LogControl(...args) {
if (isLogMsg) {
Log(...args)
}
}
// FMZ扩展API调用函数
function callFmzExtAPI(accessKey, secretKey, funcName, ...args) {
var params = {
"version" : "1.0",
"access_key" : accessKey,
"method" : funcName,
"args" : JSON.stringify(args),
"nonce" : Math.floor(new Date().getTime())
}
var data = `${params["version"]}|${params["method"]}|${params["args"]}|${params["nonce"]}|${secretKey}`
params["sign"] = Encode("md5", "string", "hex", data)
var arrPairs = []
for (var k in params) {
var pair = `${k}=${params[k]}`
arrPairs.push(pair)
}
var query = arrPairs.join("&")
var ret = null
try {
LogControl("url:", baseAPI + "/api/v1?" + query)
ret = JSON.parse(HttpQuery(baseAPI + "/api/v1?" + query))
if (isDebug) {
LogControl("Debug:", ret)
}
} catch(e) {
LogControl("e.name:", e.name, "e.stack:", e.stack, "e.message:", e.message)
}
Sleep(100) // 控制频率
return ret
}
// 获取指定策略Id的所有运行中的实盘信息
function getAllRobotByIdAndStatus(accessKey, secretKey, strategyId, robotStatusCode, maxRetry) {
var retryCounter = 0
var length = 100
var offset = 0
var arr = []
if (typeof(maxRetry) == "undefined") {
maxRetry = 10
}
while (true) {
if (retryCounter > maxRetry) {
LogControl("超过最大重试次数", maxRetry)
return null
}
var ret = callFmzExtAPI(accessKey, secretKey, "GetRobotList", offset, length, robotStatusCode)
if (!ret || ret["code"] != 0) {
Sleep(1000)
retryCounter++
continue
}
var robots = ret["data"]["result"]["robots"]
for (var i in robots) {
if (robots[i].strategy_id != strategyId) {
continue
}
arr.push(robots[i])
}
if (robots.length < length) {
break
}
offset += length
}
return arr
}
function main() {
var robotStatusCode = dicRobotStatusCode[arrIndexDesc[robotStatus]]
var robotList = getAllRobotByIdAndStatus(accessKey, secretKey, strategyId, robotStatusCode)
if (!robotList) {
Log("获取实盘数据失败")
}
var robotTbl = {"type": "table", "title": "实盘列表", "cols": [], "rows": []}
robotTbl.cols = ["实盘Id", "实盘名称", "实盘状态", "策略名称", "实盘收益"]
_.each(robotList, function(robotInfo) {
robotTbl.rows.push([robotInfo.id, robotInfo.name, descRobotStatusCode[robotInfo.status], robotInfo.strategy_name, robotInfo.profit])
})
LogStatus(_D(), "`" + JSON.stringify(robotTbl) + "`")
}
Thiết kế tham số chiến lược:

Thiết kế tương tác:

Hoạt động đĩa thực:

Quản lý kiểm soát nhóm giúp thực hiện giao dịch dễ dàng chỉ bằng một cú nhấp chuột. Bạn có thể mua, bán, đóng vị thế và thực hiện các hoạt động khác trên nhiều lệnh thực cùng lúc mà không cần phải mở từng lệnh thực khác nhau. Điều này không chỉ cải thiện hiệu quả thực hiện mà còn giảm khả năng xảy ra lỗi vận hành.
Sau khi có được thông tin danh sách theo thời gian thực, chúng ta có thể gửi hướng dẫn đến thị trường theo thời gian thực để thực hiện một loạt các hoạt động được xác định trước. Ví dụ: thanh lý thời gian thực, bảo vệ đình chỉ thời gian thực và chuyển đổi chế độ thời gian thực. Những điều này có thể được mở rộng thông qua API FMZCommandRobothoàn thành.
Chúng tôi tiếp tục viết mã, chỉ thêm một số tương tác và mở rộng giao diện API trong hàm chínhCommandRobotLời kêu gọi:
function main() {
var robotStatusCode = dicRobotStatusCode[arrIndexDesc[robotStatus]]
var robotList = getAllRobotByIdAndStatus(accessKey, secretKey, strategyId, robotStatusCode)
if (!robotList) {
Log("获取实盘数据失败")
}
var robotTbl = {"type": "table", "title": "实盘列表", "cols": [], "rows": []}
robotTbl.cols = ["实盘Id", "实盘名称", "实盘状态", "策略名称", "实盘收益"]
_.each(robotList, function(robotInfo) {
robotTbl.rows.push([robotInfo.id, robotInfo.name, descRobotStatusCode[robotInfo.status], robotInfo.strategy_name, robotInfo.profit])
})
LogStatus(_D(), "`" + JSON.stringify(robotTbl) + "`")
while(true) {
LogStatus(_D(), ", 等待接收交互命令", "\n", "`" + JSON.stringify(robotTbl) + "`")
var cmd = GetCommand()
if (cmd) {
var arrCmd = cmd.split(":")
if (arrCmd.length == 1 && cmd == "coverAll") {
_.each(robotList, function(robotInfo) {
var strCmd = "清仓" // 可以定义所需的消息格式
if (robotInfo.status != 1) { // 只有”活着“的实盘才能接收命令
return
}
var ret = callFmzExtAPI(accessKey, secretKey, "CommandRobot", parseInt(robotInfo.id), strCmd)
LogControl("向id:", robotInfo.id, "的实盘发送命令:", strCmd, ", 执行结果:", ret)
})
}
}
Sleep(1000)
}
}

Chiến lược kiểm soát nhóm sau đó gửi hướng dẫn đến “Thử nghiệm 1 A” và “Thử nghiệm 1 B”.


Khi sử dụng API mở rộng của FMZ, bạn có thể dễ dàng sửa đổi các tham số chiến lược theo từng đợt và bắt đầu hoặc dừng giao dịch thực tế theo từng đợt. Do bài viết khá dài nên chúng tôi sẽ thảo luận chi tiết về cách sửa đổi hàng loạt các tham số chiến lược và bắt đầu thực hiện trong bài viết tiếp theo.
Trong giao dịch định lượng, bằng cách sử dụng API mở rộng của FMZ để quản lý kiểm soát nhóm, các nhà giao dịch có thể theo dõi, thực hiện và điều chỉnh nhiều tài khoản thực hiệu quả hơn. Phương pháp quản lý tập trung này không chỉ cải thiện hiệu quả hoạt động mà còn giúp thực hiện kiểm soát rủi ro và đồng bộ hóa chiến lược tốt hơn. Đối với các nhà giao dịch quản lý số lượng lớn tài khoản thực, API mở rộng của FMZ cung cấp cho họ một công cụ mạnh mẽ và linh hoạt, giúp giao dịch định lượng trở nên thuận tiện và dễ kiểm soát hơn.