
Con la popularidad y el desarrollo del trading cuantitativo, los inversores generalmente necesitan administrar una gran cantidad de cuentas reales, lo que genera enormes desafíos para la toma de decisiones, el seguimiento y la ejecución del trading. Para mejorar la eficiencia de la gestión y reducir la dificultad operativa, los comerciantes de FMZ pueden utilizar la API extendida de FMZ para la gestión del control de grupo. Este artículo explorará las ventajas de utilizar la API extendida de FMZ en el comercio cuantitativo y cómo lograr una gestión eficiente del control de grupo.
Muchos usuarios tienen sus propias cuentas de cliente que necesitan ser administradas y mantenidas. Cuando hay una gran cantidad de cuentas de cliente, se necesita una forma más conveniente de administración y mantenimiento (al menos una docena de cuentas y, como máximo, cientos de cuentas). FMZ proporciona una potente API extendida, y la gestión del control de grupo a través de la API extendida de FMZ se convierte en una opción ideal.
A través de la API extendida de FMZ, puedes monitorear de forma centralizada las actividades comerciales y el estado de los activos de todas las cuentas reales. Ya sea verificando las posiciones de cada cuenta, registros históricos de transacciones o monitoreando en tiempo real la situación de ganancias y pérdidas de la cuenta, es posible lograrlo.
// 全局变量
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) + "`")
}
Diseño de parámetros de estrategia:

Diseño de interacción:

Operación del disco real:

La gestión de control de grupo hace que sea muy fácil ejecutar transacciones con un solo clic. Puede comprar, vender, cerrar posiciones y realizar otras operaciones en múltiples órdenes reales al mismo tiempo sin tener que abrir diferentes órdenes reales una por una. Esto no sólo mejora la eficiencia de la ejecución, sino que también reduce la posibilidad de errores operativos.
Después de obtener la información de la lista en tiempo real, podemos enviar instrucciones al mercado en tiempo real para realizar una serie de operaciones predeterminadas. Por ejemplo: liquidación en tiempo real, protección de suspensión en tiempo real y cambio de modo en tiempo real. Estos se pueden ampliar a través de la API FMZCommandRobotlograr.
Continuamos escribiendo código, solo agregamos algunas interacciones y ampliamos la interfaz API en la función principal.CommandRobotLa llamada:
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)
}
}

La estrategia de control de grupo luego envió instrucciones a “Prueba 1 A” y “Prueba 1 B”.


Al utilizar la API extendida de FMZ, puede modificar fácilmente los parámetros de la estrategia en lotes e iniciar y detener operaciones reales en lotes. Debido a la extensión del artículo, discutiremos en detalle cómo modificar por lotes los parámetros de la estrategia y comenzaremos en el próximo artículo.
En el trading cuantitativo, al utilizar la API extendida de FMZ para la gestión del control de grupos, los traders pueden monitorear, ejecutar y ajustar múltiples cuentas reales de manera más eficiente. Este enfoque de gestión centralizada no sólo mejora la eficiencia operativa, sino que también ayuda a implementar mejor el control de riesgos y la sincronización de estrategias. Para los traders que gestionan una gran cantidad de cuentas reales, la API extendida de FMZ les proporciona una herramienta poderosa y flexible, haciendo que el trading cuantitativo sea más conveniente y controlable.