Estrategia de negociación de redes dinámicas

El autor:¿ Qué pasa?, Fecha: 2023-12-01 14:41:57
Las etiquetas:

img

Resumen general

La estrategia de negociación de la red dinámica calcula la línea media móvil y sus pistas superior e inferior para establecer dinámicamente el rango de negociación de la red.

Principio de la estrategia

La estrategia primero calcula la línea de promedio móvil del período n definido y las pistas superior e inferior de la línea de promedio móvil. La pista superior es la línea de promedio móvil * (1 + parámetro de entrada std), y la pista inferior es la línea de promedio móvil * (1 - parámetro de entrada std). Esto construye una zona de rango de negociación ajustada dinámicamente.

Luego dentro de la zona de rango, definimos m líneas de red espaciadas uniformemente. Cuando los precios aumentan y rompen una línea de red, se emite una señal larga en esa línea de red; cuando los precios caen y rompen una línea de red, se emite una señal de cierre en la línea de red anterior correspondiente a esa línea de red. A través de esta operación inversa, se pueden obtener ganancias cuando los precios fluctúan.

Específicamente, utilizamos un conjunto de bool order_array para registrar el estado de negociación de cada línea de red. Cuando una línea de red activa una condición larga, el estado correspondiente en order_array se establece en verdadero, lo que indica que la línea de red ya tiene una posición. Cuando los precios caen y rompen la línea de red, el estado de la línea de red anterior en order_array se establece en falso y se emite una señal de cierre.

Análisis de ventajas

La estrategia tiene las siguientes ventajas:

  1. El uso de medias móviles para construir un rango de negociación ajustado dinámicamente puede ajustar el rango basado en la volatilidad del mercado para hacer que la estrategia sea más adaptable al mercado.

  2. El diseño de la red puede tomar automáticamente ganancias y detener pérdidas para evitar el aumento de pérdidas causado por condiciones extremas de mercado.

  3. La cantidad de red y la asignación de capital adoptan el mismo espacio y la misma asignación, lo que puede controlar el tamaño de las posiciones únicas y reducir el riesgo de las posiciones únicas.

  4. Las configuraciones de señales largas y cerradas son razonables para operar a lo largo de la tendencia, y tomar ganancias y detener pérdidas a tiempo.

Análisis de riesgos

La estrategia también tiene algunos riesgos:

  1. Cuando el mercado es débil a largo plazo y no logra romper las líneas de la red, la estrategia caerá en el comercio oscilante sin rumbo, y los largos y cortos alternativos pueden causar erosión de capital en la cuenta.

  2. Los parámetros seleccionados y el número de redes pueden no ser completamente razonables y deben determinarse de acuerdo con el análisis de diferentes variedades de comercio.

  3. La estrategia no tiene en cuenta algunas condiciones extremas del mercado, como las brechas de precios, los aumentos o caídas explosivos a corto plazo, etc. Estas condiciones pueden hacer que la estrategia rompa múltiples redes, lo que resulta en pérdidas más allá del control del riesgo.

Direcciones de optimización

La estrategia también puede optimizarse en los siguientes aspectos:

  1. Los algoritmos de aprendizaje automático pueden introducirse para entrenar modelos para predecir las vías superiores e inferiores de las medias móviles, haciendo que las zonas de negociación sean más inteligentes y dinámicas.

  2. Los parámetros tales como el número de redes, la relación de asignación de capital, el tamaño de la posición, etc., pueden optimizarse de acuerdo con las características de los diferentes objetivos de negociación mediante parámetros adaptativos.

  3. Las órdenes condicionales pueden establecerse para establecer órdenes de stop-loss por adelantado a cierta distancia de las líneas de red para desempeñar el papel de stop-loss y control de pérdidas previas en condiciones extremas de mercado.

  4. Diseñar un mecanismo de manejo de excepciones para condiciones de mercado extremas, como aumentar el tamaño de la posición inicial, omitir las redes intermedias directamente para el stop loss, etc., que pueda hacer frente a situaciones como las brechas de precios.

Resumen de las actividades

La estrategia de negociación de la red dinámica está diseñada razonablemente en su conjunto. Puede construir un sistema automático de toma de ganancias y parada de pérdidas con redes que es adecuado para las variedades de negociación con frecuentes fluctuaciones de precios. Sin embargo, todavía hay ciertos riesgos de mercado en esta estrategia. Los parámetros y situaciones excepcionales deben optimizarse antes de que la estrategia se vuelva más robusta.


/*backtest
start: 2023-10-31 00:00:00
end: 2023-11-30 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('Grid Trading Strategy', overlay=true)

// Input
ma_length = input.int(300, 'Moving Average Length',group = 'Moving Average Conditions', step = 10)
std = input.float(0.03, title='Upper and Lower Grid Deviation', group='Grid Conditions', step = 0.01)
grid = input.int(15, maxval=15, title='Grid Line Quantity', group='Grid Conditions')

// Moving Average
ma = ta.sma(close, ma_length)
upper_bound = ma * (1 + std)
lower_bound = ma * (1 - std)
grid_width = (upper_bound - lower_bound) / (grid - 1)
grid_array = array.new_float(0)
for i = 0 to grid - 1 by 1
    array.push(grid_array, lower_bound + grid_width * i)
var order_array = array.new_bool(grid, false)    
strategy.initial_capital = 10000
// Entry Conditions
for i = 0 to grid - 1 by 1
    if close < array.get(grid_array, i) and not array.get(order_array, i)
        buy_id = i
        array.set(order_array, buy_id, true)
        strategy.entry(id=str.tostring(buy_id), direction=strategy.long, comment='#Long ' + str.tostring(buy_id))
    if close > array.get(grid_array, i) and i!=0
        if array.get(order_array, i-1)
            sell_id = i - 1
            array.set(order_array, sell_id, false)
            strategy.close(id=str.tostring(sell_id), comment='#Close ' + str.tostring(sell_id))

plot(grid > 0 ? array.get(grid_array,0) : na, color = color.yellow, transp = 10)
plot(grid > 1 ? array.get(grid_array,1) : na, color = color.yellow, transp = 10)
plot(grid > 2 ? array.get(grid_array,2) : na, color = color.yellow, transp = 10)
plot(grid > 3 ? array.get(grid_array,3) : na, color = color.yellow, transp = 10)
plot(grid > 4 ? array.get(grid_array,4) : na, color = color.yellow, transp = 10)
plot(grid > 5 ? array.get(grid_array,5) : na, color = color.yellow, transp = 10)
plot(grid > 6 ? array.get(grid_array,6) : na, color = color.yellow, transp = 10)
plot(grid > 7 ? array.get(grid_array,7) : na, color = color.yellow, transp = 10)
plot(grid > 8 ? array.get(grid_array,8) : na, color = color.yellow, transp = 10)
plot(grid > 9 ? array.get(grid_array,9) : na, color = color.yellow, transp = 10)
plot(grid > 10 ? array.get(grid_array,10) : na, color = color.yellow, transp = 10)
plot(grid > 11 ? array.get(grid_array,11) : na, color = color.yellow, transp = 10)
plot(grid > 12 ? array.get(grid_array,12) : na, color = color.yellow, transp = 10)
plot(grid > 13 ? array.get(grid_array,13) : na, color = color.yellow, transp = 10)
plot(grid > 14 ? array.get(grid_array,14) : na, color = color.yellow, transp = 10)

Más.