avatar of 发明者量化-小小梦 发明者量化-小小梦
focar em Mensagem privada
4
focar em
1271
Seguidores

Moeda digital identifica nova estratégia de captura de moedas (ensino)

Criado em: 2022-04-20 15:59:01, atualizado em: 2023-09-20 10:29:48
comments   0
hits   3060

Moeda digital identifica nova estratégia de captura de moedas (ensino)

Moeda digital identifica nova estratégia de captura de moedas (ensino)

Nos últimos dois dias, um usuário do grupo do Telegram me enviou uma mensagem privada esperando um exemplo de design para uma estratégia de IPO. Às vezes, quando uma exchange lista novas moedas, você quer pegar algumas delas. Este artigo cria uma estratégia simples para novas moedas.

Requisitos estratégicos

Por exemplo, atualmente em uma determinada bolsa, um certo par de negociação: XXX_USDT, ainda não foi listado na bolsa. Mas estará online em breve. É necessário um programa para monitorar o mercado XXX_USDT desta bolsa. Quando o limite superior deste par de negociação for atingido, ele poderá ser negociado. Em seguida, emita 10 ordens de compra limitadas, especifique a quantidade e faça ordens para pegar moedas. Comprá-lo conclui a tarefa. Se você não puder comprá-lo, basta mantê-lo em espera até que todas as ordens sejam executadas e você compre as moedas.

O requisito é muito simples, mas para aqueles que não têm nenhuma base de programação no círculo de criptomoedas, eles podem não saber por onde começar. A seguir, trabalharemos para concretizar esse requisito.

Código de estratégia

Definição de parâmetros de estratégia:

Aqui definimos vários parâmetros para controlar operações como a colocação de pedidos. Moeda digital identifica nova estratégia de captura de moedas (ensino)

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

A estratégia detecta a API de câmbio e a interface do livro de ordens. Uma vez que os dados do livro de ordens estão disponíveis, a estratégia usa a função exchange.Go para colocar ordens. Após fazer um pedido, o status do pedido pendente atual será verificado em um loop. A estratégia não foi realmente testada. Aqui está apenas uma referência de design de código. Aqueles que estiverem interessados ​​podem modificar e adicionar funções para uso.

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