Thực hiện một lệnh đơn giản giám sát bot của Cryptocurrency Spot

Tác giả:Ninabadass, Tạo: 2022-04-11 11:54:34, Cập nhật: 2022-04-11 11:55:08

Thực hiện một lệnh đơn giản giám sát bot của Cryptocurrency Spot

Có rất nhiều bạn bè trong vòng tròn tiền điện tử cần một bot giám sát lệnh, nhưng họ đang phải chịu đựng thời gian dài để bắt đầu với thiết kế lập trình khi họ không có cơ bản. Dựa trên những nhu cầu như vậy, trong bài viết này, chúng tôi sẽ thiết kế một bot giám sát lệnh tại chỗ đơn giản để giúp những người bạn không có cơ bản học giao dịch chương trình.

Trước hết, hãy phân tích yêu cầu. chức năng của bot này là nhận ra rằng khi một tài khoản có một giao dịch mua hoặc bán, các tài khoản khác của lệnh giám sát sẽ theo dõi và thực hiện các hoạt động quá. Vậy, trước tiên chúng ta xác định 2 chủ đề:

  • Tài khoản tham chiếu: tài khoản được theo dõi, mỗi hành động của nó được theo dõi.
  • Tài khoản giám sát lệnh: tài khoản giám sát lệnh; khi tài khoản tham chiếu có hành động, tài khoản giám sát lệnh sẽ thực hiện cùng một hành động.

Sau khi yêu cầu này được làm rõ ban đầu, chúng ta tiếp tục suy nghĩ về bước tiếp theo.

Theo dõi tài khoản tham chiếu. Nó rất đơn giản cho các tài khoản giao dịch tại chỗ. Chúng ta chỉ cần so sánh số tiền biểu tượng trong dữ liệu thông tin tài khoản mới nhất với số tiền biểu tượng hiện tại trong dữ liệu thông tin tài khoản mới nhất thu được. Nếu số tiền biểu tượng trong dữ liệu thông tin tài khoản mới nhất hiện được thu được lớn hơn hồ sơ trước đó, nó chứng minh rằng tài khoản tham khảo đã thực hiện một hoạt động mua và việc thực hiện đã thành công. Ngược lại, nếu có ít biểu tượng hơn, một hoạt động bán được thực hiện cho tài khoản tham khảo. Sau khi chúng tôi phát hiện hành động, hãy để các tài khoản nền tảng khác thực hiện cùng một hoạt động.

Khi thấy rằng tài khoản tham khảo đã thực hiện giao dịch, hồ sơ dữ liệu tài khoản mới nhất phải được cập nhật để so sánh với thông tin tài khoản thu được lần tiếp theo để xác định xem có hành động giao dịch mới hay không.

Mô tả mã chiến lược của logic ở trên:

        // 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 

Lý thuyết phát hiện chính của chiến lược là mã trên. Để đơn giản hóa thiết kế, chiến lược sử dụng mẫu FMZ chính thức [Thư viện giao dịch tiền kỹ thuật số], và$.Buy$.Selllà tất cả các chức năng của mẫu, chức năng là thực hiện các hoạt động lệnh.

Thêm một số màn hình thanh trạng thái vào chiến lược để dễ dàng theo dõi dữ liệu của mỗi tài khoản.

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
    }
}

Hãy thử nghiệm nó trên bot thực tế, bởi FMZ wexApp nền tảng mô phỏng để thử nghiệm. Ở đây tôi đã thêm ba tài khoản wexApp, tất cả đều là tài khoản độc lập. Một trong số đó phục vụ như một nền tảng tham khảo, và hai người khác phục vụ như các nền tảng giám sát đơn đặt hàng.

img

Sau đó, chúng tôi đặt một lệnh bằng tay qua FMZ giao dịch đầu cuối để xem liệu robot có thể tự động giám sát lệnh.

img

Bạn có thể thấy rằng robot phát hiện giao dịch và thực hiện hoạt động giám sát lệnh.

img

Chiến lược hoàn chỉnh:https://www.fmz.com/strategy/255182

Chiến lược chỉ dành cho nghiên cứu. Nếu có bất kỳ câu hỏi nào, chúng tôi sẽ đánh giá cao nếu bạn để lại bình luận về nó.


Thêm nữa