
Angesichts der Popularität und Entwicklung des quantitativen Handels müssen Anleger in der Regel eine große Anzahl realer Konten verwalten, was enorme Herausforderungen für die Entscheidungsfindung, Überwachung und Ausführung von Handelsgeschäften mit sich bringt. Um die Verwaltungseffizienz zu verbessern und Betriebsschwierigkeiten zu reduzieren, können Händler auf FMZ die erweiterte API von FMZ für die Gruppenkontrollverwaltung verwenden. In diesem Artikel werden die Vorteile der Verwendung der erweiterten FMZ-API im quantitativen Handel und die Erzielung eines effizienten Gruppenkontrollmanagements untersucht.
Viele Benutzer haben eigene Kundenkonten, die verwaltet und gepflegt werden müssen. Wenn es eine große Anzahl von Kundenkonten gibt, ist eine bequemere Art der Verwaltung und Pflege erforderlich (mindestens ein Dutzend Konten und höchstens Hunderte von Konten). FMZ bietet eine leistungsstarke erweiterte API und die Gruppensteuerungsverwaltung über die erweiterte API von FMZ ist eine ideale Wahl.
Über die erweiterte API der FMZ können Sie die Handelsaktivitäten und den Vermögensstand aller Realkonten zentral überwachen. Ob es sich um die Überprüfung der Positionen jedes Kontos, historischer Transaktionsaufzeichnungen oder die Echtzeitüberwachung der Gewinn- und Verlustsituation des Kontos handelt, es ist möglich.
// 全局变量
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) + "`")
}
Gestaltung der Strategieparameter:

Interaktionsdesign:

Realer Festplattenbetrieb:

Durch die Gruppenkontrollverwaltung ist die Ausführung von Transaktionen ganz einfach mit einem Klick möglich. Sie können mit mehreren realen Aufträgen gleichzeitig kaufen, verkaufen, Positionen schließen und andere Vorgänge ausführen, ohne verschiedene reale Aufträge einzeln eröffnen zu müssen. Dadurch wird nicht nur die Ausführungseffizienz verbessert, sondern auch die Möglichkeit von Bedienungsfehlern verringert.
Nachdem wir die Echtzeit-Listeninformationen erhalten haben, können wir Anweisungen an den Echtzeitmarkt senden, um eine Reihe vorgegebener Vorgänge auszuführen. Zum Beispiel: Liquidation in Echtzeit, Aussetzungsschutz in Echtzeit und Moduswechsel in Echtzeit. Diese können durch die FMZ API erweitert werdenCommandRoboterreichen.
Wir schreiben weiterhin Code, fügen einfach einige Interaktionen hinzu und erweitern die API-Schnittstelle in der HauptfunktionCommandRobotDer Aufruf:
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)
}
}

Die Gruppenkontrollstrategie schickte dann Anweisungen an „Test 1 A“ und „Test 1 B“.


Mithilfe der erweiterten API von FMZ können Sie Strategieparameter problemlos stapelweise ändern und den realen Handel stapelweise starten und stoppen. Aufgrund der Länge des Artikels werden wir im nächsten Artikel ausführlich besprechen, wie die Strategieparameter stapelweise geändert und gestartet werden können.
Im quantitativen Handel können Händler durch die Verwendung der erweiterten API von FMZ für das Gruppenkontrollmanagement mehrere reale Konten effizienter überwachen, ausführen und anpassen. Dieser zentralisierte Managementansatz verbessert nicht nur die betriebliche Effizienz, sondern trägt auch dazu bei, die Risikokontrolle und Strategiesynchronisierung besser umzusetzen. Für Händler, die eine große Anzahl realer Konten verwalten, bietet die erweiterte API von FMZ ein leistungsstarkes und flexibles Tool, das den quantitativen Handel bequemer und kontrollierbarer macht.