
La estrategia es un sistema de comercio de análisis técnico integral que identifica oportunidades de comercio en bandas de alta probabilidad mediante la integración de múltiples indicadores. El sistema se basa principalmente en el indicador SuperTrend como filtro de dirección de la tendencia, en combinación con el ADX (el índice de dirección promedio) para confirmar la fuerza de la tendencia, y utiliza el análisis de los desequilibrios de presión de compra y venta del delta de liquidez para generar con precisión señales de entrada y salida en una variedad de entornos de mercado.
La estrategia se basa en la formación de señales de negociación mediante el trabajo en conjunto de los siguientes cuatro indicadores centrales:
Indicadores de las SuperTendencias: Como filtro de dirección de tendencia principal, se utiliza la configuración de optimización (factor: 3.0, ciclo ATR: 10) para equilibrar la capacidad de respuesta y la fiabilidad. Se identifica como una tendencia alcista cuando el precio está por encima de la línea de SuperTrend; se identifica como una tendencia descendente cuando el precio está por debajo de la línea de SuperTrend.
Indicador ADX: Se utiliza para confirmar la intensidad de la tendencia actual, filtrar el horizonte o el entorno de mercado caótico. La estrategia utiliza una implementación personalizada, calcula la amplitud real, los movimientos positivos y negativos, y finalmente genera el valor de ADX. Cuando el valor de ADX es superior al umbral establecido (el valor predeterminado de 25), lo que indica la existencia de una tendencia fuerte, el sistema está más inclinado a generar señales de comercio.
Indicador de la fluidez del delta: Analiza el desequilibrio de la presión de compra y venta de volúmenes de transacción, calcula el volumen de compra y venta, y obtiene el valor final del delta a través de una serie de procesamientos estandarizados y suavizados. Se produce una señal de más cuando el delta supera el umbral positivo y una señal de menos cuando está por debajo del umbral negativo, para verificar la dirección de la tendencia y la posible reversión.
Indicadores de las PSAR(Opcional): Se puede utilizar como confirmación adicional de un cambio de tendencia y se apaga por defecto para reducir la filtración de la señal. Cuando el precio está por encima del punto PSAR, se considera una tendencia alcista; cuando el precio está por debajo del punto PSAR, se considera una tendencia bajista.
La lógica de negociación genera una señal de composición mediante la combinación de todos los indicadores activados. La señal de compra o venta final se produce cuando todos los indicadores apuntan en la misma dirección. Por ejemplo, el sistema solo generará una señal de compra cuando se cumplan los requisitos de multiplicación.
La estrategia tiene las siguientes ventajas:
Sistema de reconocimiento multidimensional: La integración de diferentes tipos de indicadores técnicos para la confirmación de transacciones en varias dimensiones, desde la tendencia, la intensidad y el volumen de transacciones, reduce significativamente el riesgo de falsas señales y mejora la precisión de las transacciones.
Altamente adaptable: Las estrategias permiten a los usuarios la flexibilidad de elegir la dirección de las operaciones y activar/desactivar indicadores específicos, lo que permite al sistema adaptarse a diversas condiciones de mercado y diferentes variedades de operaciones.
Estricto control de los riesgos: Mecanismo de stop loss y stop loss de proporción fija incorporado, que garantiza que cada operación tenga límites de riesgo predefinidos y objetivos de ganancias, protegiendo efectivamente la seguridad de los fondos.
Tener en cuenta el costo real de las transaccionesEn el modelo de estrategia se incluyen comisiones ((0.035%) y puntos de deslizamiento ((2 puntos), lo que hace que los resultados de la retrospectiva se ajusten mejor al entorno real de las operaciones.
Señales de negociación visuales: Proporciona una flecha de señal de compra/venta clara, con un tamaño personalizable para una rápida identificación en el gráfico.
Panel de información: Dinámicamente muestra los indicadores activos y los ajustes de riesgo, proporcionando información instantánea sobre el funcionamiento de la estrategia.
La gestión de posiciones conservadoraPor defecto, se utiliza el 5% de utilidad como el tamaño de la posición por transacción, para evitar la pérdida de capital causada por el exceso de operaciones.
Aunque la estrategia está diseñada para ser exhaustiva, los riesgos potenciales son:
Sensibilidad de los parámetrosEl rendimiento de la estrategia depende en gran medida de la configuración de los parámetros del indicador, en particular el factor SuperTrend y el umbral ADX, y los diferentes parámetros de optimización pueden ser necesarios en diferentes entornos de mercado, lo que puede conducir a una sobreventa o a la pérdida de oportunidades importantes.
Riesgo de retrasoDebido al uso de varios indicadores de medias móviles, las señales pueden retrasarse, lo que hace que la entrada o salida no sea lo suficientemente oportuna en un mercado de inversión rápida.
Riesgo de la correlación: Puede haber una correlación intrínseca entre varios indicadores técnicos, lo que significa que las confirmaciones aparentemente independientes pueden provenir de indicadores basados en modelos matemáticos similares, lo que reduce el valor real de las confirmaciones múltiples.
El riesgo de optimización excesivaUn buen desempeño durante el período de retroalimentación de 2021-2033 no significa necesariamente la misma eficacia en el mercado futuro, especialmente si estos parámetros son el resultado de una optimización excesiva de los datos históricos.
La solución:
La estrategia se puede optimizar en los siguientes aspectos:
Ajuste de parámetros dinámicos: Implementación de un mecanismo para ajustar automáticamente el factor SuperTrend y los depreciados ADX en función de la volatilidad del mercado, lo que permite que la estrategia se adapte mejor a diferentes entornos de mercado. Por ejemplo, el uso de un factor SuperTrend más pequeño en un mercado de baja volatilidad y un factor más grande en un mercado de alta volatilidad.
El filtro del tiempoEl objetivo de la iniciativa es: aumentar el mecanismo de filtración basado en el tiempo, evitando la negociación en momentos de baja liquidez o alta volatilidad, como el fin de semana en el mercado de criptomonedas o la publicación de datos económicos importantes en el mercado de divisas.
Análisis de marcos de tiempo múltiples: la integración de la confirmación de tendencias en el marco de tiempo más alto, por ejemplo, entrar en operaciones sólo cuando la dirección de la tendencia de la línea del sol coincide con el marco de tiempo de negociación actual. Esto puede aumentar significativamente la probabilidad de éxito de la estrategia.
Estrategias inteligentes para detener los dañosReemplazar los paros de proporción fija por paros dinámicos basados en el ATR o los puntos de soporte/resistencia, para reflejar mejor las condiciones reales de fluctuación del mercado y reducir los paros provocados por el ruido del mercado.
Aumentar las condiciones de filtración de entradaSe puede considerar la inclusión de condiciones de filtración como el juicio de sobreventa o sobrecompra por el RSI o la prueba de límite de la banda de Brin, para ingresar solo a un nivel de precio más favorable y mejorar la calidad de entrada.
Optimización de la gestión de fondosGestión de posiciones dinámica basada en el rendimiento de la estrategia actual y la situación del mercado, aumentando gradualmente las posiciones cuando la estrategia funciona bien y reduciendo las posiciones cuando aumenta la incertidumbre.
Aprendizaje automáticoUtilizando la tecnología de aprendizaje automático para optimizar la asignación de peso de los indicadores y ajustar automáticamente la importancia de cada indicador en la formación de la señal final de acuerdo con diferentes entornos de mercado.
La estrategia de comercio de tendencias dinámicas de múltiples indicadores integra varios indicadores técnicos, como SuperTrend, ADX y Delta de liquidez, para construir un sistema de negociación completo y flexible para el comercio de bandas en una variedad de entornos de mercado. La ventaja central de la estrategia reside en su mecanismo de confirmación de señales multidimensional y su estricto marco de gestión de riesgos, que permite filtrar eficazmente el ruido del mercado y proteger los fondos de negociación. Sin embargo, los usuarios deben estar atentos a los riesgos potenciales, como la sensibilidad de los parámetros y el atraso de los indicadores, y reevaluar periódicamente el rendimiento de la estrategia.
El sistema tiene el potencial de mejorar aún más su rentabilidad y estabilidad mediante la implementación de direcciones de optimización de las recomendaciones, como el ajuste de parámetros dinámicos, el análisis de marcos temporales múltiples y la estrategia de parada inteligente. Finalmente, esta estrategia ofrece a los operadores cuantitativos un marco sólido que se puede personalizar y ampliar según las preferencias de riesgo personales y las perspectivas del mercado.
/*backtest
start: 2025-01-27 00:00:00
end: 2025-05-14 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
// This Pine Script® code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © TiamatCrypto
//@version=6
// ====================================================================================
// Multi-Indicator Swing Trading Strategy [TIAMATCRYPTO]v6
// ====================================================================================
// DESCRIPTION:
// This strategy uses a combination of technical indicators to identify swing trading
// opportunities in various markets. The default settings are optimized for daily
// timeframes on cryptocurrency and forex markets.
//
// RECOMMENDED DEFAULT SETTINGS:
// - Trading direction: Both (performs well in trending and ranging markets)
// - Position size: 5% (conservative position sizing to manage risk)
// - Stop Loss: 2% (conservative risk management for capital preservation)
// - Take Profit: 4% (realistic profit target with 1:2 risk-reward ratio)
// - Initial capital: $10,000 (realistic starting account size)
// - Timeframe: 2m (best performance on 2m charts)
// - Testing period: 2021-2033 (provides sufficient sample size of trades)
// ====================================================================================
strategy("Multi-Indicator Swing [TIAMATCRYPTO]v6", overlay=true,
default_qty_type=strategy.percent_of_equity, default_qty_value=5,
initial_capital=10000, commission_type=strategy.commission.percent,
commission_value=0.035, slippage=2)
// === BASIC SETTINGS ===
// Backtesting time period set directly in the code for realistic testing
var startDateInput = timestamp("2021-01-01T00:00:00")
var endDateInput = timestamp("2033-12-31T23:59:59")
var inDateRange = time >= startDateInput and time <= endDateInput
// Trading direction settings
tradeDirection = input.string("Both", "Trading Direction", options=["Long Only", "Short Only", "Both"], group="Basic Settings")
// === INDICATOR SWITCHES ===
// PSAR is now disabled by default
usePSAR = input.bool(false, "Use PSAR", group="Indicator Switches")
useSupertrend = input.bool(true, "Use Supertrend", group="Indicator Switches")
useADX = input.bool(true, "Use ADX", group="Indicator Switches")
useLiquidityDelta = input.bool(true, "Use Liquidity Delta", group="Indicator Switches")
// === INDICATOR SETTINGS SECTION ===
// PSAR Settings
// Default PSAR settings are conservative and work well across multiple markets
psarStart = input.float(0.02, "PSAR Initial Value", minval=0.01, maxval=0.1, step=0.01, group="PSAR Settings")
psarIncrement = input.float(0.02, "PSAR Increment", minval=0.01, maxval=0.1, step=0.01, group="PSAR Settings")
psarMaximum = input.float(0.2, "PSAR Maximum", minval=0.1, maxval=0.5, step=0.05, group="PSAR Settings")
// Supertrend Settings
// Factor 3.0 provides a good balance between sensitivity and false signals
atrPeriod = input.int(10, "SuperTrend ATR Period", minval=1, maxval=50, group="SuperTrend Settings")
factor = input.float(3.0, "SuperTrend Multiplier", minval=1, maxval=10, step=0.1, group="SuperTrend Settings")
// ADX Settings
// ADX threshold of 25 is standard for identifying strong trends
adxLength = input.int(14, "ADX Length", minval=1, maxval=50, group="ADX Settings")
adxThreshold = input.int(25, "ADX Trend Strength Threshold", minval=10, maxval=50, group="ADX Settings")
// Liquidity Delta Settings
// These settings help identify significant volume imbalances for trend confirmation
deltaLength = input.int(14, "Liquidity Delta Length", minval=1, maxval=50, group="Liquidity Delta")
deltaSmooth = input.int(3, "Delta Smoothing", minval=1, maxval=20, group="Liquidity Delta")
deltaThreshold = input.float(0.5, "Delta Signal Threshold", minval=0.1, maxval=5, step=0.1, group="Liquidity Delta")
// Risk Management Settings
// Conservative settings to ensure capital preservation
useStopLoss = input.bool(true, "Use Stop Loss", group="Risk Management")
useTakeProfit = input.bool(true, "Use Take Profit", group="Risk Management")
stopLossPercent = input.float(2.0, "Stop Loss (%)", minval=0.5, maxval=5, step=0.1, group="Risk Management")
takeProfitPercent = input.float(4.0, "Take Profit (%)", minval=1.0, maxval=10, step=0.1, group="Risk Management")
// Visualization Settings
signalSize = input.string("Normal", "Signal Size", options=["Small", "Normal", "Large"], group="Visualization")
buyColor = input.color(color.green, "Buy Signal Color", group="Visualization")
sellColor = input.color(color.red, "Sell Signal Color", group="Visualization")
// === INDICATOR CALCULATIONS ===
// All remaining indicators set to initialize as true when their respective switch is off
// PSAR Calculations
psar = ta.sar(psarStart, psarIncrement, psarMaximum)
psarCondition = not usePSAR or (close > psar)
psarSellCondition = not usePSAR or (close < psar)
// Supertrend Calculations
[supertrendValue, supertrendDirection] = ta.supertrend(factor, atrPeriod)
supertrendCondition = not useSupertrend or (supertrendDirection > 0)
supertrendSellCondition = not useSupertrend or (supertrendDirection < 0)
// ADX Calculations - custom implementation
trueRange = math.max(high - low, math.abs(high - close[1]), math.abs(low - close[1]))
smoothedTrueRange = ta.sma(trueRange, adxLength)
dmPlus = high > high[1] ? math.max(high - high[1], 0) : 0
dmMinus = low[1] > low ? math.max(low[1] - low, 0) : 0
smoothedDmPlus = ta.sma(dmPlus, adxLength)
smoothedDmMinus = ta.sma(dmMinus, adxLength)
diPlus = smoothedTrueRange > 0 ? 100 * smoothedDmPlus / smoothedTrueRange : 0
diMinus = smoothedTrueRange > 0 ? 100 * smoothedDmMinus / smoothedTrueRange : 0
dx = (diPlus + diMinus) > 0 ? math.abs(diPlus - diMinus) / (diPlus + diMinus) * 100 : 0
adxValue = ta.sma(dx, adxLength)
adxCondition = not useADX or (adxValue > adxThreshold)
// Liquidity Delta Calculations
bidVolume = close < open ? volume : volume * (high - close) / (high - low + 0.000001)
askVolume = close > open ? volume : volume * (close - low) / (high - low + 0.000001)
deltaRaw = bidVolume - askVolume
deltaAvg = ta.sma(deltaRaw, deltaLength)
deltaNormalized = deltaAvg / ta.sma(volume, deltaLength)
deltaSmoothed = ta.ema(deltaNormalized, deltaSmooth)
// Delta Signals
bullishDelta = deltaSmoothed > deltaThreshold
bearishDelta = deltaSmoothed < -deltaThreshold
deltaCondition = not useLiquidityDelta or bullishDelta
deltaSellCondition = not useLiquidityDelta or bearishDelta
// === TRADING LOGIC ===
// Buy signal - combination of all active indicators
buySignal = psarCondition and supertrendCondition and adxCondition and deltaCondition
// Sell signal - combination of all active indicators
sellSignal = psarSellCondition and supertrendSellCondition and adxCondition and deltaSellCondition
// Apply trading direction
isLongAllowed = tradeDirection == "Long Only" or tradeDirection == "Both"
isShortAllowed = tradeDirection == "Short Only" or tradeDirection == "Both"
finalBuySignal = buySignal and isLongAllowed
finalSellSignal = sellSignal and isShortAllowed
// === POSITION ENTRY WITH RISK MANAGEMENT ===
// Conservative position management with defined risk parameters
if finalBuySignal and inDateRange
strategy.entry("Long", strategy.long)
// Conditional setting of stop-loss and take-profit
if useStopLoss or useTakeProfit
stopLevel = useStopLoss ? close * (1 - stopLossPercent / 100) : na
takeProfitLevel = useTakeProfit ? close * (1 + takeProfitPercent / 100) : na
strategy.exit("Long Exit", "Long", stop=stopLevel, limit=takeProfitLevel)
if finalSellSignal and inDateRange
strategy.entry("Short", strategy.short)
// Conditional setting of stop-loss and take-profit
if useStopLoss or useTakeProfit
stopLevel = useStopLoss ? close * (1 + stopLossPercent / 100) : na
takeProfitLevel = useTakeProfit ? close * (1 - takeProfitPercent / 100) : na
strategy.exit("Short Exit", "Short", stop=stopLevel, limit=takeProfitLevel)
// === SIGNAL VISUALIZATION ===
// Creating separate signals for different sizes
buySmallSignal = finalBuySignal and signalSize == "Small"
buyNormalSignal = finalBuySignal and signalSize == "Normal"
buyLargeSignal = finalBuySignal and signalSize == "Large"
sellSmallSignal = finalSellSignal and signalSize == "Small"
sellNormalSignal = finalSellSignal and signalSize == "Normal"
sellLargeSignal = finalSellSignal and signalSize == "Large"
// Draw signals for each size
plotshape(buySmallSignal and inDateRange, title="Buy Small", location=location.belowbar, color=buyColor, style=shape.triangleup, size=size.small)
plotshape(buyNormalSignal and inDateRange, title="Buy Normal", location=location.belowbar, color=buyColor, style=shape.triangleup, size=size.normal)
plotshape(buyLargeSignal and inDateRange, title="Buy Large", location=location.belowbar, color=buyColor, style=shape.triangleup, size=size.large)
plotshape(sellSmallSignal and inDateRange, title="Sell Small", location=location.abovebar, color=sellColor, style=shape.triangledown, size=size.small)
plotshape(sellNormalSignal and inDateRange, title="Sell Normal", location=location.abovebar, color=sellColor, style=shape.triangledown, size=size.normal)
plotshape(sellLargeSignal and inDateRange, title="Sell Large", location=location.abovebar, color=sellColor, style=shape.triangledown, size=size.large)
// === INFORMATION PANEL ===
// Building list of active indicators
indList = ""
indList := usePSAR ? indList + "PSAR, " : indList
indList := useSupertrend ? indList + "SuperT, " : indList
indList := useADX ? indList + "ADX, " : indList
indList := useLiquidityDelta ? indList + "Delta" : indList
// Remove last comma if it exists
if str.endswith(indList, ", ")
indList := str.substring(indList, 0, str.length(indList) - 2)
// Building risk management text
riskText = ""
if useStopLoss and useTakeProfit
riskText := str.tostring(stopLossPercent, "#.#") + "% SL, " + str.tostring(takeProfitPercent, "#.#") + "% TP"
else if useStopLoss
riskText := str.tostring(stopLossPercent, "#.#") + "% SL"
else if useTakeProfit
riskText := str.tostring(takeProfitPercent, "#.#") + "% TP"
else
riskText := "Disabled"
// Display strategy information
var table infoTable = table.new(position.top_right, 2, 5, border_width=1)
table.cell(infoTable, 0, 0, "Strategy:", bgcolor=color.new(color.blue, 90), text_color=color.white)
table.cell(infoTable, 1, 0, "Multi-Indicator Swing", bgcolor=color.new(color.blue, 90), text_color=color.white)
table.cell(infoTable, 0, 1, "Period:", bgcolor=color.new(color.blue, 90), text_color=color.white)
table.cell(infoTable, 1, 1, "2021-2023", bgcolor=color.new(color.blue, 90), text_color=color.white)
table.cell(infoTable, 0, 2, "Direction:", bgcolor=color.new(color.blue, 90), text_color=color.white)
table.cell(infoTable, 1, 2, tradeDirection, bgcolor=color.new(color.blue, 90), text_color=color.white)
table.cell(infoTable, 0, 3, "Indicators:", bgcolor=color.new(color.blue, 90), text_color=color.white)
table.cell(infoTable, 1, 3, indList, bgcolor=color.new(color.blue, 90), text_color=color.white)
table.cell(infoTable, 0, 4, "Risk Management:", bgcolor=color.new(color.blue, 90), text_color=color.white)
table.cell(infoTable, 1, 4, riskText, bgcolor=color.new(color.blue, 90), text_color=color.white)