Suscribir Nueva estrategia de acciones para el spot de moneda digital (Tutorial)

El autor:- ¿ Por qué?, Creado: 2022-11-08 17:02:28, Actualizado: 2023-09-20 10:31:51

img

En los últimos días, recibí algunos mensajes privados de los usuarios del grupo telegrama, esperan tener un ejemplo de diseño de suscripción de nuevas acciones estrategia para referencia.

Necesidades de la estrategia

Por ejemplo, en la actualidad, un exchange y un par de operaciones: XXX_USDT, aún no se han listado en el exchange. Pero pronto se va a listar. Necesitamos seguir el mercado XXX_USDT de este exchange con un programa. Una vez que el par de operaciones está listado, se puede negociar. Emitimos 10 órdenes de compra a precio limitado, especificamos la cantidad y enumeramos la orden para suscribir nuevas monedas. Si puedes comprarlas con éxito, puedes completar la tarea. Si no, puedes listarla hasta que todas las órdenes estén cerradas y puedas comprar monedas.

Las necesidades son muy simples, pero para aquellos que no tienen base de programación en el mercado de la moneda digital, pueden no ser capaces de comenzar, así que vamos a empezar a implementarlo.

Código de estrategia

Definición del parámetro de estrategia:

Aquí definimos estos 7 parámetros para controlar operaciones tales como la colocación de pedidos.

img

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("placed an order successfully", orderId)
        }        
    }
    return ordersIDs
}

function main() {
    if (symbol == "null" || pendingPrice == -1 || pendingAmount == -1 || pendingPrice == -1 || deltaPrice == -1 || deltaAmount == -1) {
        throw "Parameter setting error"
    }
    exchange.SetCurrency(symbol)
    // Block error messages
    SetErrorFilter("GetDepth")
    while (true) {
        var msg = ""
        var depth = exchange.GetDepth()
        if (!depth || (depth.Bids.length == 0 && depth.Asks.length == 0)) {
            // No depth
            msg = "No depth data, wait!"
            Sleep(500)
        } else {
            // Obtain depth
            Log("Place orders concurrently!")
            var ordersIDs = pendingOrders(ordersNum, pendingPrice, pendingAmount, deltaPrice, deltaAmount)
            while (true) {
                var orders = _C(exchange.GetOrders)
                if (orders.length == 0) {
                    Log("The current number of pending orders is 0, and the operation is stopped")
                    return 
                }
                var tbl = {
                    type: "table",
                    title: "The current pending orders",
                    cols: ["id", "price", "amount"], 
                    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 comprueba la API de intercambio y la interfaz del libro de pedidos. Una vez que se pueden obtener los datos del libro de pedidos, la estrategia utilizará la función exchange.Go para colocar pedidos simultáneamente. Después de que se realice el pedido, se comprobará circularmente el estado del pedido pendiente actual. La estrategia no se ha probado realmente, aquí solo hay una referencia de diseño de código. Si está interesado, puede modificar o agregar funciones a ella.

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


Relacionados

Más.