Wie kann ich die Parameter von Live-Tradings in Chargen auf FMZ ändern? Wenn die Anzahl der Live-Tradings Dutzende übersteigt und Hunderte erreicht, wäre es sehr unbequem, Live-Tradings einzeln manuell zu konfigurieren. Zu diesem Zeitpunkt können wir die FMZ erweiterte API verwenden, um diese Operationen abzuschließen. In diesem Artikel werden wir die Gruppenkontrolle des Bots erforschen, einige Details der Parameter aktualisieren.
In dem vorherigen Artikel haben wir das Problem gelöst, wie wir die FMZ erweiterte API verwenden, um alle Live-Tradings zu überwachen, Live-Tradings zu steuern und Befehle an die Live-Tradings zu senden.
Einstellungen der Parameter:
Strategiecode:
// Global variable
var isLogMsg = true // Controls whether logs are printed or not
var isDebug = false // Debugging mode
var arrIndexDesc = ["all", "running", "stop"]
var descRobotStatusCode = ["Idle", "Running", "Stopping", "Exited", "Stopped", "There is an error in the strategy"]
var dicRobotStatusCode = {
"all" : -1,
"running" : 1,
"stop" : 4,
}
// Extended logging functions
function LogControl(...args) {
if (isLogMsg) {
Log(...args)
}
}
// FMZ extended API call functions
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
}
// Get information about all running bots for 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("Maximum number of retries exceeded", 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
}
Wenn wir die Parameter des Live-Handels modifizieren und dann ausführen müssen, gibt es 2 Fälle für dieses Szenario.
Aber egal, welche Art von Methode, die nächste Idee sowie die Operation sind ähnlich, so werden wir dieRestartRobot
erweiterte API-Funktion als Beispiel zu erklären.
Die RestartRobot-Funktion wird auf zwei Arten verwendet:
Der erste Ansatz ist nicht nützlich für unser Nachfrage-Szenario, weil unsere eigene Nachfrage ist, eine große Anzahl von Parametern des Live-Handels in großen Mengen zu modifizieren.
Machen Sie sich keine Sorgen, wir erforschen sie einzeln.
Wenn Sie die Parameterkonfiguration eines Live-Handels ändern möchten, muss er nicht ausgeführt werden. Denn nur ein Live-Handel, der nicht ausgeführt wird, kann seine Parameterkonfiguration ändern. Ein Live-Handel, der nicht im laufenden Zustand ist, kann in:
Also müssen wir die Live-Handels für die angegebene Strategie zuerst zu bekommen, und diese Live-Handels sind in einemStandstillzustandoderIch habe einen Fehler, um zu stoppen.
function main() {
var stopRobotList = getAllRobotByIdAndStatus(accessKey, secretKey, strategyId, 4)
var errorRobotList = getAllRobotByIdAndStatus(accessKey, secretKey, strategyId, 5)
var robotList = stopRobotList.concat(errorRobotList)
}
Dies gibt uns alle Informationen über den Live-Handel, die wir brauchen, um die Konfiguration zu ändern, als nächstes werden wir die detaillierte Konfiguration des Live-Handels zu bekommen.
Zum Beispiel ist die Live-Handelsstrategie, für die wir die Parameter ändern müssen, wie folgt (d. h. die Strategie, deren Strategie-ID die Strategie-Id-Variable ist):
Die Strategie hat 3 Parameter als Test.
Ändern Sie die Strategieparameter für den Live-Handel, aber vielleicht wollen wir nicht die Strategie
Das heißt, bevor wir die RestartRobot-Funktion verwenden, um den Live-Handel zu starten, müssen wir die erweiterte API-Schnittstelle GetRobotDetail-Funktion verwenden, um zuerst die aktuelle Konfiguration des Live-Handels zu erhalten, und dann ersetzen wir den Teil der Parameter, die geändert werden müssen, um die Konfigurationsparameter für den Start des Live-Handels neu zu konstruieren (dh die Parameter, die verwendet werden, um RestartRobot anzurufen), und dann den Live-Handel neu starten.
Also, als nächstes durchqueren wir robotList, und erhalten Sie die aktuelle Parameter-Konfiguration eins nach dem anderen, die/**/
Kommentierte Teil des folgenden Codes sind die Live-Handel Details, müssen wir mit diesen Daten umgehen.
function main() {
var stopRobotList = getAllRobotByIdAndStatus(accessKey, secretKey, strategyId, 4)
var errorRobotList = getAllRobotByIdAndStatus(accessKey, secretKey, strategyId, 5)
var robotList = stopRobotList.concat(errorRobotList)
_.each(robotList, function(robotInfo) {
var robotDetail = callFmzExtAPI(accessKey, secretKey, "GetRobotDetail", robotInfo.id)
/*
{
"code": 0,
"data": {
"result": {
"robot": {
...
"id": 130350,
...
"name": "Test 1B",
"node_id": 3022561,
...
"robot_args": "[[\"pairs\",\"BTC_USDT,ETH_USDT,EOS_USDT,LTC_USDT\"],[\"col\",3],[\"htight\",300]]",
"start_time": "2023-11-19 21:16:12",
"status": 5,
"strategy_args": "[[\"pairs\",\"Currency list\",\"English comma spacing\",\"BTC_USDT,ETH_USDT,EOS_USDT,LTC_USDT\"],[\"col\",\"breadth\",\"Total width of the page is 12\",6],[\"htight\",\"height\",\"unit px\",600],[\"$$$__cmd__$$$coverSymbol\",\"close the position\",\"close out trading pairs\",\"\"]]",
"strategy_exchange_pairs": "[3600,[186193],[\"BTC_USD\"]]",
"strategy_id": 131242,
"strategy_last_modified": "2023-12-09 23:14:33",
"strategy_name": "Test 1",
...
}
},
"error": null
}
}
*/
// Parse the exchange configuration data
var exchangePairs = JSON.parse(robotDetail.data.result.robot.strategy_exchange_pairs)
// Get the exchange object index, trading pairs, these settings are not going to be changed
var arrExId = exchangePairs[1]
var arrSymbol = exchangePairs[2]
// Parse parameter configuration data
var params = JSON.parse(robotDetail.data.result.robot.robot_args)
// Update parameters
var dicParams = {
"pairs" : "AAA_BBB,CCC_DDD",
"col" : "999",
"htight" : "666"
}
var newParams = []
_.each(params, function(param) {
for (var k in dicParams) {
if (param[0] == k) {
newParams.push([k, dicParams[k]]) // Construct the strategy parameters and update the new parameter values
}
}
})
// Note that if there are spaces in the data you need to transcode it, otherwise the request will report an error
settings = {
"name": robotDetail.data.result.robot.name,
// Strategy parameter
"args": newParams,
// The strategy ID can be obtained by the GetStrategyList method.
"strategy": robotDetail.data.result.robot.strategy_id,
// K-period parameter, 60 means 60 seconds
"period": exchangePairs[0],
// Specifies which docker to run on; not writing this attribute means automatically assigning the run
"node" : robotDetail.data.result.robot.node_id,
"exchanges": []
}
for (var i = 0 ; i < arrExId.length ; i++) {
settings["exchanges"].push({"pid": arrExId[i], "pair": arrSymbol[i]})
}
Log(settings) // Test
var retRestart = callFmzExtAPI(accessKey, secretKey, "RestartRobot", robotInfo.id, settings)
Log("retRestart:", retRestart)
})
}
Nachdem ich die Parametermodifikationsstrategie ausgeführt habe, habe ich live gehandelt:
Die Parameter wurden per Batch geändert, wobei die konfigurierten Börsenobjekte, Handelspare und K-Line-Perioden unverändert blieben:
Es wurde automatisch auf der Live-Handelsseite geändert:
Wir haben die modifizierten Parameter im obigen Code festgelegt:
// Update parameters
var dicParams = {
"pairs" : "AAA_BBB,CCC_DDD",
"col" : "999",
"htight" : "666"
}
Für Dutzende, Hunderte von Live-Trading-Batch ändern Parameter, diese Methode ist bequemer. Im Beispiel werden die Parameter zu einer einheitlichen modifiziert, natürlich können Sie Ihre eigenen Modifikationsregeln im Code anpassen, um verschiedene Parameterkonfigurationen für jeden Live-Handel anzugeben. Oder spezifizieren Sie verschiedene Austauschobjekte, Handel Paare und so weiter.
Für die FMZ-Plattform sind diese Anforderungen flexibel und anpassbar zu erreichen. Fühlen Sie sich frei, einen Kommentar zu hinterlassen, wenn Sie irgendwelche Anforderungsideen haben, wir können diskutieren, recherchieren und voneinander lernen und die Lösung für das Problem finden.