avatar of 发明者量化-小小梦 发明者量化-小小梦
Seguir Mensajes Privados
4
Seguir
1271
Seguidores

Estrategia para captar nuevas monedas digitales (enseñanza)

Creado el: 2022-04-20 15:59:01, Actualizado el: 2023-09-20 10:29:48
comments   0
hits   3060

Estrategia para captar nuevas monedas digitales (enseñanza)

Estrategia para captar nuevas monedas digitales (enseñanza)

En los últimos dos días, un usuario del grupo de Telegram me envió un mensaje privado esperando un ejemplo de diseño para una estrategia de IPO. A veces, cuando una plataforma de intercambio incluye nuevas monedas, quieres adquirir algunas de ellas. En este artículo, se diseña una estrategia sencilla para nuevas monedas.

Requisitos de estrategia

Por ejemplo, actualmente en un determinado exchange, un determinado par comercial: XXX_USDT, aún no ha sido listado en el exchange. Pero estará disponible en línea pronto. Se necesita un programa para monitorear el mercado XXX_USDT de este intercambio. Una vez que se alcanza el límite superior de este par comercial, se puede negociar. Luego, emita 10 órdenes de compra límite, especifique la cantidad y realice órdenes para obtener monedas. Al comprarlo se completa la tarea. Si no puede comprarlo, simplemente manténgalo en espera hasta que se ejecuten todas las órdenes y compre las monedas.

El requisito es muy sencillo, pero quienes no tengan bases de programación en el ámbito de las criptomonedas, quizá no sepan por dónde empezar. A continuación, trabajaremos en la realización de este requisito.

Código de estrategia

Definición del parámetro de estrategia:

Aquí definimos varios parámetros para controlar operaciones como la realización de pedidos. Estrategia para captar nuevas monedas digitales (enseñanza)

Implementación del código:

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

La estrategia detecta la API de la bolsa y la interfaz del libro de órdenes. Una vez que los datos del libro de órdenes están disponibles, la estrategia utiliza la función exchange.Go para colocar órdenes. Después de realizar un pedido, se comprobará en bucle el estado del pedido pendiente actual. La estrategia no ha sido realmente probada. Aquí se ofrece solo una referencia de diseño de código. Aquellos que estén interesados ​​pueden modificarla y agregarle funciones para su uso.

Estrategia completa: https://www.fmz.com/strategy/358383