Estrategia de flujo lineal de pedidos pendientes desarrollada sobre la base de la función de reproducción de datos

El autor:- ¿ Por qué?, Creado: 2022-12-23 20:06:04, Actualizado: 2023-09-20 09:41:28

img

Estrategia de flujo lineal de pedidos pendientes desarrollada sobre la base de la función de reproducción de datos

Prefacio

A menudo se dice que el comercio es un arte, y el arte proviene de la inspiración.

Inspiración y sensación de mercado de la negociación

Lo que generalmente llamamos inspiración se refiere al estado creativo que las personas producen en el proceso de pensamiento. Para los comerciantes, nuestro hemisferio izquierdo de nuestro cerebro ha completado la formulación de una serie de reglas como la redacción de estrategias, la asignación de capital y el establecimiento de parámetros. La inspiración y la sensación de mercado del comercio provienen del hemisferio derecho del cerebro.

Muchas personas han oído hablar de la palabra "sentimiento de mercado", que es una especie de sentimiento vago, al igual que un déjà vu de lo que está sucediendo en el momento.

Cómo obtener inspiración

En los ojos de un laico, el sentimiento del mercado es misterioso. Es un talento misterioso. Con él, puedes estar en el mercado. De hecho, es un resumen de la experiencia de negociación subjetiva por el cerebro. Es un sentimiento de prejuicio vago realizado a través de años de observar el mercado.

Aunque estrictamente hablando, la inspiración no es exactamente lo mismo que el sentimiento del mercado, creemos que después de miles de veces de refinamiento del mercado, tendremos una comprensión más profunda del mercado, y podremos desarrollar estrategias con facilidad.

Sin embargo, los futuros y las acciones de materias primas nacionales solo tienen unas pocas horas de tiempo de negociación al día, por lo que sería abrumador mejorar la experiencia de uno en observar el mercado, formar sus propios patrones de ganancias y reglas de negociación, y entrenar sus reflejos condicionados subconscientemente solo desde el comercio en vivo. Además de pagar un largo costo de tiempo, la mayoría de los operadores también soportan el costo de las pérdidas de capital.

Cómo usar la reproducción de datos

La función de reproducción de datos se puede entrenar independientemente de las horas de negociación del intercambio, y admite una variedad de futuros de productos básicos y variedades de moneda digital. El mercado se puede reproducir manualmente o automáticamente, y el tiempo de inicio y final y la velocidad de reproducción del mercado histórico se pueden establecer libremente. En comparación con otros programas, el modo de reproducción de datos de línea K se utiliza ampliamente, mientras que FMZ Quant adopta el modo de reproducción de datos a nivel de Tick, que está realmente cerca del entorno de backtesting de un bot de negociación real, y reproduce los datos de volumen de precios del mercado, lo que permite a los operadores sumergirse en el mundo real.

Abre el sitio web oficial de la FMZ Quant (fmz.comEn la tabla de control se muestra la página de función de reproducción de datos. Hay cuatro cuadros de opciones y un botón de selección. Primero, haga clic en el botón de selección para mostrar solo las variedades que admiten la reproducción de bots reales, luego seleccione las variedades que se reproducirán en la parte superior izquierda, luego seleccione la hora de inicio y finalización de los datos en los siguientes dos cuadros de opciones, luego seleccione el período de tiempo de los datos como reproducción de bots reales, y finalmente haga clic en el botón Ir en el extremo derecho para iniciar la función de reproducción de datos.

img

Hay tres secciones debajo de la etiqueta de datos. A la izquierda está el historial de operaciones, donde todos los pedidos que se han cerrado se muestran en orden cronológico. En el medio está la profundidad de 20 posiciones de cada orden de compra y venta. A la derecha está el área de control de reproducción de datos, donde se pueden seleccionar métodos de reproducción de datos manuales y automáticos, al igual que con un reproductor multimedia.

img

El índice de posición puede arrastrar el cursor hacia adelante y hacia atrás de izquierda a derecha, lo que le permite seleccionar la hora de inicio de la reproducción de datos rápidamente.

img

La velocidad de reproducción de datos también se puede controlar en la parte inferior moviendo el cursor de derecha a izquierda, en milisegundos, para acelerar y desacelerar los datos durante la reproducción.

img

Construir la lógica de la estrategia

Aunque hay muchos factores que afectan el aumento y la disminución del precio, incluido el entorno económico global, las políticas macro nacionales, las políticas industriales relevantes, las relaciones de oferta y demanda, los eventos internacionales, las tasas de interés y los tipos de cambio, la inflación y la deflación, la psicología del mercado, los factores desconocidos, etc., el precio final en el mercado es el resultado de la competencia entre varias partes y el lado de la posición corta. Si más personas compran que venden, el precio aumentará; Por el contrario, si más personas venden que compran, el precio disminuirá. Entonces solo necesitamos analizar el precio para hacer una estrategia comercial.

A través de la reproducción de FMZ Quant de los últimos meses s BTC_USDT pares comerciales de intercambio de Binance, encontramos que cuando el mercado aumentó y disminuyó bruscamente, el libro de pedidos de los datos de Tick es claramente asimétrico en términos del volumen de órdenes entre las posiciones largas y cortas. Cuando el mercado está aumentando, el número de órdenes largas es obviamente mayor que el número de órdenes cortas; Cuando el mercado está aumentando, el número de órdenes cortas es obviamente mayor que el número de órdenes largas. Entonces, ¿podemos predecir el aumento y la disminución del precio en un corto período de tiempo basado en el volumen de órdenes pendientes en el libro de pedidos?

La respuesta es sí.

img

Cuando el mercado aumenta, el número de órdenes largas es obviamente mayor que el número de órdenes cortas.

img

Cuando el mercado está disminuyendo, el número de órdenes cortas es obviamente mayor que el número de órdenes largas.

Podemos recopilar datos de Tick en profundidad para calcular las órdenes pendientes largas y cortas y compararlas, si las órdenes pendientes largas y cortas combinadas son muy diferentes, puede ser una oportunidad comercial potencial. Por ejemplo, cuando el número de órdenes de posición larga es N veces el de órdenes de posición corta, podemos pensar que la mayoría de las personas en el mercado son alcistas, y la probabilidad de aumento de precios aumentará en un corto tiempo en el futuro; Cuando el número de vendedores cortos es N veces el de vendedores largos, podemos pensar que la mayoría de las personas en el mercado son bajistas, y la probabilidad de disminución de precios aumentará en el futuro cercano.

Escribe una estrategia de trading

Según la lógica de la estrategia anterior, comienza a implementarse en código.fmz.com> Iniciar sesión > Tablero de control > Estrategia > Agregar estrategia > Haga clic en el menú desplegable en la esquina superior derecha para seleccionar el lenguaje Python y comenzar a escribir estrategias.

Paso 1: redactar el marco estratégico

# Strategy main function
def onTick():
    pass


# Program entry
def main():
    while True:  # Enter the infinite loop mode
        onTick()  # Execute the strategy main function
        Sleep(1000)  # Sleep for 1 second

Debemos escribir nuestra estrategia de grande a pequeño, al igual que construir una casa, construyendo el marco primero y luego la pared. En este marco, usamos dos funciones: la función principal y la función onTick. La función principal es la entrada del programa, es decir, el programa se ejecutará desde aquí, luego entrará en el modo de bucle infinito, y ejecutará la función onTick repetidamente. Luego solo necesitamos escribir el contenido de la estrategia en la función onTick.

Paso 2: Escriba las variables globales

vol_ratio_arr = []  # Long/Short positions pending order ratio array
mp = 0  # Virtual positions

La razón por la cual vol_ratio_arr se define como una variable global, es porque mi estrategia necesita recopilar la relación de las órdenes pendientes de posiciones largas y cortas de una pieza de datos de Tick. Si ponemos la variable vol_ratio_arr en la función onTick, obviamente no es razonable ejecutar con el bucle. Lo que necesitamos es cambiar el valor de la variable en el modo bucle cuando se cumple una cierta condición. La forma más razonable es poner la variable fuera del bucle.

La gestión de posiciones es muy necesaria, ya que está relacionada con la lógica de negociación. Generalmente, calculamos los pares de divisas mantenidos mediante la adquisición de cuentas en transacciones al contado. Para simplificar el código, se define directamente una variable de posición virtual global para controlar la lógica de negociación.

Paso 3: Calcule la relación de vacío múltiple actual

depth = exchange.GetDepth()  # Get depth data
asks = depth['Asks']  # Get asks array
bids = depth['Bids']  # Get bids array
asks_vol = 0  # All pending orders at ask price
bids_vol = 0  # All pending orders at bid price
for index, ask in enumerate(asks):  # Iterate through the ask price array
    # Linear calculation of all pending orders at the ask price
    asks_vol = asks_vol + ask['Amount'] * (20 - index)
for index, bid in enumerate(bids):  # Iterate through the bid price array
    # Linear calculation of all pending orders at the bid price
    bids_vol = bids_vol + bid['Amount'] * (20 - index)
bidask_ratio = bids_vol / asks_vol  # Calculate long/short position ratio

Como todos sabemos, la moneda digital es generalmente 20 niveles de datos profundos, por lo que podemos sumar el número de órdenes de posición larga y corta para calcular la relación entre posiciones largas y cortas. Cuando este valor es mayor que 1, significa que los alcistas son mayores que los bajistas, lo que indica que el precio aumentará en un corto período de tiempo en el futuro; cuando este valor es menor que 1, significa que los bajistas son mayores que los alcistas, lo que indica que el precio caerá en un corto período de tiempo en el futuro.

Sin embargo, hay un punto a distinguir. Cuanto más cerca esté la orden pendiente del mercado de apertura, más fuerte será el deseo de subir o berish. Por ejemplo, la orden del primer nivel definitivamente está más dispuesta a subir que la del nivel 20. Por lo tanto, cuando acumulemos las órdenes pendientes, necesitamos dar diferentes pesos a las órdenes de los 20 niveles de manera lineal, lo que será más razonable.

Paso 4: Cálculo lineal de la relación posición larga/corta en un período de tiempo

global vol_ratio_arr, mp  # Introduce global variables
vol_ratio_arr.insert(0, bidask_ratio)  # Put the long/short position ratio into the global variable array
if len(vol_ratio_arr) > 20:  # If the array exceeds the specified length
    vol_ratio_arr.pop()  # Delete the oldest elements
all_ratio = 0  # Temporary variable, ratio of all long and short position pending orders
all_num = 0  # Temporary variables, all linear multipliers
for index, vol_ratio in enumerate(vol_ratio_arr):  # Variable global variable arrays
    num = 20 - index  # Linear multiplier
    all_num = all_num + num  # Linear multiplier accumulation
    all_ratio = all_ratio + vol_ratio * num  # Accumulation of all long and short position pending orders ratio
ratio = all_ratio / all_num  # Linear long and short position pending order ratio

La relación posición larga-corta se puede obtener dividiendo las órdenes pendientes acumuladas largas por las órdenes pendientes acumuladas cortas. Sin embargo, esto es solo un dato de tick. Si solo se usan datos de tick, puede no ser una opción sabia para decidir las transacciones de compra y venta, porque en el mercado en rápido cambio, un dato de tick no es convincente. Por lo tanto, necesitamos recopilar una pieza fija de datos de tick y finalmente calcular un valor razonable a través del cálculo lineal.

Paso 5: Hacer un pedido

last_ask_price = asks[0]['Price']  # Latest buy one price for asks
last_bid_price = bids[0]['Price']  # Latest sell one price for bids
if mp == 0 and ratio > buy_threshold:  # If no currency is held currently, and the ratio is greater than the specified value
    exchange.Buy(last_ask_price, 0.01)  # Buy
    mp = 1  # Set the value of virtual position
if mp == 1 and ratio < sell_threshold:  # If there is currency held currently, and the ratio is less than the specified value
    exchange.Sell(last_bid_price, 0.01)  # Sell
    mp = 0  # Reset the value of virtual position

Debido a que necesitamos especificar un precio al realizar un pedido, podemos usar directamente el último precio de venta una vez al comprar; Cuando se vende, se puede utilizar directamente el último precio de compra una vez.

Conclusión

Lo anterior es el análisis de código de la estrategia de flujo de pedidos pendientes lineal desarrollada sobre la base de la función de reproducción de datos. Si usted es un principiante en el comercio cuantitativo, la función de reproducción de datos puede aprender a operar a costo cero y acortar el tiempo para comprender las transacciones. Por lo general, toma varios años para que un bot real o una transacción simulada logren resultados iniciales. Se necesitan varias semanas para que la función de reproducción de datos logre el mismo efecto.


Relacionados

Más.