avatar of 发明者量化-小小梦 发明者量化-小小梦
fokus pada Pesan pribadi
4
fokus pada
1271
Pengikut

Menggunakan API FMZ yang diperluas untuk mencapai manajemen kontrol grup yang efisien dalam perdagangan kuantitatif

Dibuat di: 2023-11-19 20:57:18, diperbarui pada: 2025-05-16 16:49:59
comments   0
hits   954

Menggunakan API FMZ yang diperluas untuk mencapai manajemen kontrol grup yang efisien dalam perdagangan kuantitatif

Dengan popularitas dan perkembangan perdagangan kuantitatif, investor biasanya perlu mengelola sejumlah besar akun riil, yang membawa tantangan besar dalam pengambilan keputusan, pemantauan, dan pelaksanaan perdagangan. Untuk meningkatkan efisiensi manajemen dan mengurangi kesulitan operasional, pedagang di FMZ dapat menggunakan API FMZ yang diperluas untuk manajemen kontrol grup. Artikel ini akan mengupas keuntungan menggunakan API FMZ yang diperluas dalam perdagangan kuantitatif dan cara mencapai manajemen kontrol grup yang efisien.

Banyak pengguna memiliki akun klien mereka sendiri yang perlu dikelola dan dipelihara. Jika ada banyak akun klien, diperlukan cara pengelolaan dan pemeliharaan yang lebih mudah (minimal selusin akun, dan maksimal ratusan akun). FMZ menyediakan API lanjutan yang canggih, dan manajemen kontrol grup melalui API lanjutan FMZ menjadi pilihan ideal.

Pemantauan terpusat

Melalui API FMZ yang diperluas, Anda dapat memantau aktivitas perdagangan dan status aset semua akun riil secara terpusat. Baik itu memeriksa posisi setiap akun, catatan transaksi historis, atau memantau situasi laba rugi akun secara langsung, hal itu dapat 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) + "`")
}

Desain parameter strategi:

Menggunakan API FMZ yang diperluas untuk mencapai manajemen kontrol grup yang efisien dalam perdagangan kuantitatif

Desain Interaksi:

Menggunakan API FMZ yang diperluas untuk mencapai manajemen kontrol grup yang efisien dalam perdagangan kuantitatif

Operasi disk nyata:

Menggunakan API FMZ yang diperluas untuk mencapai manajemen kontrol grup yang efisien dalam perdagangan kuantitatif

Eksekusi satu klik

Manajemen kontrol grup memudahkan eksekusi transaksi dengan satu klik. Anda dapat membeli, menjual, menutup posisi, dan operasi lainnya pada beberapa order riil di saat yang sama tanpa harus membuka order riil yang berbeda satu per satu. Hal ini tidak hanya meningkatkan efisiensi eksekusi, tetapi juga mengurangi kemungkinan kesalahan operasional.

Setelah memperoleh informasi daftar waktu nyata, kami dapat mengirimkan instruksi ke pasar waktu nyata untuk melakukan serangkaian operasi yang telah ditentukan sebelumnya. Misalnya: likuidasi waktu nyata, perlindungan suspensi waktu nyata, dan peralihan moda waktu nyata. Ini dapat diperluas melalui API FMZCommandRobotmenyelesaikan.

Kami terus menulis kode, cukup tambahkan beberapa interaksi dan perluas antarmuka API di fungsi utamaCommandRobotPanggilan:

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 FMZ yang diperluas untuk mencapai manajemen kontrol grup yang efisien dalam perdagangan kuantitatif

Strategi pengendalian kelompok kemudian mengirimkan instruksi ke “Uji 1 A” dan “Uji 1 B”.

Menggunakan API FMZ yang diperluas untuk mencapai manajemen kontrol grup yang efisien dalam perdagangan kuantitatif

Menggunakan API FMZ yang diperluas untuk mencapai manajemen kontrol grup yang efisien dalam perdagangan kuantitatif

Sinkronisasi Kebijakan

Dengan menggunakan API FMZ yang diperluas, Anda dapat dengan mudah memodifikasi parameter strategi secara berkelompok dan memulai serta menghentikan perdagangan nyata secara berkelompok. Karena panjangnya artikel ini, kami akan membahas secara rinci cara memodifikasi parameter strategi secara batch dan memulainya di artikel berikutnya.

Kesimpulan

Dalam perdagangan kuantitatif, dengan menggunakan API FMZ yang diperluas untuk manajemen kontrol grup, pedagang dapat memantau, mengeksekusi, dan menyesuaikan beberapa akun riil secara lebih efisien. Pendekatan manajemen terpusat ini tidak hanya meningkatkan efisiensi operasional, tetapi juga membantu penerapan pengendalian risiko dan sinkronisasi strategi dengan lebih baik. Bagi pedagang yang mengelola sejumlah besar akun riil, API FMZ yang diperluas memberi mereka alat yang canggih dan fleksibel, membuat perdagangan kuantitatif lebih nyaman dan terkendali.