Wie kann man die Festplattenparameter in FMZ massenhaft ändern? Wenn es mehr als ein paar Dutzend von Festplatten gibt, und wenn es Hunderte gibt, ist es sehr schwierig, die Festplatte manuell zu konfigurieren.
Im letzten Artikel haben wir gelöst, wie wir FMZs Erweiterungs-API verwenden, um alle Festplatten, Gruppen-Kontrollplatten zu überwachen und Anweisungen an die Festplatte zu senden.
Parameter Einstellung:
Das ist ein sehr schwieriger Fall.
// 全局变量
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
}
Wenn wir die Festplattenparameter massenhaft ändern und dann die Festplatte ausführen müssen, gibt es zunächst zwei Szenarien.
Aber in jedem Fall sind die nächsten Ideen und Handlungen ziemlich unterschiedlich.RestartRobot
Diese Erweiterungs-API-Funktion wird als Beispiel verwendet.
Die RestartRobot-Funktion kann auf zwei Arten verwendet werden:
Die erste Methode ist für unsere Bedarfsszenarien nicht geeignet, da wir selbst eine große Anzahl von Festplattenparametern in großen Mengen ändern müssen. Das Problem ist also, dass die Parameterkonfiguration der Festplatte sehr kompliziert ist, mit Austauschobjektkonfigurationen, Strategieparameterkonfigurationen, K-Line-Zyklus-Einstellungen und so weiter.
Keine Sorge, wir werden es einzeln herausfinden.
Bei FMZ muss die Parameterkonfiguration einer Festplatte nicht in Betrieb sein, wenn sie geändert werden soll. Die Parameterkonfiguration kann nur von einer nicht in Betrieb befindlichen Festplatte geändert werden.
Also müssen wir zunächst die Festplatten mit den angegebenen Strategien bekommen, und diese Festplatten befinden sich in derHaltestandOderFehler beim StoppenIch bin nicht derjenige, der das sagt.
function main() {
var stopRobotList = getAllRobotByIdAndStatus(accessKey, secretKey, strategyId, 4)
var errorRobotList = getAllRobotByIdAndStatus(accessKey, secretKey, strategyId, 5)
var robotList = stopRobotList.concat(errorRobotList)
}
Wir haben also alle Informationen über die Festplattenkonfiguration, die wir ändern müssen, und dann müssen wir detaillierte Festplattenkonfigurationen erhalten.
Zum Beispiel müssen wir die Festplattenpolitik, in der die Parameter geändert werden, wie folgt ändern (d. h. die Strategie-ID für die Strategie-Id-Variante):
Die Strategie besteht aus drei Parametern, die als Experiment dienen.
Ändern Sie die Politikparameter der Festplatte, aber möglicherweise möchten wir die Konfiguration der Börse der Politik nicht ändern, aber für die Erweiterung der API-Interface RestartRobot-Funktion müssen entweder keine Parameter angegeben werden (die ursprüngliche Inaktivität startet nur die Festplatte), oder alle Parameterkonfigurationen müssen angegeben werden.
Das heißt, bevor wir die Festplatte mit der RestartRobot-Funktion starten, müssen wir zunächst die GetRobotDetail-Funktion der erweiterten API-Schnittstelle verwenden, um auf die aktuelle Festplattenkonfiguration zu gelangen, und dann ersetzen wir die Parameter, die wir ändern müssen, um die Konfigurationsparameter für die Festplattenstartung (d. h. die Parameter, die bei der Aufforderung von RestartRobot verwendet werden sollen) neu zu erstellen und die Festplatte neu zu starten.
Also gehen wir weiter durch die RobotList und holen uns die aktuellen Parameterkonfigurationen einzeln, in folgender Code./**/
Die Kommentare sind Details der Festplatte, die wir dann verarbeiten müssen.
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": "测试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\",\"币种列表\",\"英文逗号间隔\",\"BTC_USDT,ETH_USDT,EOS_USDT,LTC_USDT\"],[\"col\",\"宽度\",\"页面总宽度为12\",6],[\"htight\",\"高度\",\"单位px\",600],[\"$$$__cmd__$$$coverSymbol\",\"平仓\",\"平仓交易对\",\"\"]]",
"strategy_exchange_pairs": "[3600,[186193],[\"BTC_USD\"]]",
"strategy_id": 131242,
"strategy_last_modified": "2023-12-09 23:14:33",
"strategy_name": "测试1",
...
}
},
"error": null
}
}
*/
// 解析交易所配置数据
var exchangePairs = JSON.parse(robotDetail.data.result.robot.strategy_exchange_pairs)
// 拿到交易所对象索引、交易对,这些设置是不打算修改的
var arrExId = exchangePairs[1]
var arrSymbol = exchangePairs[2]
// 解析参数配置数据
var params = JSON.parse(robotDetail.data.result.robot.robot_args)
// 更新参数
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]]) // 构造策略参数,更新上新参数值
}
}
})
// 注意如果数据中有空格需要转码,否则请求的时候会报错
settings = {
"name": robotDetail.data.result.robot.name,
// 策略参数
"args": newParams,
// 策略ID,可以用GetStrategyList方法获取到
"strategy": robotDetail.data.result.robot.strategy_id,
// K线周期参数,60即为60秒
"period": exchangePairs[0],
// 指定在哪个托管者上运行,不写该属性就是自动分配运行
"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) // 测试
var retRestart = callFmzExtAPI(accessKey, secretKey, "RestartRobot", robotInfo.id, settings)
Log("retRestart:", retRestart)
})
}
Nach dem Ausführen dieser Strategie zur Massenänderung der Parameter wird meine Festplatte:
Die Parameter wurden geändert, wenn die konfigurierten Austauschobjekte, Handelspare und K-Linie-Zyklen unverändert sind:
Die Seite wird automatisch geändert, um:
Und es wird ausgeführt. Denn wir haben in der oben genannten Code die Parameter für die Änderung angegeben:
// 更新参数
var dicParams = {
"pairs" : "AAA_BBB,CCC_DDD",
"col" : "999",
"htight" : "666"
}
Für Dutzende oder Hunderte von Festplatten ist es relativ einfach, diese Methode zu verwenden. In diesem Fall werden sie als einheitliche Parameter geändert. Natürlich können Sie auch Ihre eigenen Modifikationsregeln im Code anpassen, indem Sie für jede Festplatte eine andere Parameterkonfiguration angeben.
Für die FMZ-Plattform sind diese Bedürfnisse flexibel und individuell umsetzbar.
- Ich komme.Es gibt Dutzende, Hunderte von Festplatten, und die Miete ist viel Geld.
Die Erfinder quantifizieren - Kleine TräumeEs gibt einige Produkte, die mit der FMZ-Erweiterung API verpackt sind, und es gibt viele Festplatten.