O recurso está a ser carregado... Carregamento...

Subscrever Nova Estratégia de Ações para Spot de Moeda Digital (Tutorial)

Autora:FMZ~Lydia, Criado: 2022-11-08 17:02:28, Atualizado: 2023-09-20 10:31:51

img

Nos últimos dias, recebi algumas mensagens privadas de usuários do grupo telegrama, eles esperam ter um exemplo de design de assinatura de novas ações estratégia para referência.

Necessidades de estratégia

Por exemplo, atualmente, uma bolsa e um par de negociação: XXX_USDT, ainda não estão listados na bolsa. Mas ele vai ser listado em breve. Precisamos seguir o mercado XXX_USDT desta bolsa com um programa. Uma vez que o par de negociação esteja listado, ele pode ser negociado. Nós emitimos 10 ordens de compra de preço limitado, especificamos o valor e listamos a ordem para assinar novas moedas. Se você pode comprá-las com sucesso, você pode completar a tarefa. Caso contrário, você pode listá-lo até que todas as ordens sejam fechadas e você possa comprar moedas.

As necessidades são muito simples, mas para aqueles que não têm base de programação no mercado de moeda digital, eles podem não ser capazes de começar, então vamos começar a implementá-lo.

Código de estratégia

Definição do parâmetro de estratégia:

Aqui definimos estes 7 parâmetros para controlar operações como a colocação de ordens.

img

Implementação do 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)
    }
}

A estratégia verifica a API de troca e a interface do livro de pedidos. Uma vez que os dados do livro de pedidos podem ser obtidos, a estratégia usará a função exchange.Go para colocar ordens simultaneamente. Depois que a ordem for colocada, o status da ordem pendente atual será verificado circularmente. A estratégia não foi realmente testada, aqui está apenas uma referência de design de código. Se você estiver interessado, você pode modificar ou adicionar funções a ela.

Estratégia completa de:https://www.fmz.com/strategy/358383


Relacionados

Mais.