avatar of 发明者量化-小小梦 发明者量化-小小梦
fokus pada mesej peribadi
4
fokus pada
1271
Pengikut

Menggunakan API lanjutan FMZ untuk mencapai pengurusan kawalan kumpulan yang cekap dalam perdagangan kuantitatif

Dicipta dalam: 2023-11-19 20:57:18, dikemas kini pada: 2025-05-16 16:49:59
comments   0
hits   954

Menggunakan API lanjutan FMZ untuk mencapai pengurusan kawalan kumpulan yang cekap dalam perdagangan kuantitatif

Dengan populariti dan perkembangan perdagangan kuantitatif, pelabur biasanya perlu mengurus sejumlah besar akaun nyata, yang membawa cabaran besar kepada membuat keputusan, pemantauan dan pelaksanaan perdagangan. Untuk meningkatkan kecekapan pengurusan dan mengurangkan kesukaran operasi, peniaga di FMZ boleh menggunakan API lanjutan FMZ untuk pengurusan kawalan kumpulan. Artikel ini akan meneroka kelebihan menggunakan API lanjutan FMZ dalam perdagangan kuantitatif dan cara untuk mencapai pengurusan kawalan kumpulan yang cekap.

Ramai pengguna mempunyai akaun pelanggan mereka sendiri yang perlu diurus dan diselenggarakan Apabila terdapat sejumlah besar akaun pelanggan, cara pengurusan dan penyelenggaraan yang lebih mudah diperlukan (sekurang-kurangnya sedozen akaun, dan paling banyak ratusan akaun). FMZ menyediakan API lanjutan yang berkuasa, dan pengurusan kawalan kumpulan melalui API lanjutan FMZ menjadi pilihan yang ideal.

Pemantauan berpusat

Melalui API lanjutan FMZ, anda boleh memantau aktiviti dagangan dan status aset semua akaun sebenar secara berpusat. Sama ada ia menyemak kedudukan setiap akaun, rekod transaksi sejarah atau pemantauan masa nyata keadaan untung dan rugi akaun, ia boleh dicapai.

// 全局变量
var isLogMsg = true   // 控制日志是否打印
var isDebug = false   // 调试模式
var arrIndexDesc = ["all", "running", "stop"]
var descRobotStatusCode = ["空闲中", "运行中", "停止中", "已退出", "被停止", "策略有错误"]
var dicRobotStatusCode = {
    "all" : -1,
    "running" : 1,
    "stop" : 4,
}

// 扩展的日志函数
function LogControl(...args) {
    if (isLogMsg) {
        Log(...args)
    }
}

// FMZ扩展API调用函数
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)  // 控制频率
    return ret 
}

// 获取指定策略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("超过最大重试次数", 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("获取实盘数据失败")
    }
    
    var robotTbl = {"type": "table", "title": "实盘列表", "cols": [], "rows": []}
    robotTbl.cols = ["实盘Id", "实盘名称", "实盘状态", "策略名称", "实盘收益"]

    _.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:

Menggunakan API lanjutan FMZ untuk mencapai pengurusan kawalan kumpulan yang cekap dalam perdagangan kuantitatif

Reka Bentuk Interaksi:

Menggunakan API lanjutan FMZ untuk mencapai pengurusan kawalan kumpulan yang cekap dalam perdagangan kuantitatif

Operasi cakera sebenar:

Menggunakan API lanjutan FMZ untuk mencapai pengurusan kawalan kumpulan yang cekap dalam perdagangan kuantitatif

Pelaksanaan satu klik

Pengurusan kawalan kumpulan menjadikannya sangat mudah untuk melaksanakan transaksi dengan satu klik. Anda boleh membeli, menjual, menutup kedudukan dan operasi lain pada berbilang pesanan sebenar pada masa yang sama tanpa perlu membuka pesanan sebenar yang berbeza satu demi satu. Ini bukan sahaja meningkatkan kecekapan pelaksanaan, tetapi juga mengurangkan kemungkinan ralat operasi.

Selepas mendapatkan maklumat senarai masa nyata, kami boleh menghantar arahan kepada pasaran masa nyata untuk melaksanakan satu siri operasi yang telah ditetapkan. Contohnya: pembubaran masa nyata, perlindungan penggantungan masa nyata dan penukaran mod masa nyata. Ini boleh dilanjutkan melalui FMZ APICommandRobotcapai.

Kami terus menulis kod, cuma tambah beberapa interaksi dan lanjutkan antara muka API dalam fungsi utamaCommandRobotPanggilannya:

function main() {
    var robotStatusCode = dicRobotStatusCode[arrIndexDesc[robotStatus]]
    var robotList = getAllRobotByIdAndStatus(accessKey, secretKey, strategyId, robotStatusCode)
    if (!robotList) {
        Log("获取实盘数据失败")
    }
    
    var robotTbl = {"type": "table", "title": "实盘列表", "cols": [], "rows": []}
    robotTbl.cols = ["实盘Id", "实盘名称", "实盘状态", "策略名称", "实盘收益"]

    _.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(), ", 等待接收交互命令", "\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 = "清仓"               // 可以定义所需的消息格式
                    if (robotInfo.status != 1) {     // 只有”活着“的实盘才能接收命令
                        return 
                    }
                    var ret = callFmzExtAPI(accessKey, secretKey, "CommandRobot", parseInt(robotInfo.id), strCmd)
                    LogControl("向id:", robotInfo.id, "的实盘发送命令:", strCmd, ", 执行结果:", ret)
                })
            }
        }
        Sleep(1000)
    }
}

Menggunakan API lanjutan FMZ untuk mencapai pengurusan kawalan kumpulan yang cekap dalam perdagangan kuantitatif

Strategi kawalan kumpulan kemudiannya menghantar arahan kepada “Ujian 1 A” dan “Ujian 1 B”.

Menggunakan API lanjutan FMZ untuk mencapai pengurusan kawalan kumpulan yang cekap dalam perdagangan kuantitatif

Menggunakan API lanjutan FMZ untuk mencapai pengurusan kawalan kumpulan yang cekap dalam perdagangan kuantitatif

Penyegerakan Dasar

Menggunakan API lanjutan FMZ, anda boleh mengubah suai parameter strategi dalam kelompok dengan mudah dan memulakan serta menghentikan dagangan sebenar dalam kelompok. Disebabkan oleh panjang artikel, kami akan membincangkan secara terperinci cara membatch mengubah suai parameter strategi dan memulakannya dalam artikel seterusnya.

Kesimpulan

Dalam dagangan kuantitatif, dengan menggunakan API lanjutan FMZ untuk pengurusan kawalan kumpulan, pedagang boleh memantau, melaksanakan dan melaraskan berbilang akaun nyata dengan lebih cekap. Pendekatan pengurusan berpusat ini bukan sahaja meningkatkan kecekapan operasi, tetapi juga membantu untuk melaksanakan kawalan risiko dan penyegerakan strategi dengan lebih baik. Bagi peniaga yang menguruskan sejumlah besar akaun nyata, API lanjutan FMZ menyediakan mereka alat yang berkuasa dan fleksibel, menjadikan dagangan kuantitatif lebih mudah dan terkawal.