میں ایف ایم زیڈ پر لائیو ٹریڈنگ کے پیرامیٹرز کو بیچ میں کیسے تبدیل کرسکتا ہوں؟ جب لائیو ٹریڈنگ کی تعداد درجنوں سے تجاوز کرتی ہے اور سیکڑوں تک پہنچ جاتی ہے تو ، لائیو ٹریڈنگ کو ایک ایک کرکے دستی طور پر تشکیل دینا بہت تکلیف دہ ہوگا۔ اس وقت ، ہم ان کارروائیوں کو مکمل کرنے کے لئے ایف ایم زیڈ توسیع شدہ اے پی آئی کا استعمال کرسکتے ہیں۔ لہذا اس مضمون میں ، ہم بوٹ کے گروپ کنٹرول کی کھوج کریں گے ، پیرامیٹرز کی کچھ تفصیلات کو اپ ڈیٹ کریں گے۔
پچھلے مضمون میں ، ہم نے اس مسئلے کو حل کیا کہ کس طرح ایف ایم زیڈ توسیع شدہ اے پی آئی کو تمام براہ راست تجارتوں کی نگرانی ، گروپ کنٹرول براہ راست تجارت ، اور براہ راست تجارتوں کو کمانڈ بھیجنے کے لئے استعمال کریں۔ اور ہم اب بھی انٹرفیس کال کوڈ کا استعمال کرتے ہیں جسے ہم نے پچھلے مضمون میں بطور بنیاد احاطہ کیا ہے ، براہ راست تجارت کے پیرامیٹرز کی بیچ ترمیم کا احساس کرنے کے لئے کوڈ لکھنا جاری رکھیں۔
پیرامیٹر کی ترتیبات:
حکمت عملی کا کوڈ:
// 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
}
جب ہمیں لائیو ٹریڈنگ کے پیرامیٹرز کو بیچ میں تبدیل کرنے کی ضرورت ہوتی ہے اور پھر اسے چلانے کی ضرورت ہوتی ہے، اس منظر نامے کے لئے 2 مقدمات شروع کرنے کے لئے ہیں.
لیکن اس سے کوئی فرق نہیں پڑتا کہ کس قسم کا طریقہ کار ہے، اگلے خیال کے ساتھ ساتھ آپریشن بھی اسی طرح کے ہیں، لہذا ہم استعمال کریں گے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 متغیر strategyId ہے):
اسٹریٹجی میں تین پیرامیٹرز ٹیسٹ کے طور پر ہیں۔
لائیو ٹریڈنگ کے لئے حکمت عملی کے پیرامیٹرز میں ترمیم کریں، لیکن شاید ہم حکمت عملی کی تبادلہ ترتیب میں ترمیم نہیں کرنا چاہتے ہیں، لیکن توسیع API انٹرفیس RestartRobot فنکشن کے لئے، یا تو کوئی پیرامیٹرز مخصوص نہیں ہیں (جیسے صرف لائیو ٹریڈنگ شروع کریں) یا تمام پیرامیٹرز کی ترتیب کی وضاحت کی جانی چاہئے.
یہ کہنا ہے کہ، ہم لائیو ٹریڈنگ شروع کرنے کے لئے RestartRobot تقریب کا استعمال کرنے سے پہلے، ہم پہلے لائیو ٹریڈنگ کی موجودہ ترتیب حاصل کرنے کے لئے توسیع API انٹرفیس GetRobotDetail تقریب کا استعمال کرنا ضروری ہے، اور پھر ہم پیرامیٹرز کے حصے کو تبدیل کرنے کی ضرورت ہے کہ تبدیل کرنے کے لئے، لائیو ٹریڈنگ کے آغاز کے لئے ترتیب پیرامیٹرز دوبارہ تعمیر کرنے کے لئے (یعنی، پیرامیٹرز کو دوبارہ شروع کرنے کے لئے استعمال کیا جائے گا کہ RestartRobot) ، اور پھر لائیو ٹریڈنگ دوبارہ شروع.
تو، اگلے ہم روبوٹ لسٹ پار، اور موجودہ پیرامیٹر ترتیب ایک ایک کرکے حاصل،/**/
مندرجہ ذیل کوڈ کا حصہ براہ راست ٹریڈنگ کی تفصیلات ہے، ہمیں ان اعداد و شمار سے نمٹنے کی ضرورت ہے.
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)
})
}
بیچ پیرامیٹر ترمیم کی حکمت عملی چلانے کے بعد، میرا لائیو ٹریڈنگ:
پیرامیٹرز کی بیچ ترمیم تشکیل شدہ ایکسچینج آبجیکٹ ، تجارتی جوڑے اور کے لائن کے ادوار کے ساتھ بغیر کسی تبدیلی کے کی گئی تھی:
یہ براہ راست ٹریڈنگ کے صفحے پر خود بخود تبدیل کر دیا گیا تھا:
اور چلانے شروع. کیونکہ ہم مندرجہ بالا کوڈ میں ترمیم پیرامیٹرز کی وضاحت کی:
// Update parameters
var dicParams = {
"pairs" : "AAA_BBB,CCC_DDD",
"col" : "999",
"htight" : "666"
}
درجنوں ، سینکڑوں لائیو ٹریڈنگ بیچ پیرامیٹرز کو تبدیل کرنے کے ل this ، یہ طریقہ زیادہ آسان ہے۔ مثال کے طور پر ، پیرامیٹرز کو یکساں طور پر تبدیل کیا جاتا ہے ، یقینا you آپ کوڈ میں اپنے ترمیم کے قواعد اپنی مرضی کے مطابق کرسکتے ہیں تاکہ ہر لائیو ٹریڈنگ کے لئے مختلف پیرامیٹر کی تشکیل کی وضاحت کی جاسکے۔ یا مختلف تبادلہ اشیاء ، تجارتی جوڑے وغیرہ کی وضاحت کریں۔
ایف ایم زیڈ پلیٹ فارم کے ل these ، یہ ضروریات حاصل کرنے کے لئے لچکدار اور مرضی کے مطابق ہیں۔ اگر آپ کے پاس کسی بھی ضرورت کے خیالات ہیں تو ، تبصرہ کرنے کے لئے آزاد محسوس کریں ، ہم بحث ، تحقیق اور ایک دوسرے سے سیکھ سکتے ہیں ، اور مسئلے کا حل تلاش کرسکتے ہیں۔