Estrategia de ruptura de rango dinámico


Fecha de creación: 2023-11-21 15:03:19 Última modificación: 2023-12-01 15:00:31
Copiar: 0 Número de Visitas: 691
1
Seguir
1617
Seguidores

Estrategia de ruptura de rango dinámico

Descripción general

Esta estrategia diseña una estrategia de breakout dinámica basada en el indicador de la cinta de Brin. Combina los filtros de entidades de la línea K y los filtros de color para buscar oportunidades de entrada de breakout cerca de la vía inferior de la cinta de Brin. La salida se basa en filtros de entidades.

Principio de estrategia

Cálculo del indicador

En primer lugar, la línea de base y la línea descendente de la franja de Brin, calculada en función de los puntos bajos:

src = low 
basis = sma(src, length)
dev = mult * stdev(src, length) 
lower = basis - dev

donde src es el punto bajo, length es el ciclo de cálculo, base es la línea media, dev es la desviación estándar, y lower es la baja.

En general, mult se establece en 2, lo que significa que la vía inferior tiene una diferencia estándar.

Condiciones de filtrado

La estrategia incluye dos condiciones de filtrado:

Filtrado de entidad de línea K Usando el tamaño de la entidad nbody y su promedio abody, sólo se produce una señal de transacción cuando nbody es mayor que la mitad de abody.

El color del filtro Cuando la línea K se cierra (closed > open) no se hace más que una sola vez. Esto es para evitar una falsa ruptura en la cabeza de hbox.

Señales de comercio

Se produce una señal múltiple cuando se cumplen las siguientes condiciones:

low < lower  // 价格突破下轨
close < open or usecol == false // 色彩过滤
nbody > abody / 2 or usebod == false // 实体过滤

Cuando el tamaño de la entidad es de nuevo mayor a la mitad de la media, se produce un equilibrio:

close > open and nbody > abody / 2

Administración de posiciones

Las estrategias para calcular automáticamente el número de transacciones y lograr un aumento en el índice:

lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 : lot[1]  

Control de riesgos

Condiciones de año, mes y día de ingreso, restricción de operaciones dentro de la fecha especificada:

when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))

Ventajas estratégicas

Zona de comercio dinámico

El tren de descenso de Brin es una zona de soporte dinámica que capta oportunidades de rebote después de una tendencia del mercado.

Mecanismo de doble filtración

La combinación de la entidad de la línea K y el juicio del color, filtra eficazmente la brecha falsa.

Administración automática de posiciones

Las posiciones crecen al 100% en el índice y se gestiona automáticamente el riesgo.

Especificar el rango de tiempo de la transacción

Establecer un rango de fechas para reducir el riesgo de fluctuaciones en el mercado en un momento determinado.

Riesgo estratégico

El tiempo de vacío es demasiado largo.

Cuando el mercado está en una bull market prolongada, el tren central y el tren superior de Brin se mueven rápidamente, lo que hace que el tiempo de vaciado sea demasiado largo.

Cómo solucionarlo

Se puede combinar con los indicadores de tendencia, suspender la estrategia cuando la línea media-larga es un mercado alcista, para evitar una posición vacía demasiado larga.

El fracaso de la brecha

Una vez que el tren se rompe, es posible que se realice un desvío y un nuevo intento de desvío.

Cómo solucionarlo

Se puede agregar una línea de parada de pérdidas, una parada proporcional debajo del soporte, o se puede agregar una lógica de juicio de reintento fallido, una parada rápida.

Optimización de la estrategia

Aumento de la lógica de stop loss

De acuerdo con los datos de retrospectiva, establezca una posición de parada por debajo del soporte razonable.

Optimización de los parámetros de las condiciones de filtrado

Ajustar el ciclo de abody de los filtros de entidad, el uso de filtros de COLOR, etc.; encontrar la combinación óptima de parámetros.

Junto con el juicio de tendencias

Aumentar el juicio de tendencia de la línea media y larga, detener la operación de la estrategia cuando se juzgue que es un mercado alcista. Reducir el tiempo de posición vacía.

Resumir

Esta estrategia, combinada con el soporte de Brin, diseña una lógica estratégica de filtro de entidades, filtro de colores y transacciones de ruptura para buscar oportunidades de rebote de alta probabilidad. En la práctica, se pueden optimizar continuamente los parámetros según los resultados de la retroalimentación y agregar módulos de juicio de stop loss y tendencia para controlar el riesgo y obtener un mejor rendimiento.

Código Fuente de la Estrategia
/*backtest
start: 2022-11-14 00:00:00
end: 2023-11-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "Noro's Wizard Strategy v1.0", shorttitle = "Wizard str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 10)

//Settings
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
length = input(25, defval = 25, minval = 1, maxval = 200, title = "BB Period")
usebod = input(false, defval = false, title = "Use Body-Filter")
usecol = input(false, defval = false, title = "Use Color-Filter")
showar = input(false, defval = false, title = "Show Arrows")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//Bollinger
src = low
mult = 2
basis = sma(src, length)
dev = mult * stdev(src, length)
lower = basis - dev
plot(lower, color = lime, linewidth = 3, title="Bottom Line")

//Body Filter
nbody = abs(close - open)
abody = sma(nbody, 10)
body = nbody > abody / 2 or usebod == false

//Signals
up1 = low < lower and (close < open or usecol == false) and body
exit = close > open and nbody > abody / 2

//Arrows
needar = up1 and showar
plotarrow(needar ? 1 : na)

//Trading
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 : lot[1]

if up1
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("Long", strategy.long, lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if time > timestamp(toyear, tomonth, today, 23, 59) or exit
    strategy.close_all()