Basado en una estrategia de tendencia envolvente dinámica


Fecha de creación: 2024-02-29 11:24:18 Última modificación: 2024-02-29 11:24:18
Copiar: 0 Número de Visitas: 561
1
Seguir
1617
Seguidores

Basado en una estrategia de tendencia envolvente dinámica

Descripción general

Una estrategia de tendencia de absorción dinámica es una estrategia de comercio en la dirección de la tendencia en función de la forma de absorción. La estrategia utiliza el rango de fluctuación real promedio (ATR) para identificar la volatilidad del mercado, el indicador de tendencia súper para determinar la dirección de la tendencia del mercado, y realiza operaciones de más de la brecha cuando coincide con la forma de absorción y coincide con la dirección de la tendencia.

Principio de estrategia

  1. Calcula el ATR, que se usa para medir la volatilidad del mercado.
  2. Cálculo de indicadores de tendencias súper para determinar la dirección de las principales tendencias del mercado.
  3. Definición de las condiciones de mercado de capitales múltiples y de mercado de capitales vacíos.
  4. Identificar las formas de avalancha múltiple (en una tendencia ascendente) y avalancha en blanco (en una tendencia descendente) en la dirección de la tendencia.
  5. Los puntos de parada y de pérdida se calculan de acuerdo con la forma en que se consume.
  6. Cuando se identifica una forma de engullir y coincide con la dirección de la tendencia, se realizan operaciones de más o menos.
  7. Cuando el precio toca el punto de parada o el punto de parada, se realiza una posición cerrada.
  8. En el gráfico, identifique las formas de ingestión.

Análisis de las ventajas estratégicas

La estrategia tiene las siguientes ventajas:

  1. La combinación de las formas de absorción y la identificación de tendencias de las señales de negociación mejora la calidad de la señal.
  2. La capacidad de identificar los puntos de inflexión de las tendencias y de actuar de forma selectiva.
  3. Haga más señales de vacío más claras y fáciles de dominar en el momento de la operación.
  4. La estrategia de Stop Loss Engulf sigue la tendencia y controla el riesgo.
  5. El marco de código es claro y fácil de optimizar y mejorar.

Análisis de riesgos estratégicos

La estrategia también tiene sus riesgos:

  1. La forma de absorción puede ser un falso avance, y la identificación errónea puede causar pérdidas.
  2. Es difícil entender los parámetros de la forma de la deglución, como el tamaño del volumen, la duración, etc.
  3. El mecanismo de determinación de tendencias es imperfecto y puede conducir a operaciones que no se ajusten a las tendencias.
  4. La configuración de los puntos de parada y de pérdida depende de la experiencia y puede ser demasiado subjetiva.
  5. El efecto depende de la optimización de los parámetros, que requiere una gran cantidad de verificación de datos históricos.

Los riesgos mencionados pueden ser controlados y mejorados mediante:

  1. En combinación con otros indicadores técnicos, se filtran las señales falsas de ruptura.
  2. Utiliza métodos de cálculo de parámetros más robustos, como el ATR adaptado.
  3. Aumentar la fiabilidad de los mecanismos de determinación de tendencias, como la introducción de modelos de aprendizaje automático.
  4. El uso de algoritmos genéticos para buscar la combinación óptima de parámetros.
  5. En una ventana de tiempo más larga, para asegurar la estabilidad de los parámetros.

Dirección de optimización de la estrategia

La estrategia tiene mucho espacio para optimización:

  1. Se pueden introducir modelos de aprendizaje automático para mejorar la precisión de la determinación de tendencias.
  2. La combinación de nuevos métodos de identificación de formas mejora la identificación de las formas de devolución.
  3. Optimice el punto de parada y pérdida utilizando la estrategia de parada y pérdida más reciente.
  4. Se pueden desarrollar estrategias de avalancha basadas en datos de alta frecuencia más adecuadas para operaciones de línea corta.
  5. Se puede aplicar a diferentes variedades para ajustar y optimizar los parámetros.

Resumir

En general, la estrategia de tendencias de absorción dinámica, combinada con un juicio de tendencias preciso y una forma de absorción significativa, forma una estrategia de negociación razonable. En el proceso de aplicación, la estabilidad y la rentabilidad de la estrategia se pueden mejorar aún más a través de la optimización de los parámetros, el control de riesgos y la introducción de nuevas tecnologías. El marco de la estrategia es claro, tiene una gran universalidad y merece un estudio y una aplicación más profundos.

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/
// © Malikdrajat


//@version=4
strategy("Engulfing with Trend", overlay=true)

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)
showsignals = input(title="Show Buy/Sell Signals ?", type=input.bool, defval=true)
highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true)

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)
buySignal = trend == 1 and trend[1] == -1
plotshape(buySignal ? up : na, title="UpTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.green, transp=0)
plotshape(buySignal and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0)
dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red)
sellSignal = trend == -1 and trend[1] == 1
plotshape(sellSignal ? dn : na, title="DownTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.red, transp=0)
plotshape(sellSignal and showsignals ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0)
mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0)
longFillColor = highlighting ? (trend == 1 ? color.green : color.white) : color.white
shortFillColor = highlighting ? (trend == -1 ? color.red : color.white) : color.white
fill(mPlot, upPlot, title="UpTrend Highligter", color=longFillColor)
fill(mPlot, dnPlot, title="DownTrend Highligter", color=shortFillColor)
alertcondition(buySignal, title="SuperTrend Buy", message="SuperTrend Buy!")
alertcondition(sellSignal, title="SuperTrend Sell", message="SuperTrend Sell!")
changeCond = trend != trend[1]
alertcondition(changeCond, title="SuperTrend Direction Change", message="SuperTrend has changed direction!")

// Define Downtrend and Uptrend conditions
downtrend = trend == -1
uptrend = trend == 1


// Engulfing 
boringThreshold = input(25, title="Boring Candle Threshold (%)", minval=1, maxval=100, step=1)
engulfingThreshold = input(50, title="Engulfing Candle Threshold (%)", minval=1, maxval=100, step=1)
stopLevel = input(200, title="Stop Level (Pips)", minval=1)


// Boring Candle (Inside Bar) and Engulfing Candlestick Conditions
isBoringCandle = abs(open[1] - close[1]) * 100 / abs(high[1] - low[1]) <= boringThreshold
isEngulfingCandle = abs(open - close) * 100 / abs(high - low) <= engulfingThreshold

// Bullish and Bearish Engulfing Conditions
bullEngulfing = uptrend and close[1] < open[1] and close > open[1] and not isBoringCandle and not isEngulfingCandle
bearEngulfing = downtrend and close[1] > open[1] and close < open[1] and not isBoringCandle and not isEngulfingCandle

// Stop Loss, Take Profit, and Entry Price Calculation
bullStop = close + (stopLevel * syminfo.mintick)
bearStop = close - (stopLevel * syminfo.mintick)
bullSL = low 
bearSL = high
bullTP = bullStop + (bullStop - low)
bearTP = bearStop - (high - bearStop)

// Entry Conditions
enterLong = bullEngulfing and uptrend
enterShort = bearEngulfing and downtrend

// Exit Conditions
exitLong = crossover(close, bullTP) or crossover(close, bullSL)
exitShort = crossover(close, bearTP) or crossover(close, bearSL)

// Check if exit conditions are met by the next candle
exitLongNextCandle = exitLong and (crossover(close[1], bullTP[1]) or crossover(close[1], bullSL[1]))
exitShortNextCandle = exitShort and (crossover(close[1], bearTP[1]) or crossover(close[1], bearSL[1]))

// Strategy Execution
strategy.entry("Buy", strategy.long, when=enterLong )
strategy.entry("Sell", strategy.short, when=enterShort )

// Exit Conditions for Long (Buy) Positions
if (bullEngulfing and not na(bullTP) and not na(bullSL))
    strategy.exit("Exit Long", from_entry="Buy", stop=bullSL, limit=bullTP)

// Exit Conditions for Short (Sell) Positions
if (bearEngulfing and not na(bearTP) and not na(bearSL))
    strategy.exit("Exit Short", from_entry="Sell", stop=bearSL, limit=bearTP)

// Plot Shapes and Labels
plotshape(bullEngulfing, style=shape.triangleup, location=location.abovebar, color=color.green)
plotshape(bearEngulfing, style=shape.triangledown, location=location.abovebar, color=color.red)

// Determine OP, SL, and TP
plot(bullEngulfing ? bullStop : na, title="Bullish Engulfing stop", color=color.red, linewidth=3, style=plot.style_linebr)
plot(bearEngulfing ? bearStop : na, title="Bearish Engulfing stop", color=color.red, linewidth=3, style=plot.style_linebr)
plot(bullEngulfing ? bullSL : na, title="Bullish Engulfing SL", color=color.red, linewidth=3, style=plot.style_linebr)
plot(bearEngulfing ? bearSL : na, title="Bearish Engulfing SL", color=color.red, linewidth=3, style=plot.style_linebr)
plot(bullEngulfing ? bullTP : na, title="Bullish Engulfing TP", color=color.green, linewidth=3, style=plot.style_linebr)
plot(bearEngulfing ? bearTP : na, title="Bearish Engulfing TP", color=color.green, linewidth=3, style=plot.style_linebr)