avatar of 发明者量化-小小梦 发明者量化-小小梦
fokus pada mesej peribadi
4
fokus pada
1271
Pengikut

Reka bentuk sistem pengurusan penyegerakan pesanan berdasarkan kuantifikasi FMZ (2)

Dicipta dalam: 2022-02-16 12:11:36, dikemas kini pada: 2023-09-15 20:46:46
comments   0
hits   1431

Reka bentuk sistem pengurusan penyegerakan pesanan berdasarkan kuantifikasi FMZ (2)

Reka bentuk sistem pengurusan penyegerakan pesanan berdasarkan kuantifikasi FMZ (2)

Pesan Pelayan Segerak

Mari sambung artikel sebelum ini:Reka bentuk sistem pengurusan penyegerakan pesanan berdasarkan kuantifikasi FMZ (1)Selepas berbincang dengan pakar, kami mula merancang strategi untuk perdagangan salinan segerak.

Pertimbangkan isu reka bentuk ini:

  • 1. Jika anda tidak mahu mengikuti perintah secara serentak buat masa ini, bolehkah anda menjedanya? Setelah dijeda, pelancaran daripada API sambungan adalah dilarang, menggunakan pengesahan kata laluan. Untuk melaksanakan fungsi ini, tambahkan dua pembolehubah global:
  var isStopFollow = false   // 用于标记当前是否跟单
  var reStartPwd = null      // 用于记录重启密码

Reka bentuk sistem pengurusan penyegerakan pesanan berdasarkan kuantifikasi FMZ (2)

Kemudian tambahkan kawalan interaktif pada halaman penyuntingan strategi untuk menjeda/mulakan semula strategi (ia tidak menghentikan dagangan sebenar, tetapi hanya menjeda logik, berhenti mengikut pesanan dan tidak melakukan apa-apa). Apabila menjeda, anda boleh menetapkan kata laluan jeda supaya walaupun anda mempunyai API KEY lanjutan anda订单同步管理系统类库(Single Server)Malah sesi dagangan sebenar tidak dapat membangkitkan strategi anda. Apabila memulakan semula perdagangan salinan, masukkan kata laluan pratetap untuk menghidupkan fungsi perdagangan salinan. Kod pelaksanaan fungsi berkaitan:

  ...
            // 判断交互指令
            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 boleh menentukan kuantiti pesanan atau naikkan atau turunkan Tambahkan parameter pada strategi:

Reka bentuk sistem pengurusan penyegerakan pesanan berdasarkan kuantifikasi FMZ (2)

specifiedAmount: menentukan jumlah pesanan susulan Nilai lalai ialah -1, yang bermaksud ia tidak dinyatakan. zoomAmountRatio : zum mengikut jumlah pesanan dalam isyarat yang dihantar, sebagai contoh, isyarat yang dihantar ialah:ETH_USDT,swap,buy,1, darabkan kuantiti pesanan dengan zoomAmountRatio. Lalai ialah -1, yang bermaksud tiada penskalaan.

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

Di sini kami melaksanakan kuantiti pesanan yang perlu diikuti dalam isyarat yang diterimaZumatauNyatakan nilai tertentu

  • 3. Pastikan kod itu sesingkat mungkin dan gunakan perpustakaan templat lain untuk pemprosesan pesanan.

Pesanan segera menggunakan perpustakaan kelas: https://www.fmz.com/strategy/10989 Perpustakaan pesanan hadapan: 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 anda lihat, membuat pesanan hanya memerlukan satu ayat:$.Sell(amount)$.Buy(amount)$.OpenLong(exchange, action.ct, amount) .. tunggu.

Kod strategi:

Sebelumnya订单同步管理系统(Synchronous Server)Kod sementara adalah ini:

Reka bentuk sistem pengurusan penyegerakan pesanan berdasarkan kuantifikasi FMZ (2)

Mulakan reka bentuk semula sekarang订单同步管理系统(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)
    }
}

ujian

Kali ini, akaun dengan pesanan akan menggunakan akaun sebenar Binance untuk ujian, dan akaun sebenar untuk menyalin pesanan akan menggunakan akaun OKEX. Kami masih menggunakan fungsi ujian yang digunakan dalam artikel sebelumnya (订单同步管理系统类库(Single Server)Dalam templatmainfungsi).

Reka bentuk sistem pengurusan penyegerakan pesanan berdasarkan kuantifikasi FMZ (2)

Kami baru sahaja menukar arah urus niaga kepada jualan singkat dan volum urus niaga kepada 0.003 (kontrak berasaskan USDT Binance boleh membuat pesanan dalam perpuluhan). Walau bagaimanapun, akaun OKEX mestilah integer (pesanan pertukaran OKEX mesti diletakkan dalam nombor bulat), jadi saya nyatakan parameter strategispecifiedAmountialah 1.

Reka bentuk sistem pengurusan penyegerakan pesanan berdasarkan kuantifikasi FMZ (2)

订单同步管理系统类库(Single Server)Fungsi ujian mencetuskan transaksi sebenar.

Reka bentuk sistem pengurusan penyegerakan pesanan berdasarkan kuantifikasi FMZ (2)

Strategi masa nyata untuk menyalin pesanan menerima isyarat dan melaksanakan tindakan penyalinan:

Reka bentuk sistem pengurusan penyegerakan pesanan berdasarkan kuantifikasi FMZ (2)

Pertukaran membuka pesanan yang sepadan.

Reka bentuk sistem pengurusan penyegerakan pesanan berdasarkan kuantifikasi FMZ (2)

Seterusnya, mari kita uji menutup kedudukan dan menukar arah pesanan dalam fungsi utama ujian untuk menutup kedudukan jual 0.003 kontrak.

Reka bentuk sistem pengurusan penyegerakan pesanan berdasarkan kuantifikasi FMZ (2)

Kemudian jalankan cakera sebenar yang bertanggungjawab untuk mengambil pesanan semula (订单同步管理系统类库(Single Server))。

Reka bentuk sistem pengurusan penyegerakan pesanan berdasarkan kuantifikasi FMZ (2)

Operasi yang sama juga dicetuskan dengan menyalin susunan sebenar:

Reka bentuk sistem pengurusan penyegerakan pesanan berdasarkan kuantifikasi FMZ (2)

Alamat Polisi: Pustaka kelas sistem pengurusan penyegerakan pesanan (Pelayan Tunggal) Pesan Pelayan Segerak

Reka bentuk strategi hanya untuk komunikasi dan pembelajaran Sila ubah suai, laraskan dan optimumkannya mengikut keperluan pengeluaran sebenar.