Sumber daya yang dimuat... Pemuatan...

Ajarkan Anda untuk menggunakan FMZ diperluas API untuk Batch Modify Parameter dari bot

Penulis:FMZ~Lydia, Dibuat: 2023-12-11 13:37:55, Diperbarui: 2024-11-06 21:16:44

img

Bagaimana saya dapat mengubah parameter perdagangan langsung dalam batch di FMZ? Ketika jumlah perdagangan langsung melebihi lusinan dan mencapai ratusan, akan sangat tidak nyaman untuk mengkonfigurasi perdagangan langsung satu per satu secara manual. Pada saat ini, kita dapat menggunakan FMZ diperluas API untuk menyelesaikan operasi ini. Jadi dalam artikel ini, kita akan mengeksplorasi kontrol kelompok bot, memperbarui beberapa rincian parameter.

Dalam artikel sebelumnya, kami menyelesaikan masalah bagaimana menggunakan FMZ diperluas API untuk memantau semua perdagangan hidup, kelompok kontrol perdagangan hidup, dan mengirim perintah ke perdagangan hidup. dan kita masih menggunakan kode panggilan antarmuka yang kita terkapas dalam artikel sebelumnya sebagai dasar, terus menulis kode untuk mewujudkan modifikasi batch dari parameter perdagangan hidup.

Pengaturan parameter:

img

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

Mengenal Fungsi RestartRobot dari FMZ Extended API Pertama

Ketika kita perlu batch memodifikasi parameter perdagangan langsung dan kemudian menjalankan, ada 2 kasus untuk skenario ini untuk memulai dengan.

    1. Bot telah dibuat Untuk perdagangan langsung yang sudah dibuat, wajar untuk memulai kembali menggunakan fungsi RestartRobot, yang merupakan antarmuka API diperpanjang ke FMZ.
    1. Bot belum dibuat Untuk trading live belum dibuat, tidak perlu mengubah parameter trading live, yaitu penciptaan batch trading live untuk dijalankan, dan kami menggunakan FMZ extended API interface - fungsi NewRobot.

Tapi tidak peduli apa jenis metode, ide berikutnya serta operasi yang sama, jadi kita akan menggunakanRestartRobotfungsi API diperpanjang sebagai contoh untuk menjelaskan.

Fungsi RestartRobot digunakan dengan dua cara:

    1. Konfigurasi dengan hanya ID perdagangan langsung yang diteruskan, bukan parameter perdagangan langsung Pendekatan ini menjaga konfigurasi parameter tidak berubah ketika perdagangan langsung dihentikan, dan memulai kembali perdagangan langsung saja.
    1. Konfigurasi dengan ID perdagangan langsung dan parameter perdagangan langsung yang diteruskan Pendekatan ini memulai perdagangan langsung dengan konfigurasi parameter baru.

Pendekatan pertama tidak berguna untuk skenario permintaan kita, karena permintaan kita sendiri adalah untuk memodifikasi sejumlah besar parameter perdagangan langsung secara massal. jadi pertanyaannya adalah, konfigurasi parameter perdagangan langsung sangat kompleks, ada konfigurasi objek pertukaran, konfigurasi parameter strategi, pengaturan periode K-line dan sebagainya.

Jangan khawatir, mari kita jelajahi mereka satu per satu.

Dapatkan Informasi dari Live Trading yang ingin Anda operasikan

Pada FMZ, jika Anda ingin memodifikasi konfigurasi parameter dari perdagangan langsung, maka harus tidak berjalan. Karena hanya perdagangan langsung yang tidak berjalan yang dapat memodifikasi konfigurasi parameternya.

  • Strategi berhenti.
  • Strategi memiliki kesalahan, dihentikan.

Jadi kita perlu mendapatkan perdagangan hidup untuk strategi yang ditentukan pertama, dan perdagangan hidup ini dalamstatus berhentiataumemiliki kesalahan 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 informasi tentang perdagangan langsung yang kita butuhkan untuk mengubah konfigurasi, selanjutnya kita akan mendapatkan konfigurasi terperinci dari perdagangan langsung.

Modifikasi Parameter Konfigurasi Live Trading

Misalnya, strategi perdagangan langsung yang perlu kita modifikasi parameter adalah sebagai berikut (yaitu, strategi yang strategi ID adalah variabel strategyId):

img

img

Strategi ini memiliki 3 parameter sebagai tes.

Mengubah parameter strategi untuk perdagangan langsung, tetapi mungkin kita tidak ingin memodifikasi strategis konfigurasi pertukaran, tetapi untuk antarmuka API diperluas fungsi RestartRobot, baik tidak ada parameter yang ditentukan (seperti hanya memulai perdagangan langsung) atau semua konfigurasi parameter harus ditentukan.

Artinya, sebelum kita menggunakan fungsi RestartRobot untuk memulai perdagangan langsung, kita harus menggunakan fungsi antarmuka API yang diperluas GetRobotDetail untuk mendapatkan konfigurasi perdagangan langsung saat ini terlebih dahulu, dan kemudian kita mengganti bagian dari parameter yang perlu dimodifikasi, untuk membangun kembali parameter konfigurasi untuk memulai perdagangan langsung (yaitu, parameter yang akan digunakan untuk memanggil RestartRobot), dan kemudian memulai kembali perdagangan langsung.

Jadi, selanjutnya kita melintasi robotList, dan mendapatkan konfigurasi parameter saat ini satu per satu,/**/Komentar bagian dari kode berikut adalah detail 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)
    })
}

Setelah menjalankan strategi modifikasi parameter batch, perdagangan langsung saya:

  • Tes 1A
  • Tes 1B

Modifikasi batch parameter dilakukan dengan objek pertukaran yang dikonfigurasi, pasangan perdagangan dan periode K-line tidak berubah:

Itu diubah di halaman perdagangan langsung secara otomatis:

img

Dan mulai berjalan. karena kita menentukan parameter yang dimodifikasi dalam kode di atas:

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

Penghentian

Untuk puluhan, ratusan batch live trading modifikasi parameter, metode ini lebih nyaman. dalam contoh, parameter dimodifikasi menjadi seragam, tentu saja Anda dapat menyesuaikan aturan modifikasi Anda sendiri dalam kode untuk menentukan konfigurasi parameter yang berbeda untuk setiap live trading. atau menentukan objek pertukaran yang berbeda, pasangan perdagangan dan sebagainya.

Untuk platform FMZ, persyaratan ini fleksibel dan dapat disesuaikan untuk dicapai. Jangan ragu untuk meninggalkan komentar jika Anda memiliki ide persyaratan, kita dapat mendiskusikan, meneliti dan belajar satu sama lain, dan menemukan solusi untuk masalah.


Lebih banyak