资源加载中... loading...

数字货币现货打新抢币策略(教学)

Author: 发明者量化-小小梦, Created: 2022-04-20 15:59:01, Updated: 2023-09-20 10:29:48

img

数字货币现货打新抢币策略(教学)

最近两天,电报群有用户私信我希望有一个打新策略的设计范例参考。有时候交易所新上币想去抢一把新币,本篇就设计一个简单的打新工具策略。

策略需求

例如,目前某个交易所,某个交易对:XXX_USDT,在交易所上还没上市。但是快要上线了。需要用程序盯着这个交易所的XXX_USDT这个市场。这个交易对一旦上限,可以交易了。就并发放出10个限价买单订单,指定数量,挂单去抢币。买到算完成任务。买不到一直挂着,直到订单都成交,买到币。

需求十分简单,但是对于币圈没有编程基础的小伙伴们可能无从下手,接下来我们就动手来实现这个需求。

策略代码

策略参数定义:

这里我们定义这么几个参数,用来控制下单等操作。 img

代码实现:

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函数并发下单。下单之后就循环检测当前挂单的状态。策略没有经过实际测试,这里只是给出一个代码设计参考,有兴趣的可以修改、添加功能使用。

完整的策略:https://www.fmz.com/strategy/358383


Related

More