Reka bentuk Sistem Pengurusan Sinkron Berasaskan Perintah FMZ (2)

Penulis:Ninabadass, Dicipta: 2022-04-06 17:12:00, Dikemas kini: 2022-04-06 17:20:08

Reka bentuk Sistem Pengurusan Sinkron Berasaskan Perintah FMZ (2)

Perintah Sistem Pengurusan Sinkron (Sinkron Pelayan)

Mari kita teruskan perbincangan dalam artikel sebelumnya:Reka bentuk Sistem Pengurusan Sinkron berdasarkan Perintah FMZ (1), untuk merancang strategi pengawasan pesanan serentak. Sila pertimbangkan soalan reka bentuk berikut:

  • 1.Jika anda tidak mahu mengawasi pesanan secara serentak untuk seketika, bolehkah ia dihentikan?Setelah dihentikan, matikan permulaan semula dari API yang diperluaskan, dan gunakan pengesahan kata laluan. Untuk melaksanakan fungsi ini, tambah 2 pembolehubah global:
    var isStopFollow = false   // used to mark whether to currently supervise orders or not 
    var reStartPwd = null      // used to record the restart password 
    

img

Kemudian tambah kawalan interaktif pada halaman penyuntingan strategi untuk menghentikan / memulakan semula strategi (ia bukan untuk menghentikan bot, hanya menghentikan logik, untuk tidak mengikuti dan mengawasi arahan, tanpa melakukan apa-apa).Order Synchronous Management System Library (Single Server)Apabila memulakan semula untuk mengawasi pesanan, masukkan kata laluan yang telah ditetapkan untuk memanggil fungsi pengawasan pesanan. Kod pelaksanaan fungsi yang berkaitan:

...
          // Judge the interactive command
          if (arr.length == 2) {
          	// Buttons with controls
          	if (arr[0] == "stop/restart") {
          		// Stop/restart to supervise orders 
          		if (!isStopFollow) {
          		    isStopFollow = true
          		    reStartPwd = arr[1]
          		    Log("stopped to supervise orders,", "the set restart password is:", reStartPwd, "#FF0000")
          		} else if (isStopFollow && arr[1] == reStartPwd) {
          			isStopFollow = false 
          			reStartPwd = null 
          			Log("restarted to supervise orders,", "clear the restart password.", "#FF0000")
          		} else if (isStopFollow && arr[1] != reStartPwd) {
          			Log("Wrong restart password!")
          		}
          	}
          	continue 
          }
  • 2.Jumlah pesanan pesanan yang diuruskan boleh ditentukan atau ia boleh diperbesar dengan nisbah:

    img

    specifiedAmount: menentukan jumlah perintah yang diuruskan; lalai adalah -1, iaitu tidak ditentukan. zoomAmountRatio: zoom mengikut jumlah pesanan dalam isyarat yang dihantar. Sebagai contoh isyarat yang dihantar adalah:ETH_USDT,swap,buy,1, maka kalikan nilai jumlah pesanan dengan zoomAmountRatio; lalai adalah -1, iaitu tidak disampingkan.

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

    Di sini kita telah menyedari untukmenghampirijumlah pesanan atauMenentukan nilai tertentu, mengikut isyarat yang diterima.

  • 3.Tulis kod yang semudah mungkin, dan gunakan perpustakaan templat lain untuk menangani pesanan.

    Perpustakaan templat yang digunakan untuk meletakkan pesanan segera:https://www.fmz.com/strategy/10989Perpustakaan templat yang digunakan untuk meletakkan pesanan niaga hadapan:https://www.fmz.com/strategy/203258

      function trade(action) {
          // Switch the trading pair, and set contract 
          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
      }
    

    Oleh itu, dapat dilihat bahawa meletakkan pesanan hanya memerlukan satu pernyataan:$.Sell(amount), $.Buy(amount), $.OpenLong(exchange, action.ct, amount), dan lain-lain

Kod Strategi:

Kod sementara dalamOrder Synchronous Management System (Synchronous Server)adalah seperti berikut:

img

Sekarang, mari kita reka bentukOrder Synchronous Management System (Synchronous Server)Sekali lagi:

// Global variables
var isStopFollow = false
var reStartPwd = null 

function trade(action) {
    // Switch the trading pair, and set contract
    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 simulated bot!")
    }

    // set precision 
    exchange.SetPrecision(pricePrecision, amountPrecision)

    // Check specifiedAmount and zoomAmountRatio, for they cannot be set at the same time 
    if (specifiedAmount != -1 && zoomAmountRatio != -1) {
    	throw "cannot set specifiedAmount and zoomAmountRatio at the same time"
    }

    while (true) {
        var cmd = GetCommand()
        if (cmd) {
            Log("cmd: ", cmd)
            var arr = cmd.split(":")

            // Judge the interactive command 
            if (arr.length == 2) {
            	// Buttons with controls 
            	if (arr[0] == "stop/restart") {
            		// Stop/restart to supervise orders 
            		if (!isStopFollow) {
            		    isStopFollow = true
            		    reStartPwd = arr[1]
            		    Log("stopped to supervise orders,", "the set restart password is:", reStartPwd, "#FF0000")
            		} else if (isStopFollow && arr[1] == reStartPwd) {
            			isStopFollow = false 
            			reStartPwd = null 
            			Log("restarted to supervise orders,", "Clear the restart password", "#FF0000")
            		} else if (isStopFollow && arr[1] != reStartPwd) {
            			Log("Wrong restart password!")
            		}
            	}
            	continue 
            }
            
            // Allow to supervise orders 
            if (!isStopFollow) {
                // Parse the interactive command of the order supervising signal
                var objAction = parseCmd(cmd)
                if (objAction) {
            	    // Parse correctly 
            	    var ret = trade(objAction)
                } else {
                	Log("Wrong signal cmd:", cmd)
                }
            }
        }
        
        // Display the order supervising status 
        LogStatus(_D(), isStopFollow ? "Stop synchronization" : "Maintain synchronization", "\n")

        Sleep(1000)
    }
}

Ujian

Kali ini, ujian tik sebenar Binance digunakan untuk akaun dengan pesanan, dan akaun OKEX digunakan untuk bot pengawasan pesanan.mainfungsi dalamOrder Synchronous Management System Library (Single Server)templat).

img

Ia hanya bahawa kita mengubah arah perdagangan untuk pendek, dan jumlah dagangan telah diubah menjadi 0.003 (Binance USDT-kontrak margin boleh diletakkan dalam angka perpuluhan).specifiedAmountsebagai 1.

img

Bot fungsi ujian dalamOrder Synchronous Management System Library (Single Server)mencetuskan pertukaran.

img

Perintah yang mengawasi bot strategi menerima isyarat, dan melaksanakan tindakan pengawasan:

img

Platform membuka pesanan yang sesuai.

img

Seterusnya, uji kedudukan penutupan, dan ubah arah pesanan dalam fungsi utama untuk menutup kedudukan pendek, 0.003.

img

Kemudian mulakan semula bot yang bertanggungjawab untuk membawa perintah (Order Synchronous Management System Library (Single Server)).

img

Operasi yang sama juga dicetuskan dalam bot pengawasan perintah:

img

Alamat Strategi:Memesan Perpustakaan Sistem Pengurusan Sinkron (Perkhidmatan Tunggal) Perintah Sistem Pengurusan Sinkron (Sinkron Pelayan)

Strategi itu hanya digunakan untuk komunikasi dan kajian; untuk penggunaan sebenar, anda perlu mengubah suai, menyesuaikan dan mengoptimumkannya sendiri.


Lebih lanjut