Type/to search
8
Follow
1364
Followers
Использование расширенного API FMZ для достижения эффективного управления групповым контролем в количественной торговле
Discussions
Created 2023-11-19 20:57:18  Updated 2025-05-16 16:49:59
 0
 1184

img

С ростом популярности и развития количественной торговли инвесторам обычно приходится управлять большим количеством реальных счетов, что создает огромные трудности при принятии торговых решений, мониторинге и исполнении. Чтобы повысить эффективность управления и снизить операционные трудности, трейдеры FMZ могут использовать расширенный API FMZ для управления групповым контролем. В этой статье будут рассмотрены преимущества использования расширенного API FMZ в количественной торговле и способы достижения эффективного управления групповым контролем.

У многих пользователей есть свои собственные клиентские аккаунты, которые необходимо управлять и поддерживать. Когда клиентских аккаунтов много, необходим более удобный способ управления и поддержки (минимум дюжина аккаунтов, максимум сотни аккаунтов). FMZ предоставляет мощный расширенный API, и управление групповым контролем через расширенный API FMZ становится идеальным выбором.

Централизованный мониторинг

Благодаря расширенному API FMZ вы можете централизованно отслеживать торговую активность и состояние активов всех реальных счетов. Этого можно добиться, будь то проверка позиций по каждому счету, исторические записи транзакций или мониторинг прибылей и убытков по счету в режиме реального времени.

javascript
// 全局变量 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) + "`") }

Разработка параметров стратегии:

img

Проектирование взаимодействия:

img

Реальная работа диска:

img

Выполнение в один клик

Групповое управление контролем позволяет легко выполнять транзакции одним щелчком мыши. Вы можете покупать, продавать, закрывать позиции и совершать другие операции по нескольким реальным ордерам одновременно, без необходимости открывать разные реальные ордера по одному. Это не только повышает эффективность выполнения, но и снижает вероятность операционных ошибок.

Получив информацию о списке в режиме реального времени, мы можем отправлять инструкции на рынок в режиме реального времени для выполнения ряда заранее определенных операций. Например: ликвидация в реальном времени, защита от приостановки в реальном времени и переключение режимов в реальном времени. Их можно расширить через FMZ API.CommandRobotвыполнить.

Продолжаем писать код, просто добавляем некоторые взаимодействия и расширяем интерфейс API в основной функции.CommandRobotЗвонок:

javascript
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) } }

img

Затем стратегия группового контроля отправляла инструкции «Тесту 1 А» и «Тесту 1 Б».

img

img

Синхронизация политик

Используя расширенный API FMZ, вы можете легко изменять параметры стратегии пакетами, а также запускать и останавливать реальную торговлю пакетами.
Из-за большого объема статьи мы подробно рассмотрим, как пакетно изменять параметры стратегии и запустить ее, в следующей статье.

Заключение

В количественной торговле, используя расширенный API FMZ для управления групповым контролем, трейдеры могут более эффективно отслеживать, исполнять и корректировать несколько реальных счетов. Такой централизованный подход к управлению не только повышает операционную эффективность, но и помогает лучше реализовать контроль рисков и синхронизацию стратегий.
Для трейдеров, управляющих большим количеством реальных счетов, расширенный API FMZ предоставляет мощный и гибкий инструмент, делая количественную торговлю более удобной и контролируемой.

Comment
All comments (0)
No data
No data
  • 1
iPhone Download
Forums
PINE Language
© 2015 - ∞ INVENTOR PTE LTD (SG)