Estrategia de seguimiento de tendencias bidireccional basada en ruptura de rango


Fecha de creación: 2024-02-01 14:22:26 Última modificación: 2024-02-01 14:22:26
Copiar: 2 Número de Visitas: 528
1
Seguir
1617
Seguidores

Estrategia de seguimiento de tendencias bidireccional basada en ruptura de rango

Descripción general

La estrategia genera una señal de negociación calculando el último precio de parada y el último precio de bajada, combinado con el precio actual para determinar si el precio ha entrado en un área determinada. Hacer más cuando el precio supera un cierto porcentaje del precio de parada anterior y hacer menos cuando el precio es inferior a un cierto porcentaje del precio de bajada anterior.

Principio de estrategia

La estrategia primero calcula el precio de la última parada lastbull y el precio de la última parada lastbear. Luego calcula el precio actual close en relación con el cambio de lastbull en proporción ddl, y el cambio de lastbear en proporción dds.

Cuando ddl está por debajo del umbral de señal de acopio configurado signallong produce una señal de acopio up, y cuando dds está por encima del umbral de señal de acopio configurado signalshort produce una señal de acopio dn。

Cuando se reciba una señal de hacer más, se abrirán más posiciones si se necesita hacer más parámetros needlong para verdad, y cuando se reciba una señal de hacer a la baja, se abrirán posiciones vacías si se necesita hacer parámetros needshort para verdad.

La condición de la posición plana es que el aumento de precios después de abrir más posiciones significa más posiciones, y la caída de precios después de abrir posiciones vacías significa posiciones vacías.

Análisis de las ventajas

La estrategia combina la tendencia y el juicio de la franja, tanto puede capturar la tendencia y puede utilizar la ruptura de la franja para generar señales de comercio, hacer más flexibilidad de cambio de posición libre. En comparación con la simple estrategia de seguimiento de la tendencia, que puede capturar rápidamente la nueva dirección de la tendencia después de la ruptura de la franja de composición.

Los parámetros se pueden configurar de forma espaciosa y se pueden ajustar con flexibilidad para hacer más parámetros de vacío, adaptándose a diferentes variedades. Se puede configurar un período de tiempo de vaciado para evitar nodos de tiempo importantes.

Análisis de riesgos

La estrategia no tiene un mecanismo de parada de pérdidas, por lo que no puede controlar eficazmente las pérdidas individuales. Cuando el rango de comercio de variedades es más volátil, el cálculo de la posición es susceptible a la influencia del precio.

Se puede establecer un stop loss para limitar las pérdidas individuales. Se puede establecer una posición más estable de acuerdo con los diferentes tipos de algoritmos de posición.

Dirección de optimización

  1. Aumentar el stop loss móvil para controlar el riesgo de pérdidas individuales
  2. Mejoras en los métodos de cálculo de posiciones, como el uso de ATR, para que el tamaño de las posiciones sea más estable
  3. Aumentar los filtros de apertura de posiciones, por ejemplo, abrir una posición solo cuando se rompa el cruce de oro
  4. Combinación de transacciones de varias variedades, establecimiento de vínculos y reducción del riesgo sistémico

Resumir

La estrategia integra el juicio de la tendencia y la ruptura de la franja para generar señales de comercio, que pueden capturar nuevas direcciones de tendencia y aprovechar las características de la oscilación de la franja. La configuración de los parámetros es flexible y el espacio se puede ajustar para adaptarse a diferentes variedades. La estrategia tiene un gran espacio de optimización y se puede mejorar desde múltiples ángulos para adaptarse a un entorno de mercado más complejo.

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

//Noro
//2019

//@version=4
strategy(title = "Noro's DDL Strategy", shorttitle = "DDL str", overlay = false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 3)

//Settings
needlong = input(true, title = "Long")
needshort = input(true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot")
signalshort = input(3.0, title = "Short, %")
signallong = input(-3.0, title = "Long, %")
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")

//Levels
bull = close > close[1] ? 1 : 0
bear = close < close[1] ? 1 : 0
lastbull = 0.0
lastbull := bull ? close : lastbull[1]
lastbear = 0.0
lastbear := bear ? close : lastbear[1]

//Signals
ddl = ((close / lastbull) - 1) * 100
up = ddl < signallong
dds = ((close / lastbear) - 1) * 100
dn = dds > signalshort

//Lines
plot(dds, style = plot.style_area, color = color.red, transp = 0)
plot(ddl, style = plot.style_area, color = color.lime, transp = 0)
plot(0, color = color.black, linewidth = 2, transp = 0)

//Background
col = (up and needlong) or (dn and needshort) ? color.yellow : na
bgcolor(col, transp = 20)

//Orders
lot = 0.0
lot := strategy.position_size == 0 ? strategy.equity / close * capital / 100 : lot[1]
truetime = true
if up
    strategy.entry("Long", strategy.long, lot, when = needlong and truetime)
if dn
    strategy.entry("Short", strategy.short, lot, when = needshort and truetime)
if strategy.position_size > 0 and close > open
    strategy.entry("Close", strategy.short, 0)
if strategy.position_size < 0 and close < open
    strategy.entry("Close", strategy.long, 0)