Membuat Bot Pengendalian Perintah Sederhana dari Cryptocurrency Spot

Penulis:Ninabadass, Dibuat: 2022-04-11 11:54:34, Diperbarui: 2022-04-11 11:55:08

Membuat Bot Pengendalian Perintah Sederhana dari Cryptocurrency Spot

Ada banyak teman di lingkaran cryptocurrency yang membutuhkan bot pengawas pesanan, tetapi mereka menderita dari waktu yang lama untuk memulai dengan desain programmatic ketika mereka memiliki nol dasar.

Pertama-tama, mari kita menganalisis persyaratan. fungsi bot ini adalah untuk menyadari bahwa ketika sebuah akun memiliki operasi beli atau jual, akun lain dari order mengawasi akan mengikuti dan melaksanakan operasi juga. Jadi, pertama kita mendefinisikan 2 subjek:

  • Rekening referensi: Rekening yang dipantau, masing-masing tindakannya dipantau.
  • Rekening pengawasan order: akun pengawasan order; ketika akun referensi memiliki tindakan, akun pengawasan order akan melakukan tindakan yang sama.

Setelah persyaratan ini pertama kali diperjelas, kita terus memikirkan langkah berikutnya. Bagaimana kita dapat mengidentifikasi setiap tindakan dari akun referensi?

Monitor akun referensi. sangat sederhana untuk akun perdagangan spot. kita hanya perlu membandingkan jumlah simbol dalam data informasi akun terbaru dengan jumlah simbol saat ini dalam data informasi akun terbaru yang diperoleh. Jika jumlah simbol dalam data informasi akun terbaru yang saat ini diperoleh lebih dari catatan sebelumnya, itu membuktikan bahwa akun referensi telah melakukan operasi beli dan eksekusi berhasil. Sebaliknya, jika ada lebih sedikit simbol, operasi jual dilakukan untuk akun referensi. Setelah kita mendeteksi tindakan, biarkan akun platform lain melakukan operasi yang sama.

Ketika ditemukan bahwa akun referensi telah melakukan perdagangan, catatan data akun terbaru harus diperbarui untuk membandingkannya dengan informasi akun yang diperoleh pada saat berikutnya untuk menentukan apakah ada tindakan perdagangan baru.

Deskripsi kode strategi dari logika di atas:

        // detect order supervising
        var amount = (nowAcc.Stocks + nowAcc.FrozenStocks) - (initAcc.Stocks + initAcc.FrozenStocks)  // detect the currency amount changes 
        var func = null 
        if (amount > 0) {   // the amount increased 
            func = $.Buy    // buy
        } else if (amount < 0) {  // the amount decreased 
            func = $.Sell         // sell 
        } else {
            continue
        }
        
        // execute order supervising 
        Log("Order supervising! Amount:", Math.abs(amount), "#FF0000")
        for (var i = 1 ; i < exchanges.length ; i++) {    // when i equals 0, it indicates the reference platform, not to be processed; process other order supervising platforms 
            func(exchanges[i], Math.abs(amount))          // execute the specified trading function, and it could be $.Buy or $.Sell, which needs to be determined by observing whether amount is larger than 0 or less than 0
        }
        
        // update the information record of the reference account after order supervising 
        initAcc = nowAcc                                  // update the latest account information of the reference platform, to compare it with the next one 

Logika deteksi utama dari strategi adalah kode di atas. Untuk menyederhanakan desain, strategi menggunakan template resmi FMZ [Digital Currency Trading Library], dan$.Buydan$.Selladalah semua fungsi dari template, fungsinya adalah untuk mengeksekusi operasi order.

Tambahkan beberapa tampilan bilah status ke strategi untuk memfasilitasi pemantauan data dari setiap akun.

function test() { 
    // test function 
    var ts = new Date().getTime()    
    if (ts % (1000 * 60 * 60 * 6) > 1000 * 60 * 60 * 5.5) {
        Sleep(1000 * 60 * 10)
        var x = Math.random()
        if (x > 0.5) {
            $.Buy(exchange, x / 10)    
        } else {
            $.Sell(exchange, x / 10)    
        }        
    }
}

function main() {
    LogReset(1)
    if (exchanges.length < 2) {
        throw "no platform of order supervising"
    }
    var exName = exchange.GetName()
    // detect the reference platform 
    if (exName.includes("Futures_")) {
        throw "only support sport order supervising"
    }
    Log("start monitoring", exName, "platform", "#FF0000")
    
    // detect the order supervising platforms 
    for (var i = 1 ; i < exchanges.length ; i++) {
        if (exchanges[i].GetName().includes("Futures_")) {
            throw "Do not support the order supervising of futures platfroms"
        }
    }
    
    var initAcc = _C(exchange.GetAccount)
    while(1) {
        if(IsVirtual()) {
           // test function
           test()  
        }  
        Sleep(5000)
        
        // update the current information of the reference account 
        var nowAcc = _C(exchange.GetAccount)
        
        // the account information of the reference platform
        var refTbl = {
            type : "table", 
            title : "reference platform",
            cols : ["name", "symbol", "frozen symbol", "assets", "frozen assets"],
            rows : []
        }
        refTbl.rows.push([exName, nowAcc.Stocks, nowAcc.FrozenStocks, nowAcc.Balance, nowAcc.FrozenBalance])
        
        // the account information of the order supervising platform
        var followTbl = {
            type : "table", 
            title : "order supervising platform",
            cols : ["name", "symbol", "frozen symbol", "assets", "frozen assets"],
            rows : []        
        }
        for (var i = 1 ; i < exchanges.length ; i++) {
            var acc = _C(exchanges[i].GetAccount)
            var name = exchanges[i].GetName()
            followTbl.rows.push([name, acc.Stocks, acc.FrozenStocks, acc.Balance, acc.FrozenBalance])
        }
        
        // status bar display 
        LogStatus(_D(), "\n`" + JSON.stringify(refTbl) + "`", "\n`" + JSON.stringify(followTbl) + "`")
        
        // detect order supervising 
        var amount = (nowAcc.Stocks + nowAcc.FrozenStocks) - (initAcc.Stocks + initAcc.FrozenStocks)
        var func = null 
        if (amount > 0) {
            func = $.Buy
        } else if (amount < 0) {
            func = $.Sell
        } else {
            continue
        }
        
        // execute order supervising 
        Log("Order supervising! Amount:", Math.abs(amount), "#FF0000")
        for (var i = 1 ; i < exchanges.length ; i++) {            
            func(exchanges[i], Math.abs(amount))
        }
        
        // update the information record of the reference account after order supervising 
        initAcc = nowAcc
    }
}

Mari kita uji pada bot nyata, oleh FMZ wexApp simulasi platform untuk menguji. Di sini saya telah menambahkan tiga akun wexApp, yang semuanya adalah akun independen. Salah satunya berfungsi sebagai platform referensi, dan dua lainnya berfungsi sebagai platform pengawasan pesanan.

img

Kemudian, kami secara manual menempatkan pesanan melalui terminal perdagangan FMZ untuk melihat apakah bot dapat secara otomatis mengawasi pesanan.

img

Anda dapat melihat bahwa bot mendeteksi perdagangan dan melakukan operasi pengawasan pesanan.

img

Strategi lengkap:https://www.fmz.com/strategy/255182

Strategi ini hanya untuk studi. Jika ada pertanyaan, kami akan menghargai jika Anda meninggalkan komentar tentang hal itu.


Lebih banyak