avatar of 发明者量化-小小梦 发明者量化-小小梦
tập trung vào tin nhắn riêng tư
4
tập trung vào
1271
Người theo dõi

Triển khai một robot giao dịch tiền kỹ thuật số đơn giản

Được tạo ra trong: 2021-02-18 16:09:43, cập nhật trên: 2023-09-26 20:57:30
comments   6
hits   3831

Triển khai một robot giao dịch tiền kỹ thuật số đơn giản

Triển khai một robot giao dịch tiền kỹ thuật số đơn giản

Có nhiều nhà giao dịch thủ công trong thế giới tiền điện tử cần đến robot sao chép, nhưng họ lo ngại rằng phải mất nhiều thời gian để bắt đầu với thiết kế theo chương trình khi họ không có kiến ​​thức cơ bản. Dựa trên nhu cầu này, trong bài viết này chúng tôi sẽ thiết kế một robot giao dịch sao chép giao ngay đơn giản để giúp những người bạn trong cộng đồng tiền điện tử không có kiến ​​thức cơ bản về giao dịch thuật toán.

Trước tiên, chúng ta hãy phân tích nhu cầu. Chức năng của robot này là đảm bảo rằng khi một tài khoản có hoạt động mua hoặc bán, các tài khoản sao chép khác sẽ làm theo và thực hiện hoạt động này. Vì vậy, trước tiên chúng ta hãy làm rõ hai vấn đề:

  • Tài khoản tham chiếu: Tài khoản được theo dõi để giám sát mọi động thái của tài khoản này.
  • Sao chép tài khoản: Tài khoản tuân theo lệnh. Khi một hành động xảy ra trong tài khoản tham chiếu, tài khoản sao chép sẽ thực hiện hành động tương tự.

Bây giờ chúng ta đã xác định sơ bộ nhu cầu này, chúng ta cần tiếp tục suy nghĩ về bước tiếp theo. Làm thế nào để xác định hành động của tài khoản tham chiếu?

Việc theo dõi tài khoản tham chiếu rất đơn giản đối với tài khoản giao ngay. Chúng ta chỉ cần so sánh số lượng coin trong dữ liệu thông tin tài khoản gần đây nhất với số lượng coin trong dữ liệu thông tin tài khoản mới nhất hiện có. Nếu số lượng coin trong dữ liệu thông tin tài khoản mới nhất hiện tại thu thập được nhiều hơn bản ghi trước đó, điều đó chứng tỏ tài khoản tham chiếu đã thực hiện hoạt động mua và giao dịch mua đã thành công. Ngược lại, nếu có ít tiền hơn, một hoạt động bán sẽ được thực hiện cho tài khoản tham chiếu. Sau khi phát hiện hành động này, chúng ta có thể cho phép các tài khoản trao đổi khác thực hiện thao tác tương tự.

Khi phát hiện giao dịch được thực hiện trên tài khoản tham chiếu, bản ghi dữ liệu tài khoản gần đây nhất phải được cập nhật để so sánh với thông tin tài khoản thu thập được lần sau nhằm xác định xem có bất kỳ hành động giao dịch mới nào không.

Logic trên được mô tả bằng mã chiến lược:

        // 检测跟单
        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
        }
        
        // 执行跟单
        Log("跟单!数量:", Math.abs(amount), "#FF0000")
        for (var i = 1 ; i < exchanges.length ; i++) {    // i 等于 0 时,是参考交易所,不处理,处理其它的跟单交易所        
            func(exchanges[i], Math.abs(amount))          // 执行具体的交易函数,可能是$.Buy 或者是 $.Sell ,具体看amount 是大于0,还是小于0
        }
        
        // 执行跟单之后更新参考交易所账户信息记录
        initAcc = nowAcc                                  // 更新参考交易所最近一次的账户信息,用于下次对比

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

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

function test() { 
    // 测试函数
    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 "没有跟单的交易所"
    }
    var exName = exchange.GetName()
    // 检测参考交易所
    if (exName.includes("Futures_")) {
        throw "仅支持现货跟单"
    }
    Log("开始监控", exName, "交易所", "#FF0000")
    
    // 检测跟单交易所
    for (var i = 1 ; i < exchanges.length ; i++) {
        if (exchanges[i].GetName().includes("Futures_")) {
            throw "不支持期货交易所跟单"
        }
    }
    
    var initAcc = _C(exchange.GetAccount)
    while(1) {
        if(IsVirtual()) {
           // 测试函数
           test()  
        }  
        Sleep(5000)
        
        // 更新参考账户当前的账户信息
        var nowAcc = _C(exchange.GetAccount)
        
        // 参考交易所账户信息
        var refTbl = {
            type : "table", 
            title : "参考交易所",
            cols : ["名称", "币", "冻结币", "钱", "冻结钱"],
            rows : []
        }
        refTbl.rows.push([exName, nowAcc.Stocks, nowAcc.FrozenStocks, nowAcc.Balance, nowAcc.FrozenBalance])
        
        // 跟单交易所账户信息
        var followTbl = {
            type : "table", 
            title : "跟单交易所",
            cols : ["名称", "币", "冻结币", "钱", "冻结钱"],
            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])
        }
        
        // 状态栏显示
        LogStatus(_D(), "\n`" + JSON.stringify(refTbl) + "`", "\n`" + JSON.stringify(followTbl) + "`")
        
        // 检测跟单
        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
        }
        
        // 执行跟单
        Log("跟单!数量:", Math.abs(amount), "#FF0000")
        for (var i = 1 ; i < exchanges.length ; i++) {            
            func(exchanges[i], Math.abs(amount))
        }
        
        // 执行跟单之后更新参考交易所账户信息记录
        initAcc = nowAcc
    }
}

Chúng ta hãy thực hiện một thử nghiệm thời gian thực bằng cách sử dụng thử nghiệm trao đổi mô phỏng wexApp của FMZ. Ở đây tôi đã thêm ba tài khoản wexApp, chúng độc lập với nhau. Một trong số chúng đóng vai trò trao đổi tham khảo, hai cái còn lại đóng vai trò trao đổi bản sao.

Triển khai một robot giao dịch tiền kỹ thuật số đơn giản

Sau đó, chúng tôi sẽ đặt lệnh thủ công bằng thiết bị đầu cuối giao dịch của FMZ để xem liệu robot có tự động thực hiện lệnh hay không.

Triển khai một robot giao dịch tiền kỹ thuật số đơn giản

Bạn có thể thấy robot đã phát hiện giao dịch và thực hiện thao tác sao chép.

Triển khai một robot giao dịch tiền kỹ thuật số đơn giản

Chiến lược đầy đủ: https://www.fmz.com/strategy/255182

Chiến lược này chỉ để học. Nếu bạn có bất kỳ câu hỏi nào, vui lòng để lại tin nhắn.