Keuntungan Menggunakan API FMZ untuk Manajemen Kontrol Kelompok yang Efisien dalam Perdagangan Kuantitatif

Penulis:Lydia, Dibuat: 2023-11-20 14:05:49, Diperbarui: 2024-01-01 12:16:20

img

Dengan popularitas dan pengembangan perdagangan kuantitatif, investor sering perlu mengelola sejumlah besar akun langsung, yang membawa tantangan besar untuk keputusan perdagangan, pemantauan dan eksekusi. Untuk meningkatkan efisiensi manajemen dan mengurangi kesulitan operasional, pedagang di FMZ dapat menggunakan FMZ's diperluas API untuk manajemen kontrol kelompok.

Banyak pengguna memiliki akun live pelanggan mereka sendiri yang perlu dikelola dan dipelihara. Ketika ada banyak akun live pelanggan, cara yang lebih nyaman diperlukan untuk mengelolanya (sejumlah puluhan atau ratusan). FMZ menyediakan API yang diperluas yang kuat; menggunakan ini untuk manajemen kontrol kelompok telah menjadi pilihan yang ideal.

Pemantauan Terpusat

Melalui FMZ diperluas API, Anda dapat secara terpusat memantau kegiatan perdagangan dan kondisi aset dari semua akun hidup. Apakah itu memeriksa posisi setiap akun, catatan perdagangan sejarah, atau real-time pemantauan status keuntungan dan kerugian akun, semuanya dapat dicapai.

// Global variable
var isLogMsg = true   // Control whether the log is printed
var isDebug = false   // Debug mode
var arrIndexDesc = ["all", "running", "stop"]
var descRobotStatusCode = ["In idle", "Running", "Stopping", "Exited", "Stopped", "Strategy error"]
var dicRobotStatusCode = {
    "all" : -1,
    "running" : 1,
    "stop" : 4,
}

// Extended log function
function LogControl(...args) {
    if (isLogMsg) {
        Log(...args)
    }
}

// FMZ extended API call function
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 
}

// Obtain all live trading information of 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("Exceeded the maximum number of retries", 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 
}

function main() {
    var robotStatusCode = dicRobotStatusCode[arrIndexDesc[robotStatus]]
    var robotList = getAllRobotByIdAndStatus(accessKey, secretKey, strategyId, robotStatusCode)
    if (!robotList) {
        Log("Failed to obtain live trading data")
    }
    
    var robotTbl = {"type": "table", "title": "live trading list", "cols": [], "rows": []}
    robotTbl.cols = ["live trading Id", "live trading name", "live trading status", "strategy name", "live trading profit"]

    _.each(robotList, function(robotInfo) {
        robotTbl.rows.push([robotInfo.id, robotInfo.name, descRobotStatusCode[robotInfo.status], robotInfo.strategy_name, robotInfo.profit])
    })

    LogStatus(_D(), "`" + JSON.stringify(robotTbl) + "`")
}

Desain parameter strategi:

img

Berjalan pada perdagangan langsung:

img

Eksekusi dengan satu klik

Pengelolaan kontrol kelompok membuat sangat nyaman untuk mengeksekusi transaksi dengan satu klik. Anda dapat membeli, menjual, dan menutup posisi pada beberapa akun perdagangan langsung secara bersamaan tanpa harus membuka setiap akun secara individual. Ini tidak hanya meningkatkan efisiensi eksekusi, tetapi juga mengurangi kemungkinan kesalahan operasional.

Setelah mendapatkan daftar akun perdagangan langsung, kita dapat mengirim perintah ke akun ini dan melakukan serangkaian operasi yang telah ditentukan sebelumnya.CommandRobot.

Saat kita terus menulis kode, kita hanya perlu menambahkan beberapa interaksi dan panggilan ke antarmuka API diperpanjangCommandRobotdalam fungsi utama kami:

function main() {
    var robotStatusCode = dicRobotStatusCode[arrIndexDesc[robotStatus]]
    var robotList = getAllRobotByIdAndStatus(accessKey, secretKey, strategyId, robotStatusCode)
    if (!robotList) {
        Log("Failed to obtain live trading data")
    }
    
    var robotTbl = {"type": "table", "title": "live trading list", "cols": [], "rows": []}
    robotTbl.cols = ["live trading Id", "live trading name", "live trading status", "strategy name", "live trading profit"]

    _.each(robotList, function(robotInfo) {
        robotTbl.rows.push([robotInfo.id, robotInfo.name, descRobotStatusCode[robotInfo.status], robotInfo.strategy_name, robotInfo.profit])
    })

    LogStatus(_D(), "`" + JSON.stringify(robotTbl) + "`")

    while(true) {
        LogStatus(_D(), ", Waiting to receive interactive commands", "\n", "`" + JSON.stringify(robotTbl) + "`")

        var cmd = GetCommand()
        if (cmd) {
            var arrCmd = cmd.split(":")
            if (arrCmd.length == 1 && cmd == "coverAll") {
                _.each(robotList, function(robotInfo) {
                    var strCmd = "Clearance"               // You can define the required message format
                    if (robotInfo.status != 1) {     // Only the "live" trading platform can receive commands.
                        return 
                    }
                    var ret = callFmzExtAPI(accessKey, secretKey, "CommandRobot", parseInt(robotInfo.id), strCmd)
                    LogControl("Send command to the live trading board with id: ", robotInfo.id, ":", strCmd, ", execution result:", ret)
                })
            }
        }
        Sleep(1000)
    }
}

img

Strategi kontrol kelompok mengirim instruksi ke Test 1 A dan Test 1 B.

img img

img img

Sinkronisasi Strategi

Dengan FMZ diperluas API, Anda dapat dengan mudah menerapkan modifikasi batch dari parameter strategi, dan batch memulai atau menghentikan perdagangan langsung.

Ringkasan

Dalam perdagangan kuantitatif, dengan menggunakan FMZ diperluas API untuk manajemen kontrol kelompok, pedagang dapat memantau, mengeksekusi dan menyesuaikan beberapa akun hidup lebih efisien.

Untuk pedagang yang mengelola sejumlah besar akun langsung, FMZ memperluas API menyediakan mereka dengan alat yang kuat dan fleksibel yang membuat perdagangan kuantitatif lebih nyaman dan terkendali.


Lebih banyak