Introducción a las estrategias de alta frecuencia de las monedas digitales

El autor:Las hierbas, Creado: 2023-03-10 10:09:13, Actualizado: 2023-09-18 20:13:58

img

¿Qué es esto? En 2020, escribí un artículo sobre estrategias de alta frecuencia, y en ese artículo, me refería a las estrategias de alta frecuencia.https://www.fmz.com/digest-topic/6228Aunque recibieron mucha atención, no escribieron en profundidad. Pasaron más de dos años y el mercado también cambió. Después de la publicación del artículo, mi estrategia de alta frecuencia generó ganancias estables durante mucho tiempo, pero las ganancias lentas disminuyeron gradualmente o incluso se suspendieron.

Condiciones para el intercambio de alta frecuencia

  • Las cuentas con comisiones de retorno, por ejemplo, en el caso de la moneda china, la comisión de retorno de los fabricantes es de 5 por ciento de las 100.000, si el volumen de operaciones diarias es de 100 millones de U, la comisión de retorno es de 5000 U. Por supuesto, el tomador también se basa en la tasa VIP, por lo que si la estrategia no necesita pagar, la categoría VIP no tiene gran influencia en la estrategia de alta frecuencia. En general, los intercambios de diferentes grados tienen diferentes tasas de retorno, que necesitan mantener un alto volumen de transacciones.

  • La velocidad. La política de alta frecuencia se llama alta frecuencia porque es rápida. Unirse a un servidor de color de intercambio para obtener la menor demora y la conexión más estable también es una de las condiciones para el volumen interno.

  • El mercado adecuado. El comercio de alta frecuencia se conoce como la perla del comercio cuantitativo, y creo que muchos operadores programados lo han intentado, pero la mayoría de las personas deberían detenerse porque no ganan dinero y no encuentran una dirección para mejorar, la principal razón debería ser encontrar el mercado de operaciones equivocado. La etapa inicial de la estrategia debe buscar un mercado relativamente fácil para ganar dinero para operar, de modo que sea beneficioso y tenga una mejor retroalimentación que favorezca el progreso de la estrategia.

  • Enfrentarse a la competencia. Cualquier mercado de operaciones es dinámico, no hay estrategias de negociación que puedan ser una vez y para siempre, el comercio de alta frecuencia es más evidente, entrar en este mercado es competir directamente con un grupo de los operadores más inteligentes y diligentes. En un mercado de cero y juego, más ganas que los demás, menos ganas.

Principios de alta frecuencia

Las estrategias de alta frecuencia se dividen en varias.

  • Hipoteca de alta frecuencia, oportunidad de encontrar una cobertura a través de este intercambio o de otro intercambio, para obtener ganancias con ventajas de velocidad.
  • Tendencias de alta frecuencia, para obtener ganancias mediante el juicio de tendencias a corto plazo
  • Como comerciante, se registra la transacción en ambos lados de la compra y venta, se controla el almacenamiento y se obtiene un beneficio mediante la obtención de comisiones.
  • Muchos otros, pero no todos.

Mi estrategia es una combinación de tendencias y vendedores, primero juzgar la tendencia, luego hacer el pedido, vender el pedido inmediatamente después de la transacción, sin mantener el inventario, a continuación se presenta el código de la estrategia combinada.

La estructura estratégica

El siguiente código, basado en la arquitectura de los contratos perpetuos de Binance, se suscribe principalmente a la información de posición y al flujo de órdenes de operaciones de profundidad del websocket. Debido a que la información del mercado y la información de la cuenta son suscripciones separadas, se necesita leer constantemente para determinar si se obtiene la información más reciente, aquí se utiliza EventLoop (1000), evitando un ciclo muerto directo y reduciendo la carga del sistema. EventLoop (1000) se bloquea con WSS o envía tareas de retorno simultáneas con un tiempo superior a 1000 ms.

var datastream = null
var tickerstream = null
var update_listenKey_time = 0

function ConncetWss(){
    if (Date.now() - update_listenKey_time < 50*60*1000) {
        return
    }
    if(datastream || tickerstream){
        datastream.close()
        tickerstream.close()
    }
    //需要APIKEY
    let req = HttpQuery(Base+'/fapi/v1/listenKey', {method: 'POST',data: ''}, null, 'X-MBX-APIKEY:' + APIKEY) 
    let listenKey = JSON.parse(req).listenKey
    datastream = Dial("wss://fstream.binance.com/ws/" + listenKey + '|reconnect=true', 60)
    //Symbols是设定的交易对
    let trade_symbols_string = Symbols.toLowerCase().split(',')
    let wss_url = "wss://fstream.binance.com/stream?streams="+trade_symbols_string.join(Quote.toLowerCase()+"@aggTrade/")+Quote.toLowerCase()+"@aggTrade/"+trade_symbols_string.join(Quote.toLowerCase()+"@depth20@100ms/")+Quote.toLowerCase()+"@depth20@100ms"
    tickerstream = Dial(wss_url+"|reconnect=true", 60)
    update_listenKey_time = Date.now()
}

function ReadWss(){
    let data = datastream.read(-1)
    let ticker = tickerstream.read(-1)
    while(data){
        data = JSON.parse(data)
        if (data.e == 'ACCOUNT_UPDATE') {
            updateWsPosition(data)
        }
        if (data.e == 'ORDER_TRADE_UPDATE'){
            updateWsOrder(data)
        }        
        data = datastream.read(-1)
    }
    while(ticker){
        ticker = JSON.parse(ticker).data
        if(ticker.e == 'aggTrade'){
            updateWsTrades(ticker)
        }
        if(ticker.e == 'depthUpdate'){
            updateWsDepth(ticker)
        }
        ticker = tickerstream.read(-1)
    }
    makerOrder()
}

function main() {
    while(true){
        ConncetWss()
        ReadWss()
        worker()
        updateStatus()
        EventLoop(1000)
    }
}

Indicadores estratégicos

Como se mencionó anteriormente, mi estrategia de alta frecuencia requiere determinar la tendencia antes de ejecutar la compra. Juzgar la tendencia a corto plazo se basa principalmente en los datos de transacción por transacción, es decir, aggTrade en la suscripción, que incluye la dirección de la transacción, el precio, la cantidad, el tiempo de transacción, etc. Las principales referencias de compra son la profundidad y el volumen de transacción.

  • El promedio de transacciones por transacción, que es el conjunto de pedidos diferentes en precio y dirección dentro de 100 ms, refleja el tamaño de los pedidos de compra y venta, un dato de alto peso que puede suponer que si el volumen de compra es mayor que el de venta, este es un mercado dominado por compradores.
  • La frecuencia de pedidos o el intervalo de pedidos, también basado en datos de transacciones por pieza, el promedio de transacciones anteriores es independiente del concepto de tiempo y no es del todo exacto, si el pedido de una dirección aunque el promedio de transacciones sea pequeño, pero la frecuencia es alta, también contribuye a la intensidad de esta dirección. El promedio de transacciones* La frecuencia de pedidos representa el total de transacciones en intervalos fijos, y puede ser utilizada para una comparación directa.
  • El precio medio de la diferencia de mercado, que es más fácil de entender, es vender uno menos comprar uno. La mayoría de las ofertas actuales son de una diferencia de tick, y si la diferencia de mercado es mayor, a menudo representa un mercado.
  • El precio de compra y venta promedio, calculado por el precio de compra y venta de cada transacción por separado, se compara con el precio más reciente. Por ejemplo, el precio de la compra más reciente es mayor que el precio promedio de la compra, y se puede juzgar preliminarmente que se produce un avance.

La lógica estratégica

Las tendencias a corto plazo

//bull代表短期看涨,bear短期看跌
let bull =  last_sell_price > avg_sell_price && last_buy_price > avg_buy_price &&
            avg_buy_amount / avg_buy_time > avg_sell_amount / avg_sell_time;
let bear =  last_sell_price < avg_sell_price && last_buy_price < avg_buy_price && 
            avg_buy_amount / avg_buy_time < avg_sell_amount / avg_sell_time;

Si el precio de venta más reciente es mayor que el precio promedio de la orden de venta, el precio de compra más reciente es mayor que el precio promedio de la orden de compra, el valor de la compra de intervalo fijo es mayor que el valor de la orden de venta, entonces se decide si es positivo o negativo en el corto plazo.

Precio bajo

function updatePrice(depth, bid_amount, ask_amount) {

    let buy_price = 0
    let sell_price = 0
    let acc_bid_amount = 0
    let acc_ask_amount = 0

    for (let i = 0; i < Math.min(depth.asks.length, depth.bids.length); i++) {
        acc_bid_amount += parseFloat(depth.bids[i][1])
        acc_ask_amount += parseFloat(depth.asks[i][1])
        if (acc_bid_amount > bid_amount  && buy_price == 0) {
            buy_price = parseFloat(depth.bids[i][0]) + tick_size
        }
        if (acc_ask_amount > ask_amount  && sell_price == 0) {
            sell_price = parseFloat(depth.asks[i][0]) - tick_size
        }
        if (buy_price > 0 && sell_price > 0) {
            break
        }
    }
    return [buy_price, sell_price]
}

Aquí, tomando el viejo pensamiento, se repite la profundidad hasta la cantidad requerida, aquí se supone que se puede negociar un pago de 10 monedas en 1s, sin tener en cuenta el nuevo pedido, el precio del pedido de venta se establece en la posición en la que el pedido de 10 monedas choca. ¿Cuánta ventana de tiempo precisa se necesita establecer?

Número de pedidos

let buy_amount = Ratio * avg_sell_amount / avg_sell_time
let sell_amount = Ratio * avg_buy_amount / avg_buy_time

Ratio representa una proporción fija, es decir, el volumen de compra representa una proporción fija del número de pedidos vendidos recientemente. Esta estrategia se adapta a su tamaño de pedido según la actividad de compra y venta actual.

Condiciones

if(bull && (sell_price-buy_price) > N * avg_diff) {
    trade('buy', buy_price, buy_amount)
}else if(position.amount < 0){
    trade('buy', buy_price, -position.amount)
}
if(bear && (sell_price-buy_price) >  N * avg_diff) {
    trade('sell', sell_price, sell_amount)
}else if(position.amount > 0){
    trade('sell', sell_price, position.amount)
}

Donde avg_diff es la diferencia del precio medio de la cuenta, sólo cuando el precio de compra y venta es mayor que un determinado valor multiplicado por este valor y se paga en el momento oportuno, si se mantiene un pedido vacío, también se estabilizará, evitando el recibo a largo plazo.

Arquitectura paralela

var tasks = []
var jobs = []

function worker(){
    let new_jobs = []
    for(let i=0; i<tasks.length; i++){
        let task = tasks[i]
        jobs.push(exchange.Go.apply(this, task.param))
    }
    _.each(jobs, function(t){
        let ret = t.wait(-1)
        if(ret === undefined){
            new_jobs.push(t)//未返回的任务下次继续等待
        }
    })
    jobs = new_jobs
    tasks = []
}

/*
需要的任务参数写在param里
tasks.push({'type':'order','param': ["IO", "api", "POST","/fapi/v1/order",
        "symbol="+symbol+Quote+"&side="+side+"&type=LIMIT&timeInForce=GTX&quantity="+
        amount+"&price="+price+"&newClientOrderId=" + UUID() +"&timestamp="+Date.now()]})
*/

Datos de vigilancia

  • La importancia de la velocidad de la estrategia de alta frecuencia para el retraso se ha enfatizado, y la estrategia debe monitorear y registrar los retrasos, como los pedidos, las retiradas, las devoluciones de posiciones, la profundidad, el flujo de pedidos, las posiciones, el ciclo general, etc.
  • Porcentaje de transacciones, porcentaje de transacciones en la estadística porcentaje de transacciones totales, si la proporción es baja, hay espacio para subir. En momentos de pico, la proporción estratégica puede alcanzar más del 10% del volumen total de transacciones.
  • La rentabilidad de la liquidación, la rentabilidad de la liquidación promedio estadística, es la referencia más importante para determinar si una estrategia es efectiva.
  • La proporción de comisiones, estadística de la proporción de comisiones en el total de ganancias, refleja el grado de dependencia de la estrategia de comisiones. Las operaciones de todos los diferentes niveles de comisiones, las estrategias que no ganan, tal vez ganan con un nivel más alto de comisiones.
  • El porcentaje de fracaso de los pedidos, los pedidos son solo transacciones de pedidos, debido a la demora del pedido, puede no ser posible colgar, si este porcentaje es alto, indica que la velocidad de la estrategia no es buena.
  • La proporción de pedidos realizados, las plataformas a menudo tienen requisitos sobre la tasa de transacción, si es demasiado baja, indica que la estrategia de retirada es demasiado frecuente y necesita ser resuelta.
  • La distancia promedio entre los pedidos de compra y venta, que refleja el intervalo entre los pedidos estratégicos y los despachos, puede verse que la mayoría sigue ocupando el lugar de compra y venta.

Otras sugerencias

  • La estrategia de alta frecuencia de este artículo pertenece a la monoplaza de monoplazas de un solo intercambio, la limitación es grande, la mayoría de las situaciones y la mayoría de las monedas no son rentables, pero tampoco se puede predecir qué monedas serán rentables en el futuro, por lo que se pueden negociar varias o incluso todas las monedas, no pierda la oportunidad. Incluso con la limitación de la frecuencia del intercambio, un robot también puede negociar varios pares de transacciones, por supuesto, para la velocidad óptima, una cuenta subcontratable puede negociar una transacción, un servidor para un robot, solo que así el costo será mucho más alto.
  • El volumen y la condición de la orden se determinan según la rentabilidad. El comercio de monedas múltiples puede resultar en un costo demasiado alto para intentarlo. Si el monitoreo no es rentable, se utiliza un volumen de transacción mínimo y se reduce la frecuencia de transacción hasta que la estrategia de monitoreo dinámico tenga una rentabilidad positiva, y luego se aumenta gradualmente el volumen de transacción para aumentar la rentabilidad.
  • Para obtener más información, el comercio de alta frecuencia otra característica es el mayor volumen de datos procesados, más información utilizada. Toda la información de mercado de la pareja de transacciones de un solo intercambio debe ser de referencia, y también se puede referir permanentemente a los datos del momento, también se puede referir a los datos de la pareja de transacciones de otros intercambios, incluso a los datos de otras monedas, cuantos más datos, mayores son las ventajas correspondientes.
  • El servidor de Binance está en Tokyo, mientras que otros servidores de los intercambios varían, por lo que puede consultar a los técnicos de los intercambios.
  • El código de la estrategia de este artículo es solo un ejemplo de código simple, eliminando muchos detalles pesados pero que se tuvieron que considerar, y los indicadores utilizados son solo para referencia, no para su uso directo.

Relacionados

Más.

el mztcoinEl dios de la hierba es agresivo

El DangoDios de la hierba

77924998¿Cuál es el servidor de AWS que usa Grasshopper?

¿Qué quieres decir?La fuerza de la fuerza.

¿Qué es eso?¿Por qué Grasshopper no ofrece un programa de alta frecuencia pagado?

Mi corazón todavía está.¿Será útil esta estrategia si se puede hacer una copia?

Escrito por TradeManLlamando a Grasshopper, con la esperanza de enseñar más, aprender a entrar en el comercio de alta frecuencia

# Una ola en la ventana #El hombre de las calles

No hay nada.¡El dios de la hierba es fuerte!

Cuantificación de orcsEl hombre de las calles

Las hierbasEs muy difícil y no tiene mucho sentido.