
양적 거래의 인기와 발전으로 인해 투자자들은 일반적으로 많은 수의 실제 계좌를 관리해야 하는데, 이로 인해 거래 의사 결정, 모니터링 및 실행이 큰 어려움을 겪게 됩니다. FMZ 거래자는 관리 효율성을 높이고 운영의 어려움을 줄이기 위해 FMZ의 확장된 API를 사용하여 그룹 제어를 관리할 수 있습니다. 이 글에서는 양적 거래에서 FMZ 확장 API를 사용하는 이점과 효율적인 그룹 통제 관리를 달성하는 방법을 살펴보겠습니다.
많은 사용자는 관리하고 유지해야 할 자체 클라이언트 계정을 가지고 있습니다. 클라이언트 계정이 많을 경우 보다 편리한 관리 및 유지 관리 방법이 필요합니다(최소 12개 계정, 최대 수백 개 계정). FMZ는 강력한 확장 API를 제공하며, FMZ의 확장된 API를 통한 그룹 제어 관리는 이상적인 선택이 될 것입니다.
FMZ의 확장된 API를 통해 모든 실제 계좌의 거래 활동과 자산 상태를 중앙에서 모니터링할 수 있습니다. 각 계좌의 포지션을 확인하는 것이든, 과거 거래 내역을 확인하는 것이든, 계좌의 손익 상황을 실시간으로 모니터링하는 것이든, 모두 달성 가능합니다.
// 全局变量
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) + "`")
}
전략 매개변수 설계:

상호작용 디자인:

실제 디스크 작업:

그룹 제어 관리를 통해 한 번의 클릭으로 매우 쉽게 거래를 실행할 수 있습니다. 여러 실제 주문을 동시에 매수, 매도, 포지션 마감 및 기타 작업을 수행할 수 있으며, 하나하나 다른 실제 주문을 열지 않아도 됩니다. 이를 통해 실행 효율성이 향상될 뿐만 아니라, 운영상의 오류 가능성도 줄어듭니다.
실시간 목록 정보를 얻은 후, 일련의 미리 정해진 작업을 수행하라는 지침을 실시간 시장에 보낼 수 있습니다. 예를 들어 실시간 청산, 실시간 정지 보호, 실시간 모드 전환 등이 있습니다. FMZ API를 통해 확장할 수 있습니다.CommandRobot성취하다.
우리는 코드를 계속 작성하고, 몇 가지 상호작용을 추가하고 메인 함수에서 API 인터페이스를 확장합니다.CommandRobot전화:
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)
}
}

그런 다음 그룹 제어 전략은 “테스트 1 A”와 “테스트 1 B”에 지침을 보냈습니다.


FMZ의 확장된 API를 사용하면 전략 매개변수를 일괄적으로 쉽게 수정하고 실제 거래를 일괄적으로 시작하거나 중지할 수 있습니다. 기사의 길이가 길기 때문에 전략 매개변수를 일괄적으로 수정하고 시작하는 방법에 대해서는 다음 기사에서 자세히 설명하겠습니다.
양적 거래에서 FMZ의 그룹 제어 관리를 위한 확장된 API를 사용하면 거래자는 여러 실제 계정을 보다 효율적으로 모니터링, 실행 및 조정할 수 있습니다. 이러한 중앙 집중식 관리 방식은 운영 효율성을 개선할 뿐만 아니라, 위험 관리 및 전략 동기화를 보다 효과적으로 구현하는 데 도움이 됩니다. 다수의 실제 계좌를 관리하는 트레이더에게 FMZ의 확장된 API는 강력하고 유연한 도구를 제공하여 양적 거래를 보다 편리하고 제어 가능하게 만들어줍니다.