Desain sistem manajemen pesanan sinkronisasi berdasarkan kuantifikasi FMZ (2)

Penulis:Mimpi kecil, Dibuat: 2022-02-16 12:11:36, Diperbarui: 2023-09-15 20:46:46

img

Desain sistem manajemen pesanan sinkronisasi berdasarkan kuantifikasi FMZ (2)

Sistem Manajemen Pemesanan Sinkron (Synchronous Server)

Kami melanjutkan artikel sebelumnya:Desain sistem manajemen pesanan sinkronisasi berdasarkan kuantifikasi FMZ (1)Di sini, kami akan membahas tentang strategi yang akan digunakan untuk membuat daftar sinkronisasi.

Pertimbangkan beberapa masalah desain berikut:

  • Jika Anda tidak ingin melakukan sinkronisasi, apakah Anda dapat berhenti sementara. Setelah berhenti, Anda dilarang memulai dari API ekstensi dan menggunakan verifikasi kata sandi. Fitur ini memungkinkan Anda untuk menambahkan dua variabel global:

    var isStopFollow = false   // 用于标记当前是否跟单
    var reStartPwd = null      // 用于记录重启密码
    

    img

    Kemudian, pada halaman edit kebijakan, Anda menambahkan kontrol interaktif untuk menghentikan/memulai kembali kebijakan (tidak menghentikan cakram ini, hanya menghentikan logis, tidak mengikuti daftar, tidak melakukan apa-apa).订单同步管理系统类库(Single Server)Disk juga tidak bisa membangunkan kebijakan Anda. Saat memulai kembali menu, masukkan kata sandi yang telah ditetapkan untuk membangunkan fungsi menu. Kode implementasi untuk 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 
              }
    
  • 2, Anda dapat menentukan jumlah yang lebih kecil dari daftar, atau Anda dapat memperbesar jumlahnya. Tambahkan parameter ke kebijakan:

    img

    specifiedAmount: menentukan jumlah daftar, dengan default -1, yaitu tidak ditentukan. zoomAmountRatio: Mengukur jumlah yang lebih kecil dari sinyal yang dikirim, misalnya:ETH_USDT,swap,buy,1, maka nilai dari satuan yang lebih rendah dikalikan dengan zoomAmountRatio.

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

    Di sini, kita mengimplementasikan jumlah pesanan yang dibutuhkan dalam sinyal yang diterima.MeningkatkanAtauTentukan nilai spesifik

  • 3, kode yang paling sederhana, dioperasikan dengan menggunakan perpustakaan template lainnya.

    Di sini, Anda dapat menemukan daftar aplikasi yang tersedia di situs ini.https://www.fmz.com/strategy/10989Di sini, Anda dapat menemukan daftar daftar yang tersedia di sini: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, lihatlah, daftar ini hanya membutuhkan satu kalimat:$.Sell(amount)$.Buy(amount)$.OpenLong(exchange, action.ct, amount)... dan seterusnya.

Kode strategi:

Sebelumnya订单同步管理系统(Synchronous Server)Kode tempurnya adalah:

img

Sekarang mulailah mendesain ulang.订单同步管理系统(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)
    }
}

Pengujian

Akun bandwidth ini menggunakan pengujian Binance, sedangkan akun bandwidth menggunakan pengujian OKEX. Bandwidth masih menggunakan fungsi pengujian yang digunakan dalam artikel sebelumnya.订单同步管理系统类库(Single Server)TemplatmainFungsi) ^

img

Hanya saja kita mengubah arah transaksi menjadi kosong, dan volume transaksi berubah menjadi 0.003 (kontrak lokal USDT dapat dipesan dalam jumlah kecil). Tetapi akun OKEX harus berjumlah bulat (kontrak di bursa OKEX harus berjumlah bulat), jadi parameter saya akan menentukan parameter strategi.specifiedAmountIni adalah 1 ≠ 1 ≠ 1.

img

订单同步管理系统类库(Single Server)Fungsi uji coba pada hard disk memicu transaksi.

img

Setelah menerima sinyal, strategi real-time untuk melakukan tindakan ini:

img

"Kami tidak bisa menerima laporan dari pihak bank", kata dia.

img

Selanjutnya, uji posisi rata dengan mengubah arah baris bawah dalam fungsi main untuk meratakan posisi kosong 0.003.

img

Setelah itu berjalan kembali ke hard drive yang bertanggung jawab atas pita tersebut.订单同步管理系统类库(Single Server))。

img

Pada saat yang sama, Google juga meluncurkan aplikasi yang sama untuk perangkat keras:

img

Alamat kebijakan:Perpustakaan kelas sistem manajemen sinkronisasi pesanan (Single Server) Sistem Manajemen Pemesanan Sinkron (Synchronous Server)

Desain strategi hanya untuk pembelajaran pertukaran, produksi yang sebenarnya membutuhkan modifikasi, penyesuaian, dan optimalisasi sendiri.


Berkaitan

Lebih banyak