Tài nguyên đang được tải lên... tải...

Các chiến lược mới về tiền điện tử (đào tạo)

Tác giả:Những nhà phát minh định lượng - những giấc mơ nhỏ, Tạo: 2022-04-20 15:59:01, Cập nhật: 2023-09-20 10:29:48

img

Các chiến lược mới về tiền điện tử (đào tạo)

Trong hai ngày gần đây, một người dùng Telegram đã nhắn tin cho tôi rằng tôi muốn có một ví dụ về việc thiết kế chiến lược mới.

Nhu cầu chiến lược

Ví dụ, hiện tại một sàn giao dịch, một cặp giao dịch: XXX_USDT, chưa được niêm yết trên sàn giao dịch. Nhưng sắp được đưa ra. Cần sử dụng chương trình để theo dõi thị trường XXX_USDT của sàn giao dịch này.

Những nhu cầu rất đơn giản, nhưng đối với những đối tác nhỏ không có nền tảng lập trình, chúng tôi sẽ bắt tay vào việc thực hiện nhu cầu này.

Mã chiến lược

Định nghĩa tham số chiến lược:

Ở đây, chúng ta định nghĩa một vài tham số để điều khiển các hoạt động dưới cùng.img

Khả năng thực hiện mã:

function pendingOrders(ordersNum, price, amount, deltaPrice, deltaAmount) {
    var routineOrders = []
    var ordersIDs = []
    for (var i = 0 ; i < ordersNum ; i++) {
        var routine = exchange.Go("Buy", price + i * deltaPrice, amount + i * deltaAmount)
        routineOrders.push(routine)
        Sleep(ApiReqInterval)        
    }
    for (var i = 0 ; i < routineOrders.length ; i++) {
        var orderId = routineOrders[i].wait()
        if (orderId) {
            ordersIDs.push(orderId)
            Log("成功挂单", orderId)
        }        
    }
    return ordersIDs
}

function main() {
    if (symbol == "null" || pendingPrice == -1 || pendingAmount == -1 || pendingPrice == -1 || deltaPrice == -1 || deltaAmount == -1) {
        throw "参数设置错误"
    }
    exchange.SetCurrency(symbol)
    // 屏蔽错误信息
    SetErrorFilter("GetDepth")
    while (true) {
        var msg = ""
        var depth = exchange.GetDepth()
        if (!depth || (depth.Bids.length == 0 && depth.Asks.length == 0)) {
            // 没有深度
            msg = "没有深度数据,等待!"
            Sleep(500)
        } else {
            // 获取到深度
            Log("并发下单!")
            var ordersIDs = pendingOrders(ordersNum, pendingPrice, pendingAmount, deltaPrice, deltaAmount)
            while (true) {
                var orders = _C(exchange.GetOrders)
                if (orders.length == 0) {
                    Log("当前挂单个数0,停止运行")
                    return 
                }
                var tbl = {
                    type: "table",
                    title: "当前挂单",
                    cols: ["id", "价格", "数量"], 
                    rows: []
                }
                _.each(orders, function(order) {
                    tbl.rows.push([order.Id, order.Price, order.Amount])
                })
                LogStatus(_D(), "\n`" + JSON.stringify(tbl) + "`")
                Sleep(500)
            }
        }
        LogStatus(_D(), msg)
    }
}

策略检测交易所API,检测订单薄接口,一旦能获取到订单薄数据,策略就使用exchange.Go函数并发下单。下单之后就循环检测当前挂单的状态。策略没有经过实际测试,这里只是给出一个代码设计参考,有兴趣的可以修改、添加功能使用。

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


Có liên quan

Thêm nữa