En la carga de los recursos... Cargando...

Cuantificación FMZ: Desarrollo de casos de diseño de necesidades comunes en el mercado de criptomonedas (II)

El autor:Los inventores cuantifican - sueños pequeños, Creado: 2023-12-24 22:24:58, Actualizado: 2023-12-25 17:10:56

img

En el artículo anterior, los lectores comentaron que se necesita un ejemplo de un programa para monitorear el desvío de cuentas de contratos, y en este artículo vamos a probar este requisito con el intercambio de Binance para aprender a diseñar juntos.

Los intercambios de criptomonedas procesan una gran cantidad de transacciones todos los días, incluidas las transferencias de activos entre diferentes billeteras. La monitorización en tiempo real de estas transferencias es vital para los comerciantes y desarrolladores. Este artículo explorará un código JavaScript que tiene como objetivo monitorear las transferencias de activos más recientes en los intercambios de criptomonedas y discutirá sus componentes clave.

Análisis de necesidades

Revisamos la documentación de la bolsa y descubrimos que hay una interfaz de historial de desviación que puede consultar toda la información de desviación. No necesitamos obtener toda la historia de desviación porque solo monitorizamos los registros de desviación que pueden ocurrir. Solo necesitamos revisar los registros de desviación dentro de un rango reciente según una cierta frecuencia.

En la página de Facebook de Facebook, se puede leer:

// GET /sapi/v1/asset/transfer type, size : 100

¿Cómo comprobar los nuevos registros de despliegue? Después de mirar la documentación de Binance, descubrimos que hay un par de tiempos en los datos devueltos por esta interfaz, y es muy simple juzgar con el par de tiempos, siempre y cuando haya un registro mayor que el par de tiempo más grande del registro actual, que indica que se produjo un nuevo movimiento de despliegue.

/sapi/v1/asset/transferLa interfaz requiere hasta 100 datos por vez, y esta detección no es un problema para la redirección de baja frecuencia, a menos que una detección termine y la siguiente detección comience con más de 100 operaciones de redirección de la cuenta. En este caso, es posible que se pierda algunos registros de operaciones adicionales, lo que es suficiente para el escenario de demanda general.

Por supuesto, hay muchos detalles en el diseño real, por ejemplo, ver la documentación y descubrir que hay muchas direcciones de despliegue, por lo que debemos monitorear cada dirección de despliegue.var dicType = {...}En el caso de la red, la dirección de la red es la dirección de la red.

Para mostrar mejor el contenido, usamos una tabla de barras de estado para exportar la información de desvío de los 5 artículos más recientes en la interfaz de la política, por lo que construimos una llamada:monitorPor supuesto, no se puede registrar información sin límites, por lo que solo mantenemos 100 registros por dirección de despliegue y eliminamos los registros prematuros después de 100.

Ejemplos de código

function getRecentTransferHistory(TransType, typeDesc) {
	// GET /sapi/v1/asset/transfer type, size : 100
    
    var rows = null 
    var ret = exchange.IO("api", "GET", "/sapi/v1/asset/transfer", `type=${TransType}&size=100`)
    Log("/sapi/v1/asset/transfer" + `type=${TransType}&size=100`)
    if (ret && typeof(ret.rows) != "undefined" && Array.isArray(ret.rows)) {
        rows = ret.rows
    } else if (ret && typeof(ret.total) != "undefined" && ret.total == 0) {
        rows = []
    } else {
    	Log(TransType, typeDesc, "查询失败", ret)
    }
    
    return rows
}

var monitor = {}
function monitorTransfers() {
    var dicType = {
        "MAIN_UMFUTURE": "现货钱包 --> U本位合约钱包",
        "MAIN_CMFUTURE": "现货钱包 --> 币本位合约钱包",
        "UMFUTURE_MAIN": "U本位合约钱包 --> 现货钱包",
        "UMFUTURE_MARGIN": "U本位合约钱包 --> 杠杆全仓钱包",
        "CMFUTURE_MAIN": "币本位合约钱包 --> 现货钱包",
        "MARGIN_UMFUTURE": "杠杆全仓钱包 --> U本位合约钱包",
        "MARGIN_CMFUTURE": "杠杆全仓钱包 --> 币本位合约钱包",
        "CMFUTURE_MARGIN": "币本位合约钱包 --> 杠杆全仓钱包",
        "FUNDING_UMFUTURE": "资金钱包 --> U本位合约钱包",
        "UMFUTURE_FUNDING": "U本位合约钱包 --> 资金钱包",
        "FUNDING_CMFUTURE": "资金钱包 --> 币本位合约钱包",
        "CMFUTURE_FUNDING": "币本位合约钱包 --> 资金钱包",
        "UMFUTURE_OPTION": "U本位合约钱包 --> 期权钱包",
        "OPTION_UMFUTURE": "期权钱包 --> U本位合约钱包",
        // 统一账户
        "MAIN_PORTFOLIO_MARGIN": "现货钱包 --> 统一账户钱包",
        "PORTFOLIO_MARGIN_MAIN": "统一账户钱包 --> 现货钱包"
    }
    
    Log("开始检测")
    _.each(dicType, function(v, k) {
        var rows = getRecentTransferHistory(k, v)
        var maxTS = 0
        _.each(rows, function(row) {
            if (typeof(monitor[k]) == "undefined") {
            	monitor[k] = {"transType": k, "typeDesc": v, "recentRecords": [], "lastTS": 0}            	
            }

            if (row["timestamp"] > monitor[k]["lastTS"]) {
                monitor[k]["recentRecords"].push(row)
                
                if (monitor[k]["lastTS"] != 0) {
                	Log("检测到新增划转记录", k, v, row, "#FF0000")
                }                
            }
            maxTS = Math.max(maxTS, row["timestamp"])     
        })
        if (rows && rows.length == 0) {
            return 
        }
        monitor[k]["lastTS"] = maxTS

        var sortedArrayAscending = monitor[k]["recentRecords"].slice().sort((a, b) => a.timestamp - b.timestamp)
        monitor[k]["recentRecords"] = sortedArrayAscending

        if (monitor[k]["recentRecords"].length > 100) {
        	monitor[k]["recentRecords"].shift()
        }
        Sleep(1000)
    })
    Log("开始结束")
}


function main() {
    LogReset()
    while (true) {
        monitorTransfers()

        var tbls = []
        _.each(monitor, function(v, k) {
        	var tbl = {
        		"type": "table", 
        		"title": v["typeDesc"], 
        		"cols": ["asset", "amount", "status", "tranId", "time"], 
        		"rows": []
        	}

            var arr = v["recentRecords"].slice().sort((a, b) => b.timestamp - a.timestamp)
            for (var i = 0; i < arr.length; i++) {
            	if (i < 5) {
            		tbl["rows"].push([arr[i]["asset"], arr[i]["amount"], arr[i]["status"], arr[i]["tranId"], _D(arr[i]["timestamp"])])
            	}            	
            }
            tbls.push(tbl)
        })        

    	LogStatus(_D(), "\n", "`" + JSON.stringify(tbls) + "`")
    	Sleep(1000 * 30)
    }
}

El código es el siguiente:

El código JavaScript que se ofrece incluye varias funciones que construyen un sistema para monitorear el reciente desvío de activos.

  • La función getRecentTransferHistory es la siguiente:

    Objetivo: Obtener el historial de transferencia de activos más reciente de las API de los intercambios según los parámetros indicados. Los parámetros son: TransType (tipo de desplazamiento) y typeDesc (tipo de descripción). El punto final de la API es /sapi/v1/asset/transfer.

  • La función monitorTransfers es la siguiente:

    Propósito: Recorrer el tipo de redirección predefinido, buscar el historial de redirección más reciente y registrar cualquier redirección nueva. Utiliza dicType para mapear el tipo de despliegue a descripciones fáciles de leer. Actualizar los objetos de monitor para seguir el último giro de cada tipo.

  • La función principal es:

    El objetivo: ejecutar un ciclo infinito, monitorear continuamente los cambios y mostrar los datos más recientes. Utiliza regularmente la función monitorTransfers. Generar una tabla para cada tipo de desvío, que contiene columnas como activos, cantidad, estado, ID de transacción y horario.

Las características clave:

  • El tipo de mapa de desplazamiento dinámico:

    El dicType de código utiliza el diccionario para mapear el tipo de despliegue en el nombre descriptivo, proporcionando una descripción clara de las propiedades de cada despliegue.

  • La vigilancia en tiempo real:

    El sistema continúa revisando nuevos cambios, actualizando los objetos del monitor y registrando cualquier cambio detectado.

  • Los datos muestran:

    Utiliza tablas para mostrar el desglose de datos de cada tipo, incluyendo los detalles relacionados con los activos, los montos, el estado, el ID de transacción y el horario.

  • La historia de la ciudad se ha cambiado recientemente:

    Mantenga una lista de rotación de los registros de rotación más recientes para cada tipo, asegurando una visualización concisa y oportuna.

Pruebas en disco real

Se realizó un giro manual, y el programa detectó el giro.

img

img

- ¿ Qué?

El código JavaScript ofrecido ofrece una poderosa solución para monitorear los recientes movimientos de activos en los intercambios de criptomonedas. Sus características dinámicas y en tiempo real lo convierten en una herramienta valiosa para los comerciantes y desarrolladores que buscan comprender el movimiento de los activos entre diferentes carteras. El código se puede modificar y personalizar según las necesidades específicas, proporcionando una base sólida para aquellos que deseen mejorar la estrategia de negociación de criptomonedas o desarrollar funciones de monitoreo adicionales.

En este artículo, vamos a lanzar un guión y ofrecer una idea de diseño para que tu carrera en criptomonedas sea informativa y exitosa.


Más.

Seguimiento de banda de 98K_LongEl maestro de los sueños es la versión realista más grande de los sueños.