Desain Sistem Manajemen Sinkron Berbasis FMZ (2)

Penulis:Ninabadass, Dibuat: 2022-04-06 17:12:00, Diperbarui: 2022-04-06 17:20:08

Desain Sistem Manajemen Sinkron Berbasis FMZ (2)

Order Synchronous Management System (Synchronous Server) (Sistem Manajemen Sinkron Perintah)

Mari kita lanjutkan pembahasan di artikel sebelumnya:Desain Sistem Manajemen Sinkron Berbasis FMZ (1), untuk merancang strategi pengawasan order sinkron. Silakan pertimbangkan pertanyaan desain berikut:

  • Jika Anda tidak ingin mengawasi pesanan secara sinkron untuk sementara waktu, dapatkah hal itu dihentikan? Untuk mengimplementasikan fungsi ini, tambahkan 2 variabel global:
    
    var isStopFollow = false   // used to mark whether to currently supervise orders or not 
    var reStartPwd = null      // used to record the restart password 
    

FMZ Based Order Synchronous Management System Design (2)

Kemudian tambahkan kontrol interaktif pada halaman pengeditan strategi untuk menghentikan / memulai kembali strategi (itu bukan untuk menghentikan bot, hanya menghentikan logika, untuk tidak mengikuti dan mengawasi perintah, tanpa melakukan apa-apa).Order Synchronous Management System Library (Single Server)Ketika Anda memulai kembali untuk mengawasi pesanan, masukkan kata sandi yang telah ditetapkan untuk memanggil fungsi pengawasan pesanan. Kode implementasi dari fungsi terkait:

  ...
            // 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 dari pesanan yang diawasi dapat ditentukan atau dapat diperbesar dengan rasio:

FMZ Based Order Synchronous Management System Design (2)

specifiedAmount: menentukan jumlah order yang diawasi; default adalah -1, yaitu tidak ditentukan. zoomAmountRatio: zoom sesuai dengan jumlah urutan dalam sinyal yang dikirim.ETH_USDT,swap,buy,1, maka kalikan nilai jumlah pemesanan dengan zoomAmountRatio; default adalah -1, yaitu tidak zoomed.

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

Di sini kita telah menyadari untukzoomjumlah pesanan ataumenentukan nilai tertentu, menurut sinyal yang diterima.

  • 3.Tulis kode sesederhana mungkin, dan gunakan perpustakaan template lain untuk menangani pemesanan.

Perpustakaan template yang digunakan untuk menempatkan pesanan spot:https://www.fmz.com/strategy/10989Perpustakaan template yang digunakan untuk menempatkan pesanan berjangka: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 karena itu dapat dilihat bahwa menempatkan pesanan hanya membutuhkan satu pernyataan:$.Sell(amount), $.Buy(amount), $.OpenLong(exchange, action.ct, amount), dll.

Kode Strategi:

Kode sementara di tahun sebelumnyaOrder Synchronous Management System (Synchronous Server)adalah sebagai berikut:

FMZ Based Order Synchronous Management System Design (2)

Sekarang, mari kita desainOrder 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)
    }
}

Tes

Kali ini, Binance real tick test digunakan untuk akun dengan order, dan akun OKEX digunakan untuk order supervising bot. untuk order supervising, kita masih menggunakan fungsi pengujian yang digunakan dalam artikel sebelumnya (themainFungsi dalamOrder Synchronous Management System Library (Single Server)templat).

FMZ Based Order Synchronous Management System Design (2)

Ini hanya bahwa kita mengubah arah perdagangan untuk pendek, dan volume perdagangan diubah menjadi 0,003 (Binance USDT-kontrak margin dapat ditempatkan dalam angka desimal).specifiedAmountsebagai 1.

FMZ Based Order Synchronous Management System Design (2)

Bot dari fungsi pengujian diOrder Synchronous Management System Library (Single Server)memicu pertukaran.

FMZ Based Order Synchronous Management System Design (2)

Perintah yang mengawasi strategi bot menerima sinyal, dan menjalankan tindakan pengawasan:

FMZ Based Order Synchronous Management System Design (2)

Platform membuka pesanan yang sesuai.

FMZ Based Order Synchronous Management System Design (2)

Selanjutnya, uji posisi penutupan, dan ubah arah pesanan dalam fungsi utama untuk menutup posisi pendek, 0,003.

FMZ Based Order Synchronous Management System Design (2)

Kemudian restart bot yang bertanggung jawab untuk membawa perintah (Order Synchronous Management System Library (Single Server)).

FMZ Based Order Synchronous Management System Design (2)

Operasi yang sama juga dipicu dalam perintah mengawasi bot:

FMZ Based Order Synchronous Management System Design (2)

Alamat Strategi:Perintah Perpustakaan Sistem Manajemen Sinkron (Single Server) Order Synchronous Management System (Synchronous Server) (Sistem Manajemen Sinkron Perintah)

Strategi tersebut hanya digunakan untuk komunikasi dan studi; untuk penggunaan yang sebenarnya, Anda perlu memodifikasi, menyesuaikan dan mengoptimalkannya sendiri.


Informasi lebih lanjut