Mari kita teruskan perbincangan dari artikel sebelumnya: Reka bentuk Sistem Pengurusan Pengaturcaraan Perintah Berdasarkan Kuantifikasi FMZ (1) (https://www.fmz.com/digest-topic/9729) dan mula merancang strategi untuk mengikuti pesanan yang diselaraskan.
Fikirkan beberapa isu reka bentuk seperti itu:
var isStopFollow = false // Used to mark whether the current order is being followed
var reStartPwd = null // Used to record the restart password
Kemudian kita menambah kawalan interaktif pada halaman penyuntingan strategi untuk strategi jeda / memulakan semula (bukan untuk menghentikan bot sebenar, hanya jeda logik, tidak lagi perintah-mengikuti).Order Synchronization Management System Class Library (Single Server)
Apabila memulakan semula perintah berikut, masukkan kata laluan yang ditetapkan untuk membangunkan fungsi perintah berikut.
Kod untuk pelaksanaan fungsi yang berkaitan:
...
// Judge the interaction command
if (arr.length == 2) {
// Buttons with controls
if (arr[0] == "stop/restart") {
// Pause/restart order-following
if (!isStopFollow) {
isStopFollow = true
reStartPwd = arr[1]
Log("it has stopped the order-following,", "Set the restart password as:", reStartPwd, "#FF0000")
} else if (isStopFollow && arr[1] == reStartPwd) {
isStopFollow = false
reStartPwd = null
Log("it has restarted the order-following, ", "Clear the restart password.", "#FF0000")
} else if (isStopFollow && arr[1] != reStartPwd) {
Log("Restart password error!")
}
}
continue
}
specifiedAmount: Tentukan bilangan perintah yang diikuti, lalai adalah -1, iaitu tidak ditentukan. zoomAmountRatio: Skala mengikut jumlah pesanan yang dihantar, contohnya, jika isyarat yang dihantar adalah: ETH_USDT,swap,buy,1, kalikan nilai jumlah pesanan dengan zoomAmountRatio.
var amount = specifiedAmount == -1 ? action.amount : specifiedAmount
amount = zoomAmountRatio == -1 ? amount : amount * zoomAmountRatio
Di sini ia dilaksanakan untuk skala atau menentukan nilai tertentu untuk jumlah pesanan yang akan diikuti dalam isyarat yang diterima.
Perpustakaan kelas yang digunakan oleh pesanan spot diletakkan:https://www.fmz.com/strategy/10989Perpustakaan kelas yang digunakan oleh pesanan masa depan diletakkan:https://www.fmz.com/strategy/203258
function trade(action) {
// Switch trading pairs and set up contracts
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 kita boleh lihat bahawa meletakkan pesanan hanya memerlukan satu ayat:$.Sell(amount)
, $.Buy(amount)
, $.OpenLong(exchange, action.ct, amount)
. dan lain-lain
Kod sementara dari sebelum iniOrder Synchronous Management System (Synchronous Server)
adalah seperti berikut:
Sekarang kita mula reka bentuk semula Sistem Pengurusan Pengadun Perintah (Synchronous Server):
// Global variables
var isStopFollow = false
var reStartPwd = null
function trade(action) {
// Switch trading pairs and set up contracts
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 = {}
// Parse cmd, such as: 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() {
// Clear all logs
LogReset(1)
if (isSimulateOKEX) {
exchange.IO("simulate", true)
Log("Switch to OKEX demo!")
}
// Set accuracy
exchange.SetPrecision(pricePrecision, amountPrecision)
// Check zoom and specify it cannot be set at the same time
if (specifiedAmount != -1 && zoomAmountRatio != -1) {
throw "it cannot specify simultaneous volume and scaling volume at the same time"
}
while (true) {
var cmd = GetCommand()
if (cmd) {
Log("cmd: ", cmd)
var arr = cmd.split(":")
// Judge interaction commands
if (arr.length == 2) {
// Buttons with controls
if (arr[0] == "stop/restart") {
// Pause/restart order-following
if (!isStopFollow) {
isStopFollow = true
reStartPwd = arr[1]
Log("it has stopped the order-following.", "Set the restart password as.", reStartPwd, "#FF0000")
} else if (isStopFollow && arr[1] == reStartPwd) {
isStopFollow = false
reStartPwd = null
Log("it has restarted the order-following", "Clear the restart password.", "#FF0000")
} else if (isStopFollow && arr[1] != reStartPwd) {
Log("Restart password error!")
}
}
continue
}
// Permission to follow orders
if (!isStopFollow) {
// Resolve the interaction instructions of order-following signal
var objAction = parseCmd(cmd)
if (objAction) {
// The analysis is correct
var ret = trade(objAction)
} else {
Log("Wrong signal command cmd:", cmd)
}
}
}
// Display order-following status
LogStatus(_D(), isStopFollow ? "Stop Synchronization" : "Keep Synchronization", "\n")
Sleep(1000)
}
}
Kami menguji akaun pimpinan pesanan dengan menggunakan bot sebenar Binance untuk masa ini, dan kami menggunakan akaun OKEX untuk bot sebenar mengikut pesanan.main
fungsi dalam fungsi ujian(Order Synchronization Management System Class Library (Single Server)
dalam templat) yang digunakan dalam artikel sebelumnya.
Di sini kita mengubah arah transaksi menjadi
Seterusnya, mari kita menguji penutupan kedudukan dengan mengubah arah perintah dalam fungsi utama ujian untuk menutup kedudukan pendek dengan 0.003.
Kemudian kita menjalankannya lagi, yang bertanggungjawab untuk perintah-pemimpin (Order Synchronization Management System Class Library (Single Server)).
Operasi yang sama telah dicetuskan oleh robot sebenar yang mengikuti arahan.
Alamat strategi: Perpustakaan Kelas Sistem Pengurusan Pengaturan Simkronisasi Perintah (Perkhidmatan Tunggal) (https://www.fmz.com/strategy/345171) Sistem Pengurusan Simkronisasi Perintah (Synchronous Server)https://www.fmz.com/strategy/345172)
Strategi ini direka untuk komunikasi dan pembelajaran sahaja, sila menyesuaikan dan mengoptimumkan mengikut keperluan sebenar.