Estrategia de comercio dinámico en red


Fecha de creación: 2023-12-01 14:41:57 Última modificación: 2023-12-01 14:41:57
Copiar: 0 Número de Visitas: 1253
1
Seguir
1619
Seguidores

Estrategia de comercio dinámico en red

Descripción general

La estrategia de comercio de la rejilla dinámica establece la zona de comercio de la rejilla dinámicamente mediante el cálculo de las medias móviles y sus altibajos. Cuando el precio rompe la zona de la rejilla, emite una señal de comercio de acuerdo con la línea de la rejilla establecida a intervalos fijos, para obtener ganancias.

Principio de estrategia

La estrategia primero calcula el promedio móvil de un período definido de n, y el promedio móvil se envía hacia abajo.(1 + el parámetro de entrada std), la vía inferior es la media móvil(1 - el parámetro de entrada std) ❚ Así se puede construir un intervalo de transacciones de ajuste dinámico ❚

Luego, dentro de la banda de intervalo, definimos una línea de la red con un intervalo de m líneas. Cuando el precio sube y rompe una línea de la red, se emite una señal múltiple en esa línea de la red; cuando el precio baja y rompe una línea de la red, se emite una señal de posición cerrada en la línea de la red superior correspondiente a esa línea de la red.

En concreto, usamos una matriz booleana de orden_array para registrar el estado de cada línea de la red. Cuando una de las líneas de la red se activa con múltiples condiciones, el estado correspondiente en la orden_array se establece como verdadero, lo que indica que la línea de la red ya tiene una posición.

Análisis de las ventajas

La estrategia tiene las siguientes ventajas:

  1. Los rangos de negociación que se construyen con el uso de medias móviles de ajuste dinámico se pueden ajustar en función de la volatilidad del mercado, lo que hace que la estrategia sea más adaptada al mercado.

  2. El diseño de la rejilla permite que se realice automáticamente el stop loss, evitando la expansión de las pérdidas causadas por situaciones extremas.

  3. El número de cuadrados y la asignación de fondos se distribuyen a intervalos y cantidades iguales, lo que permite controlar el tamaño de las posiciones individuales y reducir el riesgo de las posiciones individuales.

  4. La configuración de las señales de la posición más pacífica es razonable, se puede negociar en curso y detener el deterioro a tiempo.

Análisis de riesgos

La estrategia también tiene sus riesgos:

  1. Cuando el mercado se encuentra en una situación de debilidad prolongada y no puede romper la línea de la red, la estrategia se verá envuelta en una operación de convulsiones sin dirección, y el intercambio en blanco puede provocar la pérdida de fondos de la cuenta.

  2. Los parámetros std y la cantidad de grillas seleccionadas pueden no ser completamente razonables y deben determinarse de acuerdo con el análisis de las diferentes variedades de transacciones. Si los parámetros se establecen incorrectamente, esto provocará que el intervalo de transacción y la grilla sean demasiado grandes o demasiado pequeños, lo que afectará la eficacia de la estrategia.

  3. La estrategia no tiene en cuenta algunas situaciones extremas, como saltos de precios, subidas o bajadas de explosiones de líneas cortas. Estas situaciones pueden provocar que la estrategia rompa varias redes y cause pérdidas que exceden el control del riesgo.

Dirección de optimización

La estrategia también puede ser optimizada en los siguientes aspectos:

  1. Se pueden introducir algoritmos de aprendizaje automático para entrenar modelos que predicen las subidas y bajadas de las medias móviles, lo que hace que las zonas de negociación sean más inteligentes y dinámicas.

  2. Se pueden utilizar parámetros de adaptación para optimizar el número de grillas, la proporción de distribución de fondos, el tamaño de la posición, etc., según las características de los diferentes indicadores de negociación.

  3. Se puede configurar una orden condicional, y se puede configurar una orden de parada de reserva en la línea de la red a cierta distancia, que puede actuar como una parada de pérdidas anticipada y controlar las pérdidas en situaciones extremas.

  4. El diseño de mecanismos de manejo de excepciones para situaciones extremas, como aumentar la posición de apertura inicial, saltar el cierre directo de la red intermedia, etc., puede responder a situaciones excepcionales como el salto de precios.

Resumir

El diseño general de la estrategia de comercio de la red dinámica es razonable, se puede usar la red para construir un sistema automático de stop-loss, adecuado para las variedades de operaciones con fluctuaciones de precios más frecuentes. Sin embargo, la estrategia también tiene cierto riesgo de mercado, que requiere un tratamiento optimizado de los parámetros y las excepciones para que la estrategia sea más estable.

Código Fuente de la Estrategia
/*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)