Basado en la estrategia de súper tendencia


Fecha de creación: 2024-02-02 11:11:48 Última modificación: 2024-02-02 11:11:48
Copiar: 0 Número de Visitas: 782
1
Seguir
1617
Seguidores

Basado en la estrategia de súper tendencia

Descripción general

Esta estrategia utiliza un indicador de tendencia para determinar la tendencia de los precios y entrar en posiciones de venta o ventaja cuando la tendencia cambia. La estrategia permite ajustar el ciclo ATR y el múltiplo ATR para optimizar los parámetros. Además, la estrategia también ofrece la opción de cambiar la forma de calcular el ATR, lo que produce un resultado ligeramente diferente.

La estrategia también tiene la función de establecer un rango de fecha de retracción y de negociar solo en ciertos períodos de tiempo. Esto es especialmente útil para las acciones de comercio diurno. Cuando se activa la opción de rango de tiempo, se puede optar por entrar en la posición actual inmediatamente al comienzo del período o esperar a que la tendencia cambie para entrar en la primera orden.

La estrategia también puede establecer paros y paradas basadas en porcentajes. En la mayoría de los casos, no se requiere un parón adicional debido a los paros basados en el ATR que ofrece la propia tendencia súper. Por lo tanto, solo se puede activar paros para optimizar el mecanismo de salida.

Finalmente, la estrategia tiene una función de información de alerta de entrada y salida de transacciones personalizadas, que se puede usar en el servicio de operaciones automáticas.

Principio de estrategia

Las estrategias de tendencia hiper se basan en los siguientes principios principales:

  1. Cálculo de los valores ATR: se puede elegir el cálculo con SMA o con el indicador ATR incorporado. La fórmula de la versión SMA es:
   atr2 = sma(tr, Periods) 
  1. Calculación de subida y bajada: subida es el precio menos ATR multiplicado por ATR multiplicado por ATR, subida es el precio más ATR multiplicado por ATR multiplicado por ATR.
   up = close - (Multiplier * atr)
   dn = close + (Multiplier * atr)
  1. Para determinar la relación entre el precio y la trayectoria ascendente y descendente, se calcula la dirección de la tendencia. Cuando el precio sube por la trayectoria descendente, la tendencia es alcista, y cuando el precio baja por la trayectoria descendente, la tendencia es vacía.
   trend := trend == -1 and close > dn ? 1 : trend == 1 and close < up ? -1 : trend 
  1. La generación de señales de negociación en la conversión de la tendencia, como la generación de señales de venta en la conversión de la cabeza a la cabeza:
   sellSignal = trend == -1 and trend[1] == 1
  1. Se filtran las entradas según las señales de negociación y otras condiciones.

  2. Establezca paradas y paradas para bloquear ganancias o evitar riesgos.

Estos son los puntos clave de la estrategia de tendencia de la superación, combinada con la optimización de los parámetros, para obtener mejores resultados comerciales.

Ventajas estratégicas

La estrategia ultratrend tiene las siguientes ventajas:

  1. El indicador de hipertrend es una herramienta de seguimiento de stop loss muy utilizada, ya que es eficaz para determinar la tendencia de los precios.

  2. Los parámetros de ATR son ajustables y se pueden optimizar para obtener la mejor combinación de parámetros para diferentes variedades. El método de cálculo de SMA también ofrece otra opción.

  3. Se puede configurar el rango de tiempo para la retracción y la negociación en disco duro para adaptarse a las necesidades de los diferentes períodos de negociación.

  4. Ofrece la opción de acceder a la primera lista de inmediato o esperar la señal, que se puede elegir según las características de la variedad.

  5. La configuración de stop loss incorporada puede mejorar la resistencia al riesgo de la estrategia o bloquear más ganancias.

  6. Los avisos personalizados de transacciones se pueden integrar en sistemas de transacciones automáticos o robóticos, lo que permite una vigilancia no tripulada.

Riesgo estratégico

La estrategia también tiene sus riesgos:

  1. Los indicadores de tendencia extrema pueden generar más señales falsas y necesitan ser filtrados en combinación con otros indicadores.

  2. Los parámetros incorrectos de ATR pueden ocasionar transacciones frecuentes o tendencias perdidas. La optimización de los parámetros es necesaria para obtener el equilibrio óptimo.

  3. El punto de parada demasiado cerca puede ser demasiado pronto para salir de una posición ventajosa, y el punto de parada demasiado lejos puede no ser suficiente para bloquear ganancias.

  4. Si el rango de tiempo es incorrecto, se puede perder la hora principal de la operación o no se puede ocupar la garantía.

Para los riesgos anteriores, se puede abordar mediante la adaptación adecuada de los parámetros o la adición de condiciones de filtrado, lo que aumenta la estabilidad de la estrategia.

Dirección de optimización de la estrategia

Esta estrategia puede ser mejorada en los siguientes aspectos:

  1. Prueba diferentes parámetros de ATR para encontrar el punto de equilibrio adecuado. En general, entre 10 y 20 es ideal.

  2. Prueba diferentes parámetros de multiplicador de ATR, generalmente 2-5 es el más adecuado, se puede ajustar gradualmente para encontrar el valor óptimo.

  3. Trate de agregar otros indicadores para determinar el aire de dirección múltiple, como MACD, KD, etc., para filtrar las señales falsas.

  4. Optimización de los parámetros de parada de pérdidas para encontrar la combinación óptima de parámetros. Se puede introducir una parada de parada dinámica.

  5. Prueba diferentes configuraciones de rango de tiempo de negociación. Las variedades de línea corta diaria son adecuadas para períodos de tiempo más cortos.

  6. Trate de elegir automáticamente los contratos y seguir los indicadores de alta liquidez o fluctuación.

Resumir

Esta estrategia de hipertrend es una estrategia de seguimiento de tendencias más común y práctica en general. Tiene características de un seguimiento de tendencias de parámetros ajustables y eficientes, y también hay ciertos riesgos que deben evitarse. Mediante la optimización de parámetros y la adición de CONDITIONS, la estrategia se puede optimizar como un sistema de comercio cuantitativo confiable, para obtener un Alfa estable.

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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © REV0LUTI0N

//@version=4

// Strategy
strategy("Supertrend Strategy", overlay=true, initial_capital = 10000, default_qty_value = 10000, default_qty_type = strategy.cash)
Periods = input(title="ATR Period", type=input.integer, defval=10)
src = input(hl2, title="Source")
Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0)
changeATR= input(title="Change ATR Calculation Method ?", type=input.bool, defval=true)
enableentry = input(true, title="Enter First Trade ASAP")
waitentry = input(false, title="Wait To Enter First Trade")

atr2 = sma(tr, Periods)
atr= changeATR ? atr(Periods) : atr2
up=src-(Multiplier*atr)
up1 = nz(up[1],up)
up := close[1] > up1 ? max(up,up1) : up
dn=src+(Multiplier*atr)
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? min(dn, dn1) : dn
trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend

upPlot = plot(trend == 1 ? up : na, title="Up Trend", style=plot.style_linebr, linewidth=2, color=color.green)
Long = (trend == 1 ? up : na)
buySignal = trend == 1 and trend[1] == -1

dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red)
Short = (trend == 1 ? na : dn)
sellSignal = trend == -1 and trend[1] == 1

// Strategy Backtesting
startDate  = input(timestamp("2021-01-01T00:00:00"), type = input.time, title='Backtesting Start Date')
finishDate = input(timestamp("2021-12-31T00:00:00"), type = input.time, title='Backtesting End Date')

time_cond  = true

//Time Restriction Settings
startendtime = input("", title='Time Frame To Enter Trades')
enableclose = input(false, title='Enable Close Trade At End Of Time Frame')
timetobuy = (time(timeframe.period, startendtime))
timetoclose = na(time(timeframe.period, startendtime))

// Stop Loss & Take Profit % Based
enablesl = input(false, title='Enable Stop Loss')
enabletp = input(false, title='Enable Take Profit')
stopTick = input(5.0, title='Stop Loss %', type=input.float, step=0.1) / 100
takeTick = input(10.0, title='Take Profit %', type=input.float, step=0.1) / 100

longStop = strategy.position_avg_price * (1 - stopTick)
shortStop = strategy.position_avg_price * (1 + stopTick)
shortTake = strategy.position_avg_price * (1 - takeTick)
longTake = strategy.position_avg_price * (1 + takeTick)

plot(strategy.position_size > 0 and enablesl ? longStop : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Long Fixed SL")
plot(strategy.position_size < 0 and enablesl ? shortStop : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Short Fixed SL")
plot(strategy.position_size > 0 and enabletp ? longTake : na, style=plot.style_linebr, color=color.green, linewidth=1, title="Long Take Profit")
plot(strategy.position_size < 0 and enabletp ? shortTake : na, style=plot.style_linebr, color=color.green, linewidth=1, title="Short Take Profit")

// Alert messages
message_enterlong  = input("", title="Long Entry message")
message_entershort = input("", title="Short Entry message")
message_closelong = input("", title="Close Long message")
message_closeshort = input("", title="Close Short message")

// Strategy Execution
if Long and time_cond and timetobuy and enableentry
    strategy.entry("Long", strategy.long, alert_message = message_enterlong)
    
if Short and time_cond and timetobuy and enableentry
    strategy.entry("Short", strategy.short, alert_message = message_entershort)
    
if buySignal and time_cond and timetobuy and waitentry
    strategy.entry("Long", strategy.long, alert_message = message_enterlong)
    
if sellSignal and time_cond and timetobuy and waitentry
    strategy.entry("Short", strategy.short, alert_message = message_entershort)
    
if strategy.position_size > 0 and timetoclose and enableclose
    strategy.close_all(alert_message = message_closelong)
if strategy.position_size < 0 and timetoclose and enableclose
    strategy.close_all(alert_message = message_closeshort)
    
if strategy.position_size > 0 and enablesl and time_cond
    strategy.exit(id="Close Long", stop=longStop, limit=longTake, alert_message = message_closelong)
if strategy.position_size < 0 and enablesl and time_cond
    strategy.exit(id="Close Short", stop=shortStop, limit=shortTake, alert_message = message_closeshort)
    
if strategy.position_size > 0 and enabletp and time_cond
    strategy.exit(id="Close Long", stop=longStop, limit=longTake, alert_message = message_closelong)
if strategy.position_size < 0 and enabletp and time_cond
    strategy.exit(id="Close Short", stop=shortStop, limit=shortTake, alert_message = message_closeshort)