Ajar anda untuk menggunakan FMZ diperluaskan API untuk batch mengubah suai Parameter bot

Penulis:Lydia, Dicipta: 2023-12-11 13:37:55, Dikemas kini: 2024-01-02 21:22:49

img

Bagaimana saya boleh menukar parameter perdagangan langsung dalam batch di FMZ? Apabila bilangan perdagangan langsung melebihi berpuluh-puluh dan mencapai ratusan, ia akan menjadi sangat tidak selesa untuk mengkonfigurasi perdagangan langsung satu demi satu secara manual. Pada masa ini, kita boleh menggunakan FMZ diperluaskan API untuk menyelesaikan operasi ini. Jadi dalam artikel ini, kita akan meneroka kawalan kumpulan bot, mengemas kini beberapa butiran parameter.

Dalam artikel sebelumnya, kami menyelesaikan masalah bagaimana untuk menggunakan FMZ diperluaskan API untuk memantau semua perdagangan hidup, kumpulan kawalan perdagangan hidup, dan menghantar arahan kepada perdagangan hidup. dan kita masih menggunakan antara muka panggilan kod yang kita dilampirkan dalam artikel sebelumnya sebagai asas, terus menulis kod untuk merealisasikan modifikasi batch parameter perdagangan hidup.

Tetapan parameter:

img

Kod strategi:

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

Kenali Fungsi RestartRobot dari FMZ Extended API Pertama

Apabila kita perlu batch mengubah suai parameter perdagangan langsung dan kemudian menjalankan ia, terdapat 2 kes untuk senario ini untuk bermula dengan.

    1. Bot telah dicipta Untuk perdagangan langsung yang telah dicipta, adalah wajar untuk memulakan semula menggunakan fungsi RestartRobot, yang merupakan antara muka API yang diperluaskan ke FMZ.
    1. Bot belum dicipta Untuk perdagangan langsung tidak telah dicipta, tidak perlu mengubahsuai parameter perdagangan langsung, itu penciptaan kumpulan perdagangan langsung untuk dijalankan, dan kami menggunakan antara muka API FMZ diperluaskan - fungsi NewRobot.

Tetapi tidak kira apa jenis kaedah, idea seterusnya serta operasi adalah sama, jadi kita akan menggunakanRestartRobotfungsi API yang diperluaskan sebagai contoh untuk menjelaskan.

Fungsi RestartRobot digunakan dalam dua cara:

    1. Konfigurasi dengan hanya ID dagangan langsung yang diteruskan, bukan parameter dagangan langsung Pendekatan ini mengekalkan konfigurasi parameter tidak berubah apabila perdagangan langsung dihentikan, dan memulakan semula perdagangan langsung sahaja.
    1. Konfigurasi dengan ID dagangan langsung dan parameter dagangan langsung yang diteruskan Pendekatan ini memulakan perdagangan langsung dengan konfigurasi parameter baru.

Pendekatan pertama tidak berguna untuk senario permintaan kita, kerana permintaan kita sendiri adalah untuk mengubah suai sebilangan besar parameter perdagangan langsung secara pukal. jadi persoalan adalah, konfigurasi parameter perdagangan langsung sangat kompleks, terdapat konfigurasi objek pertukaran, konfigurasi parameter strategi, tetapan tempoh K-garis dan sebagainya.

Jangan risau, mari kita meneroka mereka satu demi satu.

Dapatkan Maklumat Dagangan Langsung yang anda ingin beroperasi

Pada FMZ, jika anda ingin mengubah konfigurasi parameter perdagangan langsung, maka ia mesti tidak berjalan. Kerana hanya perdagangan langsung yang tidak berjalan boleh mempunyai konfigurasi parameternya diubah. Dagangan langsung yang tidak dalam keadaan berjalan mungkin berada di:

  • Strategi berhenti.
  • Strategi ada kesilapan, berhenti.

Jadi kita perlu mendapatkan perdagangan langsung untuk strategi yang ditentukan terlebih dahulu, dan perdagangan langsung ini adalah dalamkeadaan berhentiatauMempunyai kesilapan untuk berhenti.

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

Ini memberi kita semua maklumat mengenai perdagangan langsung yang kita perlukan untuk mengubah konfigurasi, seterusnya kita akan mendapat konfigurasi terperinci perdagangan langsung.

Perubahan Parameter Konfigurasi Dagangan Langsung

Sebagai contoh, strategi dagangan langsung yang kita perlu mengubah suai parameter adalah seperti berikut (iaitu, strategi yang ID strategi adalah strategyId pembolehubah):

img

img

Strategi ini mempunyai 3 parameter sebagai ujian.

Mengubahsuai parameter strategi untuk perdagangan langsung, tetapi mungkin kita tidak mahu mengubahsuai konfigurasi pertukaran strategi, tetapi untuk antarmuka API Terpanjang fungsi RestartRobot, sama ada tiada parameter yang ditentukan (seperti hanya memulakan perdagangan langsung) atau semua konfigurasi parameter mesti ditentukan.

Maksudnya, sebelum kita menggunakan fungsi RestartRobot untuk memulakan perdagangan langsung, kita mesti menggunakan fungsi antarmuka API lanjutan GetRobotDetail untuk mendapatkan konfigurasi semasa perdagangan langsung terlebih dahulu, dan kemudian kita menggantikan bahagian parameter yang perlu diubah suai, untuk membina semula parameter konfigurasi untuk permulaan perdagangan langsung (iaitu, parameter yang akan digunakan untuk memanggil RestartRobot), dan kemudian mulakan semula perdagangan langsung.

Jadi, seterusnya kita merentasi robotList, dan mendapatkan konfigurasi parameter semasa satu demi satu,/**/Komentar sebahagian daripada kod berikut adalah butiran perdagangan langsung, kita perlu menangani data ini.

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

Selepas menjalankan batch parameter modifikasi strategi, perdagangan hidup saya:

  • Ujian 1A
  • Ujian 1B

Pengubahsuaian batch parameter dilakukan dengan objek pertukaran yang dikonfigurasikan, pasangan dagangan dan tempoh K-line tidak berubah:

Ia telah diubah pada halaman perdagangan langsung secara automatik:

img

Dan mula berjalan. kerana kita menentukan parameter yang diubahsuai dalam kod di atas:

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

END

Untuk berpuluh-puluh, beratus-ratus batch perdagangan hidup mengubah suai parameter, kaedah ini lebih mudah. dalam contoh, parameter diubahsuai kepada seragam, sudah tentu anda boleh menyesuaikan peraturan pengubahsuaian anda sendiri dalam kod untuk menentukan konfigurasi parameter yang berbeza untuk setiap perdagangan hidup. atau menentukan objek pertukaran yang berbeza, pasangan dagangan dan sebagainya.

Untuk platform FMZ, keperluan ini fleksibel dan boleh disesuaikan untuk dicapai. Jangan ragu untuk meninggalkan komen jika anda mempunyai sebarang idea keperluan, kita boleh membincangkan, penyelidikan dan belajar dari satu sama lain, dan mencari penyelesaian kepada masalah.


Lebih lanjut