
Mari kita lanjutkan dengan artikel sebelumnya:Perancangan Sistem Manajemen Sinkronisasi Order Berbasis Kuantifikasi FMZ (1)Setelah berdiskusi dengan para ahli, kami mulai merancang strategi untuk perdagangan salinan sinkron.
Pertimbangkan masalah desain berikut:
var isStopFollow = false // 用于标记当前是否跟单
var reStartPwd = null // 用于记录重启密码

Lalu tambahkan kontrol interaktif di halaman pengeditan strategi untuk menjeda/memulai ulang strategi (ini tidak menghentikan perdagangan sesungguhnya, namun hanya menjeda logika, berhenti mengikuti perintah, dan tidak melakukan apa pun). Saat menjeda, Anda dapat mengatur kata sandi jeda sehingga meskipun Anda memiliki KUNCI API yang diperluas订单同步管理系统类库(Single Server)Bahkan sesi perdagangan nyata tidak dapat membangkitkan strategi Anda. Saat memulai kembali perdagangan salinan, masukkan kata sandi yang telah ditetapkan untuk mengaktifkan fungsi perdagangan salinan.
Kode implementasi fungsi terkait:
...
// 判断交互指令
if (arr.length == 2) {
// 带控件的按钮
if (arr[0] == "stop/restart") {
// 暂停/重启跟单
if (!isStopFollow) {
isStopFollow = true
reStartPwd = arr[1]
Log("已经停止跟单,", "设置的重启密码为:", reStartPwd, "#FF0000")
} else if (isStopFollow && arr[1] == reStartPwd) {
isStopFollow = false
reStartPwd = null
Log("已经重启跟单,", "清空重启密码。", "#FF0000")
} else if (isStopFollow && arr[1] != reStartPwd) {
Log("重启密码错误!")
}
}
continue
}

definedAmount: menentukan jumlah pesanan tindak lanjut. Nilai default adalah -1, yang berarti tidak ditentukan.
zoomAmountRatio : memperbesar sesuai dengan jumlah pesanan pada sinyal terkirim, misalnya, sinyal terkirim adalah:ETH_USDT,swap,buy,1, kalikan jumlah pesanan dengan zoomAmountRatio. Nilai defaultnya adalah -1 yang berarti tidak ada skala.
var amount = specifiedAmount == -1 ? action.amount : specifiedAmount
amount = zoomAmountRatio == -1 ? amount : amount * zoomAmountRatio
Di sini kami menerapkan jumlah pesanan yang perlu diikuti dalam sinyal yang diterimaPerbesaratauTentukan nilai tertentu。
Pemesanan spot menggunakan pustaka kelas: https://www.fmz.com/strategy/10989 Perpustakaan pesanan berjangka: https://www.fmz.com/strategy/203258
function trade(action) {
// 切换交易对,设置合约
exchange.SetCurrency(action.symbol)
if (action.ct != "spot") {
exchange.SetContractType(action.ct)
}
var retTrade = null
var amount = specifiedAmount == -1 ? action.amount : specifiedAmount
amount = zoomAmountRatio == -1 ? amount : amount * zoomAmountRatio
if (action.direction == "buy") {
retTrade = action.ct == "spot" ? $.Buy(amount) : $.OpenLong(exchange, action.ct, amount)
} else if (action.direction == "sell") {
retTrade = action.ct == "spot" ? $.Sell(amount) : $.OpenShort(exchange, action.ct, amount)
} else if (action.direction == "closebuy") {
retTrade = action.ct == "spot" ? $.Sell(amount) : $.CoverLong(exchange, action.ct, amount)
} else if (action.direction == "closesell") {
retTrade = action.ct == "spot" ? $.Buy(amount) : $.CoverShort(exchange, action.ct, amount)
}
return retTrade
}
Jadi Anda lihat, untuk melakukan pemesanan hanya diperlukan satu kalimat:$.Sell(amount) 、$.Buy(amount) 、 $.OpenLong(exchange, action.ct, amount) .. Tunggu.
Sebelumnya订单同步管理系统(Synchronous Server)Kode sementara ini adalah:

Mulai mendesain ulang sekarang订单同步管理系统(Synchronous Server):
// 全局变量
var isStopFollow = false
var reStartPwd = null
function trade(action) {
// 切换交易对,设置合约
exchange.SetCurrency(action.symbol)
if (action.ct != "spot") {
exchange.SetContractType(action.ct)
}
var retTrade = null
var amount = specifiedAmount == -1 ? action.amount : specifiedAmount
amount = zoomAmountRatio == -1 ? amount : amount * zoomAmountRatio
if (action.direction == "buy") {
retTrade = action.ct == "spot" ? $.Buy(amount) : $.OpenLong(exchange, action.ct, amount)
} else if (action.direction == "sell") {
retTrade = action.ct == "spot" ? $.Sell(amount) : $.OpenShort(exchange, action.ct, amount)
} else if (action.direction == "closebuy") {
retTrade = action.ct == "spot" ? $.Sell(amount) : $.CoverLong(exchange, action.ct, amount)
} else if (action.direction == "closesell") {
retTrade = action.ct == "spot" ? $.Buy(amount) : $.CoverShort(exchange, action.ct, amount)
}
return retTrade
}
function parseCmd(cmd) {
var objAction = {}
// 解析cmd ,例如:ETH_USDT,swap,buy,1
var arr = cmd.split(",")
if (arr.length != 4) {
return null
}
objAction.symbol = arr[0]
objAction.ct = arr[1]
objAction.direction = arr[2]
objAction.amount = arr[3]
return objAction
}
function main() {
// 清除所有日志
LogReset(1)
if (isSimulateOKEX) {
exchange.IO("simulate", true)
Log("切换到OKEX模拟盘!")
}
// 设置精度
exchange.SetPrecision(pricePrecision, amountPrecision)
// 检查缩放、指定不能同时设置
if (specifiedAmount != -1 && zoomAmountRatio != -1) {
throw "不能同时指定同步量和缩放量"
}
while (true) {
var cmd = GetCommand()
if (cmd) {
Log("cmd: ", cmd)
var arr = cmd.split(":")
// 判断交互指令
if (arr.length == 2) {
// 带控件的按钮
if (arr[0] == "stop/restart") {
// 暂停/重启跟单
if (!isStopFollow) {
isStopFollow = true
reStartPwd = arr[1]
Log("已经停止跟单,", "设置的重启密码为:", reStartPwd, "#FF0000")
} else if (isStopFollow && arr[1] == reStartPwd) {
isStopFollow = false
reStartPwd = null
Log("已经重启跟单,", "清空重启密码。", "#FF0000")
} else if (isStopFollow && arr[1] != reStartPwd) {
Log("重启密码错误!")
}
}
continue
}
// 允许跟单
if (!isStopFollow) {
// 解析跟单信号交互指令
var objAction = parseCmd(cmd)
if (objAction) {
// 解析正确
var ret = trade(objAction)
} else {
Log("错误的信号指令 cmd:", cmd)
}
}
}
// 显示跟单情况
LogStatus(_D(), isStopFollow ? "停止同步" : "保持同步", "\n")
Sleep(1000)
}
}
Kali ini, akun dengan pesanan akan menggunakan akun riil Binance untuk pengujian, dan akun riil untuk menyalin pesanan akan menggunakan akun OKEX. Kami masih menggunakan fungsi pengujian yang digunakan pada artikel sebelumnya (订单同步管理系统类库(Single Server)Dalam templatemainfungsi).

Kami baru saja mengubah arah transaksi menjadi short selling dan volume transaksi menjadi 0,003 (kontrak berbasis Binance USDT dapat menempatkan pesanan dalam desimal). Namun, akun OKEX harus berupa bilangan bulat (perintah pertukaran OKEX harus ditempatkan dalam bilangan bulat), jadi saya menentukan parameter strategispecifiedAmountadalah 1.

订单同步管理系统类库(Single Server)Fungsi pengujian memicu transaksi nyata.

Strategi real-time untuk menyalin perintah menerima sinyal dan mengeksekusi tindakan penyalinan:

Bursa membuka pesanan yang sesuai.

Selanjutnya, mari kita uji penutupan posisi dan ubah arah order dalam fungsi utama pengujian untuk menutup posisi short sebanyak 0,003 kontrak.

Kemudian jalankan kembali disk sebenarnya yang bertanggung jawab untuk menerima pesanan (订单同步管理系统类库(Single Server))。

Operasi yang sama juga dipicu dengan menyalin pesanan sebenarnya:

Alamat Kebijakan: Pustaka kelas sistem manajemen sinkronisasi pesanan (Server Tunggal) Pesan Server Sinkron
Desain strategi ini hanya untuk komunikasi dan pembelajaran. Harap modifikasi, sesuaikan, dan optimalkan sesuai dengan kebutuhan produksi aktual.