ایف ایم زیڈ میں بڑے پیمانے پر ڈسک کی پیرامیٹرز کو کیسے تبدیل کیا جائے؟ جب ڈسک کی تعداد درجنوں سے زیادہ ہوتی ہے اور سیکڑوں تک پہنچ جاتی ہے تو ، اگر ایک ڈسک کو دستی طور پر ترتیب دیا جائے تو اس کی دیکھ بھال کرنا بہت مشکل ہے۔ اس وقت ایف ایم زیڈ کے توسیعی API کا استعمال کرکے ان کاموں کو مکمل کیا جاسکتا ہے۔ پھر اس مضمون میں ہم گروپ ڈسک کی کھوج کرتے ہیں ، پیرامیٹرز کو اپ ڈیٹ کرنے کی کچھ تفصیلات۔
پچھلے مضمون میں ہم نے FMZ کی توسیع API کا استعمال کرتے ہوئے تمام ڈسک، گروپ ڈسک کی نگرانی کرنے کے لئے کس طرح حل کیا ہے، ڈسک کو ہدایات بھیجنے کے لئے.
پیرامیٹرز کی ترتیب:
اسٹریٹجک کوڈ:
// 全局变量
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
}
جب ہم بڑے پیمانے پر ریئل ڈسک پیرامیٹرز کو تبدیل کرنے کی ضرورت ہوتی ہے اور پھر ریئل ڈسک چلاتے ہیں تو ، اس منظر نامے میں پہلے دو حالات ہوتے ہیں۔
لیکن کسی بھی طرح سے، اگلے خیالات اور اقدامات تقریبا ایک جیسے ہیں، لہذا ہم نے اس کے بارے میں سوچا.RestartRobot
یہ توسیع API تقریب مثال کے طور پر استعمال کیا جاتا ہے.
RestartRobot فنکشن کو استعمال کرنے کے دو طریقے ہیں:
پہلا طریقہ ہمارے مطالبات کے منظر نامے کے لئے کچھ کام نہیں کرتا ، کیونکہ ہماری اپنی ضرورت ہے کہ ہم بڑے پیمانے پر ڈسک کی پیرامیٹرز کو تبدیل کریں۔ لہذا مسئلہ یہ ہے کہ ڈسک کی پیرامیٹرز کی ترتیب بہت پیچیدہ ہے ، جس میں ایکسچینج آبجیکٹ کی ترتیب ، حکمت عملی کی پیرامیٹرز کی ترتیب ، K لائن سائیکل کی ترتیب وغیرہ شامل ہیں۔
آپ کو اس کے بارے میں کچھ نہیں معلوم ہے۔
ایف ایم زیڈ پر ، اگر کسی ڈسک کی پیرامیٹرز کی تشکیل میں ترمیم کی جائے تو ، یہ ڈسک غیر چلنے والی حالت میں ہونی چاہئے۔ کیونکہ صرف غیر چلنے والی حالت میں ڈسک کی تشکیل میں ترمیم کی جاسکتی ہے۔ غیر چلنے والی حالت میں ڈسک:
لہذا سب سے پہلے ہم کو مخصوص حکمت عملی کے ساتھ ڈسک حاصل کرنے کی ضرورت ہے، اور ان ڈسک میں واقع ہیں.بند حالتیاغلطی سے روک دیااس کی حالت کا بیان۔
function main() {
var stopRobotList = getAllRobotByIdAndStatus(accessKey, secretKey, strategyId, 4)
var errorRobotList = getAllRobotByIdAndStatus(accessKey, secretKey, strategyId, 5)
var robotList = stopRobotList.concat(errorRobotList)
}
اس طرح ہم نے تمام ڈسک کی معلومات حاصل کی ہیں جو ہم نے ترتیب میں ترمیم کرنے کی ضرورت ہے، اس کے بعد ہم نے ڈسک کی تفصیلی ترتیب حاصل کی ہے۔
مثال کے طور پر ، ہمیں اس طرح کے پیرامیٹرز میں ترمیم کرنے کی ضرورت ہے (یعنی حکمت عملی ID کو حکمت عملیId متغیر کے لئے حکمت عملی):
اس حکمت عملی میں تین پیرامیٹرز ہیں جو ٹیسٹ کے طور پر استعمال کیے جاتے ہیں۔
ورڈپریس کی پالیسی کے پیرامیٹرز کو تبدیل کریں ، لیکن ہوسکتا ہے کہ ہم اس پالیسی کی تبادلہ کی ترتیب کو تبدیل نہیں کرنا چاہتے ہوں ، لیکن توسیع API انٹرفیس RestartRobot فنکشن کے ل either ، یا تو کوئی پیرامیٹرز کی وضاحت نہیں کی جاتی ہے (اصل میں صرف ورڈپریس کو شروع کرنے کے لئے غیر فعال) یا تمام پیرامیٹرز کی ترتیب کی وضاحت کرنا ضروری ہے۔
اس کا مطلب یہ ہے کہ اگلا، ہم ری سائیکل کو دوبارہ شروع کرنے سے پہلے ری سائیکل کو شروع کرنے کے لئے استعمال کرتے ہیں، ہمیں پہلے توسیع API انٹرفیس GetRobotDetail فنکشن کو ری سائیکل کی موجودہ ترتیب تک رسائی حاصل کرنے کی ضرورت ہے، اور پھر ہم اس پیرامیٹر کے حصے کو تبدیل کرنے کی ضرورت ہے، ری سائیکل کو شروع کرنے کے لئے ترتیب کے پیرامیٹرز کو دوبارہ ترتیب دیں (یعنی ری سائیکل کو دوبارہ شروع کرنے کے لئے استعمال کرنے کے لئے پیرامیٹرز) ، اور پھر ری سائیکل کو دوبارہ شروع کریں.
تو اگلا ہم روبوٹ لسٹ میں جائیں گے اور پہلے موجودہ پیرامیٹرز کی ترتیب کو ایک ایک کرکے حاصل کریں گے/**/
اس کے بعد ہم نے اس ڈیٹا پر عملدرآمد کرنے کی ضرورت ہے.
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)
})
}
اس کے بعد میں نے اس حکمت عملی کو چلایا جس میں میں نے بہت زیادہ پیرامیٹرز میں ترمیم کی تھی، اور میرا ورچوئل ڈسک:
تبادلہ اشیاء، تجارت کے جوڑے، اور K لائن سائیکل کی ترتیب میں تبدیلی کے ساتھ پیرامیٹرز:
اس صفحے پر آپ کی ویب سائٹ کی ویب سائٹ کی شناخت کی گئی ہے۔
اس کے بعد ہم نے اس کوڈ میں تبدیلی کے پیرامیٹرز کی وضاحت کی ہے کیونکہ:
// 更新参数
var dicParams = {
"pairs" : "AAA_BBB,CCC_DDD",
"col" : "999",
"htight" : "666"
}
درجنوں یا سینکڑوں ڈسکوں کے لئے ، اس طریقہ کار کا استعمال کرنا نسبتا convenient آسان ہے۔ اس مثال میں ، یہ ایک ہی پیرامیٹر میں ترمیم کی گئی ہے۔ یقینا you آپ کو کوڈ میں اپنے ترمیم کے اصولوں کو بھی اپنی مرضی کے مطابق بنانا چاہئے ، ہر ڈسک کے لئے مختلف پیرامیٹر کی تشکیل کی وضاحت کریں۔ یا مختلف ایکسچینج آبجیکٹ ، تجارت کے ہم منصب وغیرہ کی وضاحت کریں۔
ایف ایم زیڈ پلیٹ فارم کے لئے ، ان تمام ضروریات کو اپنی مرضی کے مطابق بنایا جاسکتا ہے ، اور اگر آپ کے پاس کوئی خیال ہے تو ، آپ کا خیرمقدم ہے ، اور ہم مل کر مسائل کے حل کی تلاش ، تحقیق اور سیکھنے کے لئے تیار ہیں۔
allez-zیہ ایک بہت بڑا پیسہ ہے، درجنوں، سینکڑوں اصلی ڈرائیوز، ماہانہ کرایہ۔
ایجاد کاروں کی مقدار - خوابکچھ ایف ایم زیڈ توسیع API پیکجنگ مصنوعات کا استعمال کرتے ہیں، اور بہت سے حقیقی ڈسک ہیں.