Mit der Popularisierung und Entwicklung des quantitativen Handels müssen Anleger häufig eine große Anzahl von Live-Konten verwalten, was große Herausforderungen für Handelsentscheidungen, Überwachung und Ausführung mit sich bringt. Um die Managementeffizienz zu verbessern und die operativen Schwierigkeiten zu reduzieren, können Händler auf FMZ die erweiterte API von FMZ für das Gruppenkontrollmanagement verwenden. In diesem Artikel werden wir die Vorteile der Verwendung der erweiterten API von FMZ im quantitativen Handel und wie wir ein effizientes Gruppenkontrollmanagement erreichen, diskutieren.
Viele Benutzer haben ihre eigenen Live-Kundenkonten, die verwaltet und gewartet werden müssen. Wenn es viele Live-Kundenkonten gibt, ist eine bequemere Art und Weise erforderlich, sie zu verwalten (so wenige wie Dutzende oder so viele wie Hunderte). FMZ bietet eine leistungsstarke erweiterte API; die Verwendung dieser für das Gruppenkontrollmanagement ist eine ideale Wahl geworden.
Durch FMZ
// Global variable
var isLogMsg = true // Control whether the log is printed
var isDebug = false // Debug mode
var arrIndexDesc = ["all", "running", "stop"]
var descRobotStatusCode = ["In idle", "Running", "Stopping", "Exited", "Stopped", "Strategy error"]
var dicRobotStatusCode = {
"all" : -1,
"running" : 1,
"stop" : 4,
}
// Extended log function
function LogControl(...args) {
if (isLogMsg) {
Log(...args)
}
}
// FMZ extended API call function
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) // Control frequency
return ret
}
// Obtain all live trading information of the specified strategy 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("Exceeded the maximum number of retries", 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("Failed to obtain live trading data")
}
var robotTbl = {"type": "table", "title": "live trading list", "cols": [], "rows": []}
robotTbl.cols = ["live trading Id", "live trading name", "live trading status", "strategy name", "live trading profit"]
_.each(robotList, function(robotInfo) {
robotTbl.rows.push([robotInfo.id, robotInfo.name, descRobotStatusCode[robotInfo.status], robotInfo.strategy_name, robotInfo.profit])
})
LogStatus(_D(), "`" + JSON.stringify(robotTbl) + "`")
}
Strategieparameterentwurf:
Auf Live-Trading läuft:
Das Gruppenmanagement macht es sehr praktisch, Transaktionen mit einem Klick auszuführen. Sie können gleichzeitig auf mehreren Live-Handelskonten kaufen, verkaufen und Positionen schließen, ohne jedes Konto einzeln öffnen zu müssen. Dies verbessert nicht nur die Ausführungseffizienz, sondern reduziert auch die Möglichkeit von Betriebsfehlern.
Nachdem wir die Liste der Live-Handelskonten erhalten haben, können wir Befehle an diese Konten senden und eine Reihe von vorgegebenen Operationen ausführen. Zum Beispiel: Positionen im Live-Konto klären, den Schutz im Live-Konto pausieren, die Modi im Live-Konto wechseln. All dies kann durch FMZCommandRobot
.
Wie wir weiterhin Code schreiben, müssen wir nur einige Interaktionen und Anrufe auf die erweiterte API-Schnittstelle hinzufügenCommandRobot
in unserer Hauptfunktion:
function main() {
var robotStatusCode = dicRobotStatusCode[arrIndexDesc[robotStatus]]
var robotList = getAllRobotByIdAndStatus(accessKey, secretKey, strategyId, robotStatusCode)
if (!robotList) {
Log("Failed to obtain live trading data")
}
var robotTbl = {"type": "table", "title": "live trading list", "cols": [], "rows": []}
robotTbl.cols = ["live trading Id", "live trading name", "live trading status", "strategy name", "live trading profit"]
_.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(), ", Waiting to receive interactive commands", "\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 = "Clearance" // You can define the required message format
if (robotInfo.status != 1) { // Only the "live" trading platform can receive commands.
return
}
var ret = callFmzExtAPI(accessKey, secretKey, "CommandRobot", parseInt(robotInfo.id), strCmd)
LogControl("Send command to the live trading board with id: ", robotInfo.id, ":", strCmd, ", execution result:", ret)
})
}
}
Sleep(1000)
}
}
Die Kontrollstrategie der Gruppe hat Anweisungen an
Mit der erweiterten API von FMZ
Im quantitativen Handel können Händler mithilfe der erweiterten API von FMZ
Für Händler, die eine große Anzahl von Live-Konten verwalten, bietet die erweiterte API von FMZ