
La estrategia de ruptura de la dinámica de adaptación dinámica es una estrategia de negociación de alta cuantía que utiliza el indicador de la dinámica de adaptación y la identificación de la forma de la pirámide. La estrategia se adapta a la fluctuación del mercado mediante el ajuste dinámico del ciclo de la dinámica y combina condiciones de filtración múltiples para identificar oportunidades de ruptura de tendencia de alta probabilidad. El núcleo de la estrategia consiste en capturar los cambios en la dinámica del mercado, mientras se utiliza la forma de absorción como señal de entrada para mejorar la precisión y la rentabilidad de la negociación.
Ajuste del ciclo dinámico:
Calculación de la potencia y suavizado:
La tendencia es:
La identificación de las formas de la tragedia:
Se generan señales de transacción:
Administración de operaciones:
Es muy adaptable:
Mecanismo de confirmación múltiple:
La hora exacta de la entrada:
La gestión de riesgos:
La flexibilidad y la personalización:
El riesgo de una falsa brecha:
El problema del retraso:
Las limitaciones de los mecanismos fijos de salida:
La excesiva dependencia de un único marco de tiempo:
Sensibilidad de los parámetros:
La integración del marco temporal múltiple:
La pérdida de velocidad de frenado:
Análisis del perfil de volumen:
Optimización del aprendizaje automático:
Los indicadores emocionales se han integrado:
Análisis de relevancia:
La estrategia de ruptura de dinámica auto-adaptativa es un sistema de negociación avanzado que combina métodos de análisis técnico y cuantitativo. Al ajustar dinámicamente el ciclo de la dinámica, identificar las formas de absorción y combinar múltiples condiciones de filtración, la estrategia puede capturar oportunidades de ruptura de tendencia de alta probabilidad de forma adaptativa en diferentes entornos de mercado. Aunque existen algunos riesgos inherentes, como falsas rupturas y sensibilidad a los parámetros, la estrategia tiene el potencial de mejorar aún más su estabilidad y rentabilidad a través de direcciones de optimización propuestas, como análisis de marcos de tiempo múltiples, gestión de riesgos dinámicos y aplicaciones de aprendizaje automático.
/*backtest
start: 2024-06-28 00:00:00
end: 2024-07-28 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © ironperol
//@version=5
strategy("Adaptive Momentum Strategy", overlay=true, margin_long=100, margin_short=100)
// Input parameters for customization
src = input.source(close, title="Source")
min_length = input.int(10, minval=1, title="Minimum Length")
max_length = input.int(40, minval=1, title="Maximum Length")
ema_smoothing = input.bool(true, title="EMA Smoothing")
ema_length = input.int(7, title="EMA Length")
percent = input.float(2, title="Percent of Change", minval=0, maxval=100) / 100.0
// Separate body size filters for current and previous candles
min_body_size_current = input.float(0.5, title="Minimum Body Size for Current Candle (as a fraction of previous body size)", minval=0)
min_body_size_previous = input.float(0.5, title="Minimum Body Size for Previous Candle (as a fraction of average body size of last 5 candles)", minval=0)
close_bars = input.int(3, title="Number of Bars to Hold Position", minval=1) // User-defined input for holding period
//######################## Calculations ##########################
// Initialize dynamic length variable
startingLen = (min_length + max_length) / 2.0
var float dynamicLen = na
if na(dynamicLen)
dynamicLen := startingLen
high_Volatility = ta.atr(7) > ta.atr(14)
if high_Volatility
dynamicLen := math.max(min_length, dynamicLen * (1 - percent))
else
dynamicLen := math.min(max_length, dynamicLen * (1 + percent))
momentum = ta.mom(src, int(dynamicLen))
value = ema_smoothing ? ta.ema(momentum, ema_length) : momentum
// Calculate slope as the difference between current and previous value
slope = value - value[1]
// Calculate body sizes
currentBodySize = math.abs(close - open)
previousBodySize = math.abs(close[1] - open[1])
// Calculate average body size of the last 5 candles
avgBodySizeLast5 = math.avg(math.abs(close[1] - open[1]), math.abs(close[2] - open[2]), math.abs(close[3] - open[3]), math.abs(close[4] - open[4]), math.abs(close[5] - open[5]))
//######################## Long Signal Condition ##########################
// Function to determine if the candle is a bullish engulfing
isBullishEngulfing() =>
currentOpen = open
currentClose = close
previousOpen = open[1]
previousClose = close[1]
isBullish = currentClose >= currentOpen
wasBearish = previousClose <= previousOpen
engulfing = currentOpen <= previousClose and currentClose >= previousOpen
bodySizeCheckCurrent = currentBodySize >= min_body_size_current * previousBodySize
bodySizeCheckPrevious = previousBodySize >= min_body_size_previous * avgBodySizeLast5
isBullish and wasBearish and engulfing and bodySizeCheckCurrent and bodySizeCheckPrevious
// Long signal condition
longCondition = isBullishEngulfing() and slope > 0
// Plotting long signals on chart
plotshape(series=longCondition, location=location.belowbar, color=color.green, style=shape.labelup, text="Long", title="Long Condition")
// Alerts for long condition
if (longCondition)
alert("Long condition met", alert.freq_once_per_bar_close)
//######################## Short Signal Condition ##########################
// Function to determine if the candle is a bearish engulfing
isBearishEngulfing() =>
currentOpen = open
currentClose = close
previousOpen = open[1]
previousClose = close[1]
isBearish = currentClose <= currentOpen
wasBullish = previousClose >= previousOpen
engulfing = currentOpen >= previousClose and currentClose <= previousOpen
bodySizeCheckCurrent = currentBodySize >= min_body_size_current * previousBodySize
bodySizeCheckPrevious = previousBodySize >= min_body_size_previous * avgBodySizeLast5
isBearish and wasBullish and engulfing and bodySizeCheckCurrent and bodySizeCheckPrevious
// Short signal condition
shortCondition = isBearishEngulfing() and slope < 0
// Plotting short signals on chart
plotshape(series=shortCondition, location=location.abovebar, color=color.red, style=shape.labeldown, text="Short", title="Short Condition")
// Alerts for short condition
if (shortCondition)
alert("Short condition met", alert.freq_once_per_bar_close)
//######################## Trading Logic ##########################
// Track the bar number when the position was opened
var int longEntryBar = na
var int shortEntryBar = na
// Enter long trade on the next candle after a long signal
if (longCondition and na(longEntryBar))
strategy.entry("Long", strategy.long)
longEntryBar := bar_index + 1
// Enter short trade on the next candle after a short signal
if (shortCondition and na(shortEntryBar))
strategy.entry("Short", strategy.short)
shortEntryBar := bar_index + 1
// Close long trades `close_bars` candles after entry
if (not na(longEntryBar) and bar_index - longEntryBar >= close_bars)
strategy.close("Long")
longEntryBar := na
// Close short trades `close_bars` candles after entry
if (not na(shortEntryBar) and bar_index - shortEntryBar >= close_bars)
strategy.close("Short")
shortEntryBar := na