وسائل لوڈ ہو رہے ہیں... لوڈنگ...

آپ بوٹ کے پیرامیٹرز کو بیچ میں تبدیل کرنے کے لئے FMZ توسیع API کا استعمال کرنے کے لئے سکھانے کے

مصنف:FMZ~Lydia, تخلیق: 2023-12-11 13:37:55, تازہ کاری: 2024-11-06 21:16:44

img

میں ایف ایم زیڈ پر لائیو ٹریڈنگ کے پیرامیٹرز کو بیچ میں کیسے تبدیل کرسکتا ہوں؟ جب لائیو ٹریڈنگ کی تعداد درجنوں سے تجاوز کرتی ہے اور سیکڑوں تک پہنچ جاتی ہے تو ، لائیو ٹریڈنگ کو ایک ایک کرکے دستی طور پر تشکیل دینا بہت تکلیف دہ ہوگا۔ اس وقت ، ہم ان کارروائیوں کو مکمل کرنے کے لئے ایف ایم زیڈ توسیع شدہ اے پی آئی کا استعمال کرسکتے ہیں۔ لہذا اس مضمون میں ، ہم بوٹ کے گروپ کنٹرول کی کھوج کریں گے ، پیرامیٹرز کی کچھ تفصیلات کو اپ ڈیٹ کریں گے۔

پچھلے مضمون میں ، ہم نے اس مسئلے کو حل کیا کہ کس طرح ایف ایم زیڈ توسیع شدہ اے پی آئی کو تمام براہ راست تجارتوں کی نگرانی ، گروپ کنٹرول براہ راست تجارت ، اور براہ راست تجارتوں کو کمانڈ بھیجنے کے لئے استعمال کریں۔ اور ہم اب بھی انٹرفیس کال کوڈ کا استعمال کرتے ہیں جسے ہم نے پچھلے مضمون میں بطور بنیاد احاطہ کیا ہے ، براہ راست تجارت کے پیرامیٹرز کی بیچ ترمیم کا احساس کرنے کے لئے کوڈ لکھنا جاری رکھیں۔

پیرامیٹر کی ترتیبات:

img

حکمت عملی کا کوڈ:

// 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 
}

ایف ایم زیڈ توسیع API کے دوبارہ شروع روبوٹ فنکشن کو پہلے جانیں

جب ہمیں لائیو ٹریڈنگ کے پیرامیٹرز کو بیچ میں تبدیل کرنے کی ضرورت ہوتی ہے اور پھر اسے چلانے کی ضرورت ہوتی ہے، اس منظر نامے کے لئے 2 مقدمات شروع کرنے کے لئے ہیں.

    1. بوٹ بنایا گیا ہے ایک لائیو ٹریڈنگ کے لئے جو پہلے ہی بن چکی ہے، اسے ری اسٹارٹ روبوٹ فنکشن کا استعمال کرتے ہوئے دوبارہ شروع کرنا فطری ہے، جو ایف ایم زیڈ کے لئے ایک توسیع شدہ API انٹرفیس ہے۔
    1. بوٹ نہیں بنایا گیا لائیو ٹریڈنگ کے لئے پیدا نہیں کیا گیا ہے، وہاں کی ضرورت نہیں ہے تبدیل لائیو ٹریڈنگ کے پیرامیٹرز، کہ ہے لائیو ٹریڈنگ کے بیچ تخلیق چلانے کے لئے، اور ہم FMZ توسیع API انٹرفیس استعمال کرتے ہیں - NewRobot تقریب.

لیکن اس سے کوئی فرق نہیں پڑتا کہ کس قسم کا طریقہ کار ہے، اگلے خیال کے ساتھ ساتھ آپریشن بھی اسی طرح کے ہیں، لہذا ہم استعمال کریں گےRestartRobotتوسیع API تقریب کی وضاحت کرنے کے لئے ایک مثال کے طور پر.

RestartRobot فنکشن دو طریقوں سے استعمال کیا جاتا ہے:

    1. صرف لائیو ٹریڈنگ آئی ڈی کے ساتھ ترتیب، لائیو ٹریڈنگ کے پیرامیٹرز نہیں یہ نقطہ نظر پیرامیٹر کی ترتیب کو برقرار رکھتا ہے جب لائیو ٹریڈنگ بند ہو جاتی ہے، اور صرف لائیو ٹریڈنگ دوبارہ شروع ہوتی ہے.
    1. لائیو ٹریڈنگ آئی ڈی اور لائیو ٹریڈنگ کے پیرامیٹرز کے ساتھ ترتیب یہ نقطہ نظر نئے پیرامیٹر کی ترتیب کے ساتھ لائیو ٹریڈنگ چلانے شروع ہوتا ہے.

پہلا نقطہ نظر ہمارے مطالبہ کے منظر نامے کے لئے مفید نہیں ہے ، کیونکہ ہماری اپنی طلب بڑے پیمانے پر لائیو ٹریڈنگ کے پیرامیٹرز کی ایک بڑی تعداد میں ترمیم کرنا ہے۔ لہذا سوال یہ ہے کہ ، لائیو ٹریڈنگ کے پیرامیٹرز کی تشکیل بہت پیچیدہ ہے ، تبادلہ آبجیکٹ کی تشکیل ، حکمت عملی پیرامیٹر کی تشکیل ، K لائن مدت کی ترتیبات اور اسی طرح کی ہے۔

فکر نہ کرو، آئیے ان کو ایک ایک کرکے دریافت کرتے ہیں۔

براہ راست تجارت کی معلومات حاصل کریں جو آپ کام کرنا چاہتے ہیں

ایف ایم زیڈ پر ، اگر آپ رواں تجارت کی پیرامیٹر کی تشکیل میں ترمیم کرنا چاہتے ہیں تو ، پھر یہ غیر چل رہا ہونا چاہئے۔ کیونکہ صرف رواں تجارت جو نہیں چل رہی ہے اس کی پیرامیٹر کی تشکیل میں ترمیم کی جاسکتی ہے۔ رواں تجارت جو چلانے کی حالت میں نہیں ہے وہ ہوسکتی ہے:

  • حکمت عملی رک گئی.
  • حکمت عملی غلطیوں ہے، روک دیا.

تو ہم سب سے پہلے مخصوص حکمت عملی کے لئے لائیو ٹریڈنگ حاصل کرنے کی ضرورت ہے، اور ان لائیو ٹریڈنگ ایک میں ہیںبند حالتیاروکنے کے لئے ایک غلطی ہے.

function main() {
    var stopRobotList = getAllRobotByIdAndStatus(accessKey, secretKey, strategyId, 4)
    var errorRobotList = getAllRobotByIdAndStatus(accessKey, secretKey, strategyId, 5)
    var robotList = stopRobotList.concat(errorRobotList)
}

یہ ہمیں لائیو ٹریڈنگ کے بارے میں تمام معلومات فراہم کرتا ہے جس کی ہمیں ترتیب تبدیل کرنے کی ضرورت ہے، اگلا ہم لائیو ٹریڈنگ کی تفصیلی ترتیب حاصل کریں گے.

لائیو ٹریڈنگ کنفیگریشن پیرامیٹرز میں ترمیم

مثال کے طور پر، لائیو ٹریڈنگ کی حکمت عملی جس کے لئے ہمیں پیرامیٹرز کو تبدیل کرنے کی ضرورت ہے مندرجہ ذیل ہے (یعنی، حکمت عملی جس کی حکمت عملی ID متغیر strategyId ہے):

img

img

اسٹریٹجی میں تین پیرامیٹرز ٹیسٹ کے طور پر ہیں۔

لائیو ٹریڈنگ کے لئے حکمت عملی کے پیرامیٹرز میں ترمیم کریں، لیکن شاید ہم حکمت عملی کی تبادلہ ترتیب میں ترمیم نہیں کرنا چاہتے ہیں، لیکن توسیع 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)
    })
}

بیچ پیرامیٹر ترمیم کی حکمت عملی چلانے کے بعد، میرا لائیو ٹریڈنگ:

  • ٹیسٹ 1A
  • ٹیسٹ 1B

پیرامیٹرز کی بیچ ترمیم تشکیل شدہ ایکسچینج آبجیکٹ ، تجارتی جوڑے اور کے لائن کے ادوار کے ساتھ بغیر کسی تبدیلی کے کی گئی تھی:

یہ براہ راست ٹریڈنگ کے صفحے پر خود بخود تبدیل کر دیا گیا تھا:

img

اور چلانے شروع. کیونکہ ہم مندرجہ بالا کوڈ میں ترمیم پیرامیٹرز کی وضاحت کی:

        // Update parameters
        var dicParams = {
            "pairs" : "AAA_BBB,CCC_DDD",
            "col" : "999",
            "htight" : "666"
        }

اختتام

درجنوں ، سینکڑوں لائیو ٹریڈنگ بیچ پیرامیٹرز کو تبدیل کرنے کے ل this ، یہ طریقہ زیادہ آسان ہے۔ مثال کے طور پر ، پیرامیٹرز کو یکساں طور پر تبدیل کیا جاتا ہے ، یقینا you آپ کوڈ میں اپنے ترمیم کے قواعد اپنی مرضی کے مطابق کرسکتے ہیں تاکہ ہر لائیو ٹریڈنگ کے لئے مختلف پیرامیٹر کی تشکیل کی وضاحت کی جاسکے۔ یا مختلف تبادلہ اشیاء ، تجارتی جوڑے وغیرہ کی وضاحت کریں۔

ایف ایم زیڈ پلیٹ فارم کے ل these ، یہ ضروریات حاصل کرنے کے لئے لچکدار اور مرضی کے مطابق ہیں۔ اگر آپ کے پاس کسی بھی ضرورت کے خیالات ہیں تو ، تبصرہ کرنے کے لئے آزاد محسوس کریں ، ہم بحث ، تحقیق اور ایک دوسرے سے سیکھ سکتے ہیں ، اور مسئلے کا حل تلاش کرسکتے ہیں۔


مزید