Estrategia de seguimiento del canal de impulso


Fecha de creación: 2023-12-25 13:14:24 Última modificación: 2023-12-25 13:14:24
Copiar: 0 Número de Visitas: 729
1
Seguir
1621
Seguidores

Estrategia de seguimiento del canal de impulso

Descripción general

Esta estrategia se basa en el diseño de señales de negociación basadas en indicadores de canales dinámicos para generar señales de compra y venta en función de la subida y bajada de los canales de ruptura de precios. La estrategia solo realiza operaciones de varios titulares, y si se produce una señal de venta, la posición queda cerrada.

Principio de estrategia

Esta estrategia utiliza el promedio SMA y la amplitud de fluctuación real de ATR para construir un canal de potencia. Los carriles superiores y inferiores del canal son:

En la vía = SMA + ATR * el factor La línea inferior = SMA - ATR * factor

Cuando el precio sube por la vía, genera una señal de compra; cuando el precio baja por la vía, genera una señal de venta.

Debido a que solo se hace más de una vez, si aparece una señal de venta, se cancela la orden de apertura anterior y la posición se vuelve a la posición vacía.

En concreto, la lógica de la estrategia es la siguiente:

  1. Construir canales de potencia con SMA y ATR
  2. Cuando el precio sube a la raíz, se establece el precio de apertura y se pide más
  3. Cuando el precio baja, se elimina el exceso de pedidos anteriores, lo que hace que la posición quede vacía.

Análisis de las ventajas

La estrategia tiene las siguientes ventajas:

  1. La lógica de la estrategia es simple, clara y fácil de entender.
  2. El indicador de canal de potencia es intuitivo y precisa para juzgar las tendencias del mercado
  3. El riesgo de pérdidas se reduce a la hora de realizar las transacciones.
  4. Las entradas de las condiciones son listadas, lo que facilita la precisión.

Análisis de riesgos

La estrategia también tiene sus riesgos:

  1. Las posiciones cerradas pueden ocurrir con frecuencia cuando los mercados se mueven.
  2. No se aprovechan de las oportunidades de la vacante
  3. No hay un mecanismo de salida, hay que decidir el punto de salida manualmente

Respuesta:

  1. Optimización de los parámetros del canal para reducir la señal de error
  2. Añadir módulos en blanco para hacer transacciones bidireccionales
  3. Se añaden mecanismos de salida como el stop móvil y el trailing stop.

Dirección de optimización

Esta estrategia puede ser optimizada en los siguientes aspectos:

  1. Parámetros de optimización, ajuste del ciclo de la vía, coeficiente de fluctuación, etc.
  2. Aumentar el módulo de cabecera para generar señales de venta basadas en el precio
  3. Adhesión de un mecanismo de detención de pérdidas, combinado con un ATR de detención de pérdidas de cola
  4. Considere agregar más condiciones de filtración para evitar señales falsas
  5. Prueba de la eficacia de los contratos de diferentes variedades

Resumir

Esta estrategia se basa en el indicador de canal de movimiento, captura las tendencias del mercado de manera simple y efectiva. La lógica de la estrategia es clara y fácil de entender, genera señales de negociación mediante el avance y descenso del canal de ruptura de precios. Aunque solo hacer múltiples cabezas y no tener un mecanismo de salida es insuficiente, se puede mejorar mediante la optimización de parámetros, la adición de módulos de cabezas vacías, la adición de paradas, etc. En general, esta estrategia tiene un gran espacio de mejora y es una estrategia cuantitativa que vale la pena estudiar en profundidad y aplicar.

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

//@version=3
strategy("Keltner Channel Strategy", overlay=true)
source = close

useTrueRange = input(true)
length = input(20, minval=1)
mult = input(1.0)

ma = sma(source, length)
range = useTrueRange ? tr : high - low
rangema = sma(range, length)
upper = ma + rangema * mult
lower = ma - rangema * mult

crossUpper = crossover(source, upper)
crossLower = crossunder(source, lower)

bprice = 0.0
bprice := crossUpper ? high+syminfo.mintick : nz(bprice[1])

sprice = 0.0
sprice := crossLower ? low -syminfo.mintick : nz(sprice[1]) 

crossBcond = false
crossBcond := crossUpper ? true 
 : na(crossBcond[1]) ? false : crossBcond[1]

crossScond = false
crossScond := crossLower ? true 
 : na(crossScond[1]) ? false : crossScond[1]

cancelBcond = crossBcond and (source < ma or high >= bprice )
cancelScond = crossScond and (source > ma or low <= sprice )

if (cancelBcond)
    strategy.cancel("KltChLE")

if (crossUpper)
    strategy.entry("KltChLE", strategy.long, stop=bprice, comment="KltChLE")

if (cancelScond)
    strategy.cancel("KltChSE")

if (crossLower)
    strategy.entry("KltChSE", strategy.short, stop=sprice, comment="KltChSE")

//plot(strategy.equity, title="equity", color=red, linewidth=2, style=areabr)