বট এর ব্যাচ পরিবর্তন পরামিতি ব্যবহার করার জন্য FMZ এক্সটেন্ডেড এপিআই আপনাকে শেখান

লেখক:লিডিয়া, তৈরিঃ ২০২৩-১২-১১ 13:37:55, আপডেটঃ ২০২৪-০১-০২ ২১ঃ২২ঃ৪৯

img

কিভাবে আমি এফএমজেডে লাইভ ট্রেডিং এর প্যারামিটারগুলি ব্যাচে পরিবর্তন করতে পারি? যখন লাইভ ট্রেডিংয়ের সংখ্যা কয়েক ডজন ছাড়িয়ে যায় এবং শত শত পৌঁছে যায়, তখন লাইভ ট্রেডিং একের পর এক ম্যানুয়ালি কনফিগার করা খুব অসুবিধাজনক হবে। এই সময়ে, আমরা এই অপারেশনগুলি সম্পূর্ণ করতে এফএমজেড এক্সটেন্ডেড এপিআই ব্যবহার করতে পারি। সুতরাং এই নিবন্ধে, আমরা বটের গ্রুপ নিয়ন্ত্রণ অন্বেষণ করব, প্যারামিটারের কিছু বিবরণ আপডেট করব।

পূর্ববর্তী নিবন্ধে, আমরা লাইভ ট্রেডিং পর্যবেক্ষণ, গ্রুপ নিয়ন্ত্রণ লাইভ ট্রেডিং, এবং লাইভ ট্রেডিং কমান্ড পাঠানোর জন্য FMZ বর্ধিত API ব্যবহার করার সমস্যা সমাধান করেছি। এবং আমরা এখনও ইন্টারফেস কল কোড আমরা একটি ভিত্তি হিসাবে পূর্ববর্তী নিবন্ধে encapsulated ব্যবহার, লাইভ ট্রেডিং পরামিতি ব্যাচ পরিবর্তন উপলব্ধি করতে কোড লিখতে চালিয়ে যান।

প্যারামিটার সেটিংসঃ

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 
}

প্রথমে এফএমজেড এক্সটেন্ডেড এপিআই এর রিস্টার্টরবট ফাংশনটি জানুন

যখন আমাদের লাইভ ট্রেডিং এর প্যারামিটারগুলি পরিবর্তন করতে হবে এবং তারপর এটি চালাতে হবে, তখন এই দৃশ্যের জন্য 2 টি কেস রয়েছে।

    1. বট তৈরি করা হয়েছে একটি লাইভ ট্রেডিংয়ের জন্য যা ইতিমধ্যে তৈরি করা হয়েছে, এটি পুনরায় চালু করার জন্য এটি স্বাভাবিক হয় পুনরায় চালু করুনRobot ফাংশন, যা FMZ এর একটি বর্ধিত API ইন্টারফেস।
    1. বট তৈরি করা হয়নি লাইভ ট্রেডিং এর জন্য তৈরি করা হয়নি, লাইভ ট্রেডিং এর প্যারামিটার modify করার কোন প্রয়োজন নেই, যে লাইভ ট্রেডিং এর ব্যাচ সৃষ্টি চালানোর জন্য, এবং আমরা FMZ বর্ধিত API ইন্টারফেস ব্যবহার - NewRobot ফাংশন.

কিন্তু কোন ধরনের পদ্ধতি যাই হোক না কেন, পরবর্তী ধারণা এবং অপারেশন একই রকম, তাই আমরা ব্যবহার করবRestartRobotব্যাখ্যা করার জন্য একটি উদাহরণ হিসাবে বর্ধিত API ফাংশন।

রিস্টার্ট রোবট ফাংশন দুটি উপায়ে ব্যবহার করা হয়:

    1. শুধুমাত্র লাইভ ট্রেডিং আইডি দিয়ে কনফিগারেশন, লাইভ ট্রেডিংয়ের পরামিতি নয় এই পদ্ধতিতে লাইভ ট্রেডিং বন্ধ হলে প্যারামিটার কনফিগারেশন অপরিবর্তিত থাকে এবং শুধুমাত্র লাইভ ট্রেডিং পুনরায় শুরু হয়।
    1. লাইভ ট্রেডিং আইডি এবং লাইভ ট্রেডিংয়ের পরামিতি দিয়ে কনফিগারেশন এই পদ্ধতিতে নতুন প্যারামিটার কনফিগারেশনের সাথে লাইভ ট্রেডিং শুরু হয়।

প্রথম পদ্ধতি আমাদের চাহিদা দৃশ্যকল্পের জন্য দরকারী নয়, কারণ আমাদের নিজস্ব চাহিদা বাল্কে লাইভ ট্রেডিং এর প্যারামিটার একটি বড় সংখ্যা পরিবর্তন করা হয়। তাই প্রশ্ন হল, লাইভ ট্রেডিং এর প্যারামিটার কনফিগারেশন খুব জটিল, সেখানে বিনিময় বস্তু কনফিগারেশন, কৌশল প্যারামিটার কনফিগারেশন, কে-লাইন সময়ের সেটিংস এবং তাই উপর।

চিন্তা করবেন না, আসুন একের পর এক ঘুরে দেখি।

আপনি যে লাইভ ট্রেডিং পরিচালনা করতে চান তার তথ্য পান

এফএমজেডে, আপনি যদি লাইভ ট্রেডিংয়ের প্যারামিটার কনফিগারেশন পরিবর্তন করতে চান তবে এটি অবশ্যই চলমান হতে হবে। কারণ কেবলমাত্র একটি লাইভ ট্রেডিং যা চলমান নয় তার প্যারামিটার কনফিগারেশন পরিবর্তন করা যেতে পারে। একটি লাইভ ট্রেডিং যা চলমান অবস্থায় নেই তা হতে পারেঃ

  • কৌশলটি বন্ধ হয়ে গেছে।
  • কৌশল ত্রুটি আছে, বন্ধ.

সুতরাং আমাদের প্রথমে নির্দিষ্ট কৌশলটির জন্য লাইভ ট্রেডিং পেতে হবে, এবং এই লাইভ ট্রেডিং একটিবন্ধ অবস্থাঅথবাথামাতে একটি ত্রুটি আছে.

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

এটি আমাদের লাইভ ট্রেডিং সম্পর্কে সমস্ত তথ্য দেয় যা আমাদের কনফিগারেশন পরিবর্তন করতে হবে, এরপরে আমরা লাইভ ট্রেডিংয়ের বিস্তারিত কনফিগারেশন পাব।

লাইভ ট্রেডিং কনফিগারেশন প্যারামিটার পরিবর্তন

উদাহরণস্বরূপ, লাইভ ট্রেডিং কৌশল যার জন্য আমাদের পরামিতিগুলি সংশোধন করতে হবে তা নিম্নরূপ (যেমন, কৌশল যার কৌশল আইডি কৌশলআইডি ভেরিয়েবল):

img

img

এই কৌশলটির তিনটি পরামিতি রয়েছে।

লাইভ ট্রেডিংয়ের জন্য কৌশল পরামিতিগুলি সংশোধন করুন, কিন্তু সম্ভবত আমরা কৌশলটির বিনিময় কনফিগারেশনটি সংশোধন করতে চাই না, তবে এক্সটেন্ডেড এপিআই ইন্টারফেস পুনরায় চালু করুন রোবট ফাংশনের জন্য, হয় কোনও পরামিতি নির্দিষ্ট করা হয় না (যেমন লাইভ ট্রেডিং শুরু করুন) অথবা সমস্ত পরামিতি কনফিগারেশন নির্দিষ্ট করা আবশ্যক।

অর্থাৎ, আমরা লাইভ ট্রেডিং শুরু করতে RestartRobot ফাংশন ব্যবহার করার আগে, আমাদের প্রথমে লাইভ ট্রেডিংয়ের বর্তমান কনফিগারেশন পেতে এক্সটেন্ডেড API ইন্টারফেস GetRobotDetail ফাংশন ব্যবহার করতে হবে, এবং তারপরে আমরা লাইভ ট্রেডিংয়ের শুরুতে কনফিগারেশন প্যারামিটারগুলি পুনরায় তৈরি করতে, সংশোধন করা দরকার এমন প্যারামিটারগুলির অংশটি প্রতিস্থাপন করি (যেমন, প্যারামিটারগুলি যা পুনরায় শুরু করতে ব্যবহৃত হবে) ।

সুতরাং, পরবর্তী আমরা robotList অতিক্রম, এবং বর্তমান প্যারামিটার কনফিগারেশন এক এক করে পেতে,/**/নিম্নলিখিত কোডের অংশটি লাইভ ট্রেডিংয়ের বিবরণ, আমাদের এই ডেটা নিয়ে কাজ করতে হবে।

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

ব্যাচ প্যারামিটার পরিবর্তন কৌশল চালানোর পর, আমার লাইভ ট্রেডিংঃ

  • টেস্ট ১ এ
  • টেস্ট ১বি

পরামিতিগুলির ব্যাচ সংশোধন কনফিগার করা এক্সচেঞ্জ অবজেক্ট, ট্রেডিং জোড়া এবং কে-লাইন সময়ের সাথে অপরিবর্তিত ছিলঃ

এটি লাইভ ট্রেডিং পৃষ্ঠায় স্বয়ংক্রিয়ভাবে পরিবর্তিত হয়েছেঃ

img

এবং চালানো শুরু. কারণ আমরা উপরে কোডে সংশোধিত পরামিতি নির্দিষ্টঃ

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

END

কয়েক ডজন, শত শত লাইভ ট্রেডিং ব্যাচ পরামিতি পরিবর্তন, এই পদ্ধতি আরো সুবিধাজনক. উদাহরণে, পরামিতি একটি অভিন্ন পরিবর্তন করা হয়, অবশ্যই আপনি প্রতিটি লাইভ ট্রেডিং জন্য বিভিন্ন পরামিতি কনফিগারেশন নির্দিষ্ট করতে কোড আপনার নিজস্ব পরিবর্তন নিয়ম কাস্টমাইজ করতে পারেন. অথবা বিভিন্ন বিনিময় বস্তু, ট্রেডিং জোড়া ইত্যাদি নির্দিষ্ট.

এফএমজেড প্ল্যাটফর্মের জন্য, এই প্রয়োজনীয়তাগুলি অর্জন করার জন্য নমনীয় এবং কাস্টমাইজযোগ্য। আপনার যদি কোনও প্রয়োজনীয়তার ধারণা থাকে তবে একটি মন্তব্য ছেড়ে যেতে দ্বিধা করবেন না, আমরা একে অপরের কাছ থেকে আলোচনা, গবেষণা এবং শিখতে পারি এবং সমস্যার সমাধান খুঁজে পেতে পারি।


আরো