Sumber daya yang dimuat... Pemuatan...

Desain Sistem Manajemen Sinkronisasi Pesenan Berdasarkan FMZ Quant (2)

Penulis:FMZ~Lydia, Dibuat: 2022-11-08 11:34:20, Diperbarui: 2023-09-15 20:48:46

img

Desain Sistem Manajemen Sinkronisasi Pesenan Berdasarkan FMZ Quant (2)

Sistem Manajemen Sinkronisasi Pesenan (Synchronous Server)

Mari kita lanjutkan diskusi dari artikel sebelumnya: Desain Sistem Manajemen Sinkronisasi Pesenan Berdasarkan Kuantifikasi FMZ (1) (https://www.fmz.com/digest-topic/9729) dan mulai merancang strategi untuk sinkronisasi pemesanan.

Pikirkan beberapa masalah desain seperti itu:

    1. Jika Anda tidak ingin melakukan sinkron perintah-mengikuti sementara, adalah mungkin untuk menunda itu? Mengimplementasikan fungsi ini dengan menambahkan 2 variabel global:
var isStopFollow = false   // Used to mark whether the current order is being followed
var reStartPwd = null      // Used to record the restart password

img

Kemudian kita menambahkan kontrol interaktif pada halaman editing strategi untuk strategi jeda / restart (tidak untuk menghentikan bot nyata, hanya jeda logika, tidak lebih perintah-mengikuti).Order Synchronization Management System Class Library (Single Server)Ketika memulai kembali perintah-mengikuti, masukkan kata sandi preset untuk membangunkan fungsi perintah-mengikuti. Kode untuk pelaksanaan fungsi yang relevan:

...
          // 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 
          }
    1. Anda dapat menentukan jumlah perintah untuk diikuti atau dapat diskalakan dalam kelipatan Tambahkan parameter ke strategi:

img

specifiedAmount: Tentukan jumlah order-follow, default adalah -1, yaitu tidak ditentukan. zoomAmountRatio: Scaling sesuai dengan jumlah order yang dikirim, misalnya, jika sinyal yang dikirim adalah: ETH_USDT,swap,buy,1, kalikan nilai jumlah order dengan zoomAmountRatio.

    var amount = specifiedAmount == -1 ? action.amount : specifiedAmount
    amount = zoomAmountRatio == -1 ? amount : amount * zoomAmountRatio

Di sini ia diimplementasikan untuk skala atau menentukan nilai tertentu untuk jumlah perintah yang akan diikuti dalam sinyal yang diterima.

    1. Kode harus sesederhana mungkin, gunakan perpustakaan template lain untuk memesan.

Perpustakaan kelas yang digunakan oleh pesanan spot ditempatkan:https://www.fmz.com/strategy/10989Perpustakaan kelas yang digunakan oleh pesanan masa depan ditempatkan: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 bisa melihat bahwa menempatkan pesanan hanya membutuhkan satu kalimat:$.Sell(amount), $.Buy(amount), $.OpenLong(exchange, action.ct, amount). dll.

Kode strategi:

Kode sementara dariOrder Synchronous Management System (Synchronous Server)adalah sebagai berikut:

img

Sekarang kita mulai mendesain ulang Sistem Manajemen Sinkronisasi Order (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)
    }
}

Tes

Kami menguji account order-leading dengan menggunakan Binance real bot untuk waktu ini, dan kami menggunakan akun OKEX untuk order-following real bot.mainfungsi dalam fungsi uji(Order Synchronization Management System Class Library (Single Server)dalam template) yang digunakan dalam artikel sebelumnya.

img

Di sini kita mengubah arah transaksi menjadi sell, dan volume transaksi menjadi 0.003 (Order dapat ditempatkan dalam angka desimal untuk kontrak standar Binance USDT).

img

Selanjutnya, mari kita uji penutupan posisi dengan mengubah arah urutan dalam fungsi utama uji untuk menutup posisi pendek dengan 0,003.

img

Kemudian kita jalankan lagi, yang bertanggung jawab untuk order-leading (Order Synchronization Management System Class Library (Single Server)).

Operasi yang sama dipicu oleh robot nyata yang mengikuti perintah.

Alamat strategi: Perpustakaan Kelas Sistem Manajemen Sinkronisasi Order (Single Server) (https://www.fmz.com/strategy/345171) Sistem Manajemen Sinkronisasi Pesenan (Synchronous Server) (https://www.fmz.com/strategy/345172)

Strategi ini dirancang untuk komunikasi dan pembelajaran saja, silahkan menyesuaikan dan mengoptimalkan sesuai dengan kebutuhan aktual.


Berkaitan

Lebih banyak