Realizar um bot de supervisão de ordens simples do Cryptocurrency Spot

Autora:Ninabadass, Criado: 2022-04-11 11:54:34, Atualizado: 2022-04-11 11:55:08

Realizar um bot de supervisão de ordens simples do Cryptocurrency Spot

Há muitos amigos no círculo de criptomoedas que precisam de um bot de supervisão de ordens, mas eles estão sofrendo com o longo tempo para começar com o design programático quando têm zero básico.

A função deste bot é perceber que quando uma conta tem uma operação de compra ou venda, outras contas de supervisão de ordem seguirão e executarão a operação também. Então, primeiro definimos dois assuntos:

  • Conta de referência: conta controlada, cujas ações são monitorizadas.
  • Conta de supervisão de ordens: a conta de supervisão de ordens; quando a conta de referência tiver uma ação, a conta de supervisão de ordens executará a mesma ação.

Após esta exigência ter sido inicialmente esclarecida, continuamos a pensar no próximo passo: como podemos identificar cada ação do relato de referência?

Monitorar a conta de referência. É muito simples para as contas de negociação à vista. Nós só precisamos comparar o valor do símbolo nos dados de informações da conta mais recente com o valor do símbolo atual nos dados de informações da conta mais recente obtidos. Se o valor do símbolo nos últimos dados de informações da conta atualmente obtidos for maior do que o registro anterior, prova que a conta de referência realizou uma operação de compra e a execução foi bem-sucedida.

Quando for constatado que a conta de referência realizou uma operação, o último registo de dados da conta deve ser actualizado para o comparar com as informações da conta obtidas na próxima vez, a fim de determinar se existe uma nova ação de negociação.

A descrição do código de estratégia da lógica acima:

        // detect order supervising
        var amount = (nowAcc.Stocks + nowAcc.FrozenStocks) - (initAcc.Stocks + initAcc.FrozenStocks)  // detect the currency amount changes 
        var func = null 
        if (amount > 0) {   // the amount increased 
            func = $.Buy    // buy
        } else if (amount < 0) {  // the amount decreased 
            func = $.Sell         // sell 
        } else {
            continue
        }
        
        // execute order supervising 
        Log("Order supervising! Amount:", Math.abs(amount), "#FF0000")
        for (var i = 1 ; i < exchanges.length ; i++) {    // when i equals 0, it indicates the reference platform, not to be processed; process other order supervising platforms 
            func(exchanges[i], Math.abs(amount))          // execute the specified trading function, and it could be $.Buy or $.Sell, which needs to be determined by observing whether amount is larger than 0 or less than 0
        }
        
        // update the information record of the reference account after order supervising 
        initAcc = nowAcc                                  // update the latest account information of the reference platform, to compare it with the next one 

A principal lógica de detecção da estratégia é o código acima.$.Buye$.SellO valor da posição em risco deve ser calculado de acordo com o método de classificação da posição em risco.

Adicionar algumas exibições da barra de estado para a estratégia para facilitar o monitoramento dos dados de cada conta.

function test() { 
    // test function 
    var ts = new Date().getTime()    
    if (ts % (1000 * 60 * 60 * 6) > 1000 * 60 * 60 * 5.5) {
        Sleep(1000 * 60 * 10)
        var x = Math.random()
        if (x > 0.5) {
            $.Buy(exchange, x / 10)    
        } else {
            $.Sell(exchange, x / 10)    
        }        
    }
}

function main() {
    LogReset(1)
    if (exchanges.length < 2) {
        throw "no platform of order supervising"
    }
    var exName = exchange.GetName()
    // detect the reference platform 
    if (exName.includes("Futures_")) {
        throw "only support sport order supervising"
    }
    Log("start monitoring", exName, "platform", "#FF0000")
    
    // detect the order supervising platforms 
    for (var i = 1 ; i < exchanges.length ; i++) {
        if (exchanges[i].GetName().includes("Futures_")) {
            throw "Do not support the order supervising of futures platfroms"
        }
    }
    
    var initAcc = _C(exchange.GetAccount)
    while(1) {
        if(IsVirtual()) {
           // test function
           test()  
        }  
        Sleep(5000)
        
        // update the current information of the reference account 
        var nowAcc = _C(exchange.GetAccount)
        
        // the account information of the reference platform
        var refTbl = {
            type : "table", 
            title : "reference platform",
            cols : ["name", "symbol", "frozen symbol", "assets", "frozen assets"],
            rows : []
        }
        refTbl.rows.push([exName, nowAcc.Stocks, nowAcc.FrozenStocks, nowAcc.Balance, nowAcc.FrozenBalance])
        
        // the account information of the order supervising platform
        var followTbl = {
            type : "table", 
            title : "order supervising platform",
            cols : ["name", "symbol", "frozen symbol", "assets", "frozen assets"],
            rows : []        
        }
        for (var i = 1 ; i < exchanges.length ; i++) {
            var acc = _C(exchanges[i].GetAccount)
            var name = exchanges[i].GetName()
            followTbl.rows.push([name, acc.Stocks, acc.FrozenStocks, acc.Balance, acc.FrozenBalance])
        }
        
        // status bar display 
        LogStatus(_D(), "\n`" + JSON.stringify(refTbl) + "`", "\n`" + JSON.stringify(followTbl) + "`")
        
        // detect order supervising 
        var amount = (nowAcc.Stocks + nowAcc.FrozenStocks) - (initAcc.Stocks + initAcc.FrozenStocks)
        var func = null 
        if (amount > 0) {
            func = $.Buy
        } else if (amount < 0) {
            func = $.Sell
        } else {
            continue
        }
        
        // execute order supervising 
        Log("Order supervising! Amount:", Math.abs(amount), "#FF0000")
        for (var i = 1 ; i < exchanges.length ; i++) {            
            func(exchanges[i], Math.abs(amount))
        }
        
        // update the information record of the reference account after order supervising 
        initAcc = nowAcc
    }
}

Vamos testá-lo no bot real, pela plataforma de simulação FMZ wexApp para testar. Aqui eu adicionei três contas wexApp, que são todas contas independentes. Uma delas serve como uma plataforma de referência, e as outras duas servem como plataformas de supervisão de pedidos.

img

Depois, colocamos manualmente uma ordem no terminal de negociação da FMZ para ver se o bot podia supervisionar automaticamente a ordem.

img

Podem ver que o bot detectou a troca e realizou a operação de supervisão de ordens.

img

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

A estratégia é apenas para estudo. Quando houver alguma dúvida, gostaríamos que deixassem comentários sobre isso.


Mais.