Realizar un bot de supervisión de órdenes sencillo de Cryptocurrency Spot

El autor:No lo sé., Creado: 2022-04-11 11:54:34, Actualizado: 2022-04-11 11:55:08

Realizar un bot de supervisión de órdenes sencillo de Cryptocurrency Spot

Hay muchos amigos en el círculo de criptomonedas que necesitan un bot de supervisión de pedidos, pero están sufriendo el largo tiempo para comenzar con el diseño programático cuando tienen cero básico.

En primer lugar, vamos a analizar el requisito. La función de este bot es darse cuenta de que cuando una cuenta tiene una operación de compra o venta, otras cuentas de orden de supervisión seguirá y ejecutar la operación también. Así que, primero definimos 2 sujetos:

  • Cuenta de referencia: la cuenta controlada, cuyas acciones son controladas.
  • Cuenta de supervisión de órdenes: la cuenta de supervisión de órdenes; cuando la cuenta de referencia tenga una acción, la cuenta de supervisión de órdenes realizará la misma acción.

Después de que este requisito haya sido inicialmente aclarado, seguimos pensando en el siguiente paso: ¿Cómo podemos identificar cada acción de la cuenta de referencia?

Para las cuentas de negociación al contado, es muy sencillo comparar el valor del símbolo en los últimos datos de información de la cuenta con el valor del símbolo actual en los últimos datos de información de la cuenta obtenidos. Si la cantidad de símbolos en los últimos datos de información de la cuenta actualmente obtenidos es mayor que el registro anterior, prueba que la cuenta de referencia ha realizado una operación de compra y la ejecución fue exitosa. Por el contrario, si hay menos símbolos, se realiza una operación de venta para la cuenta de referencia.

Cuando se compruebe que la cuenta de referencia ha realizado una operación, se actualizará el último registro de datos de la cuenta para compararlo con la información de la cuenta obtenida la próxima vez para determinar si existe una nueva operación.

La descripción del código de estrategia de la lógica anterior:

        // 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 

La lógica de detección principal de la estrategia es el código anterior. Para simplificar el diseño, la estrategia utiliza la plantilla oficial FMZ [Biblioteca de comercio de divisas digitales], y$.Buyy$.SellEn el caso de las operaciones de orden, la función de ejecución de las operaciones de orden es la función de ejecutar las operaciones de orden.

Añadir algunas pantallas de la barra de estado a la estrategia para facilitar el monitoreo de los datos de cada cuenta.

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 a probarlo en el bot real, por FMZ wexApp simulación plataforma para probar. Aquí he añadido tres cuentas de wexApp, todas las cuales son cuentas independientes. Uno de ellos sirve como una plataforma de referencia, y los otros dos sirven como plataformas de supervisión de pedidos.

img

Luego, colocamos manualmente un pedido a través de la terminal de comercio FMZ para ver si el bot podía supervisar automáticamente el pedido.

img

Se puede ver que el bot detectó el comercio y realizó la operación de supervisión de la orden.

img

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

La estrategia es sólo para el estudio. Cuando haya alguna pregunta, le agradeceríamos si deja comentarios al respecto.


Más.