Kelebihan menggunakan API diperluaskan FMZ untuk pengurusan kawalan kumpulan yang cekap dalam perdagangan kuantitatif

Penulis:Lydia, Dicipta pada: 2023-11-20 14:05:49, Dikemas kini pada: 2024-01-01 12:16:20

img

Dengan popularisasi dan perkembangan perdagangan kuantitatif, pelabur sering perlu menguruskan sebilangan besar akaun hidup, yang membawa cabaran besar untuk keputusan perdagangan, pemantauan dan pelaksanaan. Untuk meningkatkan kecekapan pengurusan dan mengurangkan kesukaran operasi, peniaga di FMZ boleh menggunakan FMZ diperluaskan API untuk pengurusan kawalan kumpulan.

FMZ menyediakan API lanjutan yang kuat; menggunakan ini untuk pengurusan kawalan kumpulan telah menjadi pilihan yang ideal.

Pemantauan Pusat

Melalui FMZ diperluaskan API, anda boleh memantau secara pusat aktiviti dagangan dan keadaan aset semua akaun hidup.

// 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) + "`")
}

Reka bentuk parameter strategi:

img

Berjalan pada perdagangan langsung:

img

Pelaksanaan dengan satu klik

Pengurusan kawalan kumpulan menjadikannya sangat mudah untuk melaksanakan transaksi dengan satu klik. Anda boleh membeli, menjual, dan menutup kedudukan pada beberapa akaun dagangan langsung secara serentak tanpa perlu membuka setiap akaun secara berasingan. Ini bukan sahaja meningkatkan kecekapan pelaksanaan, tetapi juga mengurangkan kemungkinan kesilapan operasi.

Selepas mendapatkan senarai akaun perdagangan langsung, kita boleh menghantar arahan ke akaun ini dan melakukan satu siri operasi yang telah ditentukan. Sebagai contoh: pembersihan kedudukan dalam akaun langsung, menghentikan perlindungan dalam akaun langsung, menukar mod dalam akaun langsung. Semua ini dapat dicapai melalui FMZ diperluaskan APICommandRobot.

Sebagai kita terus menulis kod, kita hanya perlu menambah beberapa interaksi dan panggilan kepada antara muka API yang dilanjutkanCommandRobotdalam 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 kawalan kumpulan menghantar arahan kepada Ujian 1 A dan Ujian 1 B.

img img

img img

Sinkronisasi Strategi

Dengan FMZ diperluaskan API, anda boleh dengan mudah melaksanakan batch pengubahsuaian parameter strategi, dan batch memulakan atau menghentikan perdagangan langsung.

Ringkasan

Dalam perdagangan kuantitatif, dengan menggunakan FMZ diperluaskan API untuk pengurusan kawalan kumpulan, peniaga boleh memantau, melaksanakan dan menyesuaikan beberapa akaun hidup dengan lebih cekap.

Bagi peniaga yang menguruskan sebilangan besar akaun langsung, API diperluaskan FMZ menyediakan mereka dengan alat yang kuat dan fleksibel yang menjadikan perdagangan kuantitatif lebih mudah dan boleh dikawal.


Lebih lanjut