
La estrategia de los cazadores de oscilación de reuniones múltiples es una estrategia de alta cuantía diseñada específicamente para el comercio de marcos de tiempo bajos, que utiliza un sistema de puntuación basado en puntos integral que combina indicadores técnicos optimizados, análisis de comportamiento de precios e identificación de patrones de reversión para generar señales de negociación precisas. La innovación central de la estrategia consiste en la introducción de un mecanismo de puntuación doble único, que identifica los fondos de oscilación a través de un sistema de puntuación de entrada y determina el mejor momento de salida a través de un sistema de puntuación de salida.
La estrategia utiliza parámetros de indicadores optimizados y ampliamente retestados, incluidos los MACD ((3, 10, 3) y RSI ((21) especialmente configurados, que se adaptan mejor a los cambios rápidos en el mercado que la configuración estándar. La estrategia requiere un umbral de puntaje alto de al menos 13 puntos para entrar y salir, lo que garantiza que solo se inicien operaciones con señales de alta credibilidad. En la retrospectiva, la estrategia mostró un rendimiento de ganancias superior al 200%, lo que demuestra su eficacia para capturar los patrones de fluctuación del mercado.
El núcleo de la estrategia de los cazadores de balances de múltiples reuniones es su sistema de calificación integral, que determina el momento de negociar mediante la evaluación cuantitativa de múltiples condiciones técnicas. El sistema de calificación de entrada se compone de los siguientes cuatro componentes principales:
Señales del RSI(Más de 5 puntos):
Señales del MACD(Más de 8 puntos):
El comportamiento de los precios(Más de 4 puntos):
Reconocimiento de patrones(Más de 8 puntos):
El sistema de puntuación de salida utiliza un sistema de pesos similar, pero con el criterio opuesto para identificar la parte superior que se mueve. La estrategia requiere que la entrada y la salida tengan una puntuación promedio de al menos 13 puntos, lo que garantiza que solo se ejecuten señales de alto grado de certeza y reduce la posibilidad de señales falsas.
Otro componente clave de la estrategia son sus parámetros indicadores optimizados:
Estos parámetros han sido especialmente optimizados para capturar cambios rápidos en los precios y fluctuaciones de alta frecuencia.
Procesos de decisión objetivamente cuantificadosLa estrategia elimina los juicios subjetivos y proporciona criterios de negociación claros a través de un sistema de calificación basado en puntos. Este método hace que las decisiones de negociación se basen en datos en lugar de emociones, lo que mejora considerablemente la disciplina de negociación.
Mecanismo de confirmación múltipleLa estrategia requiere la confirmación simultánea de varios indicadores técnicos y patrones de precios, lo que mejora significativamente la fiabilidad de la señal. La negociación solo se realiza cuando se cumplen al menos 13 criterios, lo que reduce el riesgo de señales falsas.
Optimización de la sensibilidad al tiempoMediante el uso de parámetros optimizados de MACD ((3, 10, 3) y RSI ((21), la estrategia puede capturar cambios en la dinámica de los precios más temprano, mientras que filtra el ruido del mercado y ofrece una mejor sensibilidad temporal.
Gestión de riesgos flexible: La estrategia incorpora cálculos de objetivos de pérdidas y ganancias basados en el riesgo, y adopta por defecto una proporción de riesgo-rentabilidad de 5:1, lo que proporciona un marco claro de gestión de riesgos para las operaciones. El stop loss dinámico se basa en los mínimos de oscilación recientes, con zonas de amortiguamiento configurables, lo que aumenta la flexibilidad de los controles de riesgo.
Sistemas de transacciones altamente visiblesLa estrategia ofrece un sistema de puntuación, que incluye etiquetas verdes (puntuación de entrada ≥ 10) y etiquetas rojas (puntuación de salida ≥ 10), así como marcas de entrada / salida de transacciones visibles para que los operadores puedan ver claramente el funcionamiento del sistema.
Altamente adaptable: Aunque los parámetros de la estrategia están optimizados, pueden adaptarse a diferentes entornos de mercado y variedades de transacciones, lo que hace que la estrategia tenga una amplia aplicabilidad.
Posiciones altas asignan riesgoLa estrategia por defecto adopta una distribución de fondos del 100%, una forma de inversión centralizada que aumenta el margen de riesgo de una sola transacción. Esto puede causar una gran volatilidad en las cuentas en caso de fuertes fluctuaciones en el mercado o eventos inesperados.
Dependencia de las condiciones del mercadoLa estrategia funciona mejor en mercados con tendencias y fluctuaciones evidentes, pero puede ser menos efectiva en mercados altamente oscilantes y horizontales. Debe usarse con cautela en diferentes entornos de mercado y considerar ajustar los parámetros o suspender la negociación.
Optimización del riesgo de sobreajuste: Los parámetros de la estrategia se optimizan, y puede haber un riesgo de que los datos históricos se ajusten demasiado bien. Los cambios en las condiciones del mercado en el futuro pueden causar que la estrategia no funcione mejor que los resultados de la retrospectiva. Los parámetros deben volver a verificarse y ajustarse periódicamente para mantener la eficacia de la estrategia.
Protección sin diversidad: Como estrategia de posición única, la falta de protección de la diversificación aumenta el riesgo de un mercado específico. En aplicaciones prácticas, se puede considerar la estrategia como parte de una cartera de inversión más amplia o la introducción de operaciones de varias variedades para aumentar la diversificación.
Riesgo de fallo técnico: Los sistemas de calificación complejos y las múltiples condiciones pueden fallar en ciertos entornos de mercado, especialmente en condiciones de mercado extremas. Se recomienda la implementación de medidas adicionales de gestión de riesgos, como el establecimiento de límites de pérdida máxima o el uso de filtros de volatilidad.
Introducción de los parámetros de adaptación: La estrategia actual utiliza parámetros MACD y RSI fijos, se puede considerar la introducción de parámetros de adaptación basados en la volatilidad del mercado o la intensidad de la tendencia. Por ejemplo, ajustar automáticamente los parámetros MACD en un entorno de alta volatilidad o ajustar los niveles de sobreventa / sobreventa del RSI en función de la situación actual del mercado para mejorar la adaptabilidad de la estrategia en diferentes entornos de mercado.
Análisis integrado de la relación precio-cantidadLas estrategias actuales se basan principalmente en el comportamiento de los precios y los indicadores de la dinámica, que pueden mejorar la calidad de la señal mediante la integración de análisis de volumen de transacción. La confirmación de volumen de transacción puede proporcionar una fiabilidad adicional, especialmente en la confirmación de patrones de reversión.
Añadir filtro de entorno de mercadoImplementación de mecanismos de identificación de entornos de mercado para reducir automáticamente la frecuencia de las operaciones o ajustar los parámetros en condiciones de mercado que no son adecuadas para la estrategia. Por ejemplo, aumenta el umbral de puntuación en mercados altamente horizontales o reduce el margen de pérdida en entornos de baja volatilidad.
Optimizar el sistema de gestión de fondosLa estrategia actual utiliza una asignación de posiciones del 100%, lo que permite un sistema de administración de fondos más complejo, que ajusta el tamaño de la posición en función de la intensidad de la señal, la volatilidad del mercado o la dinámica de la actuación histórica. Por ejemplo, el mayor puntaje distribuye más fondos o reduce el tamaño de la posición después de una serie de pérdidas.
Integración de análisis de múltiples marcos de tiempoAumentar la calidad de la señal de entrada al agregar una confirmación de tendencia en un marco de tiempo más alto. Por ejemplo, ejecutar operaciones solo cuando la tendencia del marco de tiempo más alto está en la misma dirección, o asignar más puntos a las operaciones que se ajustan a la tendencia principal.
Mejoras en el aprendizaje automáticoConsiderar el uso de métodos de aprendizaje automático para optimizar las ponderaciones y las valoraciones de puntuación. Al analizar los datos históricos, se puede determinar qué combinaciones de señales son más efectivas en un entorno de mercado específico y ajustar el sistema de puntuación en consecuencia.
La estrategia de los cazadores de balances de reuniones múltiples representa un método de negociación de bajo marco de tiempo integral y sistematizado que crea un sistema de decisión de negociación impulsado por datos mediante la integración de varios indicadores de análisis técnico y características de comportamiento de precios. La ventaja central de la estrategia radica en su método de calificación de múltiples estándares objetivos, que elimina efectivamente la toma de decisiones emocional, mientras se mantiene la suficiente flexibilidad para adaptarse a diferentes tipos de negociación y entornos de mercado.
La estrategia es capaz de capturar con eficacia las oscilaciones del mercado, especialmente en mercados con alta volatilidad, a través de parámetros optimizados MACD ((3, 10, 3) y RSI ((21), combinados con condiciones de entrada y salida estrictas. La función de gestión de riesgos incorporada y las herramientas de visualización aumentan aún más la practicidad y la facilidad de uso de la estrategia.
Sin embargo, la estrategia también tiene ciertas limitaciones y riesgos, incluida la asignación de posiciones elevadas, la dependencia de las condiciones del mercado y la posibilidad de optimizar la sobreadaptación. La solidez y adaptabilidad de la estrategia se puede mejorar aún más mediante la implementación de la dirección de optimización recomendada, como la introducción de parámetros de adaptación, la integración del análisis de la relación entre el precio y el volumen, el aumento de filtros de entorno de mercado.
Para los comerciantes experimentados, la estrategia de caza de vaivenes de reuniones múltiples ofrece un poderoso marco para capturar tendencias y mover las operaciones en marcos de tiempo bajos. Al comprender sus principios centrales y ajustarse a sus necesidades específicas, los comerciantes pueden usar esta estrategia para buscar oportunidades de comercio de alta probabilidad en mercados que cambian rápidamente. Cabe destacar que cualquier estrategia de negociación requiere una estricta gestión de riesgos y una evaluación de supervisión continua para garantizar el éxito de las operaciones a largo plazo.
/*backtest
start: 2024-06-30 00:00:00
end: 2025-06-28 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT","balance":50000000}]
*/
// ____ _ _______ _ _ _____
// / __ \ | | |__ __| | (_) | __ \
// | | | |_ _ __ _ _ __ | |_ | |_ __ __ _ __| |_ _ __ __ _ | |__) |
// | | | | | | |/ _` | '_ \| __| | | '__/ _` |/ _` | | '_ \ / _` | | ___/ '__/ _ \
// | |__| | |_| | (_| | | | | |_ | | | | (_| | (_| | | | | | (_| | | | | | | (_) |
// \___\_\\__,_|\__,_|_| |_|\__| |_|_| \__,_|\__,_|_|_| |_|\__, | |_| |_| \___/
// __/ |
// |___/
// Quant Trading Pro
//@version=6
strategy("Multi-Confluence Swing Hunter V1", overlay=true,
default_qty_type=strategy.percent_of_equity, default_qty_value=100,
commission_type=strategy.commission.percent, commission_value=0.1,
slippage=3, initial_capital=1000, margin_long=0, margin_short=0)
// === DESCRIPTION ===
// High-conviction swing bottom entry strategy using optimized MACD(3,10,3) and RSI(21)
// Entry: Point-based scoring system for swing bottoms (divergences, momentum, price action)
// Exit: Inverse scoring system for swing tops (no stop-loss, exit only on swing top signals)
// Position: Single position with 100% allocation, scores displayed only when ≥10 points
// Based on analysis showing 23.7% improvement over standard parameters
// === INPUT PARAMETERS ===
// Optimized Indicator Settings
macdFast = input.int(3, "MACD Fast Length", minval=1, maxval=50, group="Optimized Indicators")
macdSlow = input.int(10, "MACD Slow Length", minval=1, maxval=100, group="Optimized Indicators")
macdSignal = input.int(3, "MACD Signal Length", minval=1, maxval=50, group="Optimized Indicators")
rsiLength = input.int(21, "RSI Length", minval=2, maxval=100, group="Optimized Indicators")
// Entry Settings - Swing Bottom Scoring
minEntryScore = input.int(13, "Minimum Entry Score", minval=5, maxval=20, group="Entry Settings")
showEntryScores = input.bool(true, "Show Entry Scores (Above 10)", group="Entry Settings")
// Exit Settings - Swing Top Scoring (Inverse of Entry Criteria)
minExitScore = input.int(13, "Minimum Exit Score", minval=5, maxval=20, group="Exit Settings")
showExitScores = input.bool(true, "Show Exit Scores (Above 10)", group="Exit Settings")
// Price Action Settings
minLowerWickPercent = input.float(50.0, "Min Lower Wick %", minval=10.0, maxval=90.0, step=5.0, group="Price Action")
quickRecoveryPercent = input.float(0.3, "Quick Recovery %", minval=0.1, maxval=2.0, step=0.1, group="Price Action")
quickRecoveryBars = input.int(3, "Quick Recovery Bars", minval=1, maxval=10, group="Price Action")
// RSI Levels
rsiOversold = input.float(30.0, "RSI Oversold Level", minval=10.0, maxval=50.0, step=1.0, group="RSI Settings")
rsiExtremeOversold = input.float(25.0, "RSI Extreme Oversold", minval=10.0, maxval=40.0, step=1.0, group="RSI Settings")
rsiOverbought = input.float(70.0, "RSI Overbought Level", minval=50.0, maxval=90.0, step=1.0, group="RSI Settings")
rsiExtremeOverbought = input.float(75.0, "RSI Extreme Overbought", minval=60.0, maxval=90.0, step=1.0, group="RSI Settings")
// Reversal Signals Settings
reversalLookback = input.int(12, "Reversal Candle Lookback", minval=5, maxval=50, group="Reversal Signals")
reversalConfirm = input.int(3, "Reversal Confirm Within", minval=1, maxval=10, group="Reversal Signals")
useVolumeConfirmation = input.bool(false, "Use Volume Confirmation", group="Reversal Signals")
// Trade Management
allowShortTrades = input.bool(false, "Allow Short Trades?", group="Short Trades")
// Risk/Reward TP/SL Settings
useRiskReward = input.bool(true, "Use Risk/Reward TP/SL", group="Risk Management")
riskRewardRatio = input.float(5, "Risk/Reward Ratio", minval=1.0, maxval=5.0, step=0.1, group="Risk Management")
stopLossLookback = input.int(10, "Stop Loss Lookback Bars", minval=3, maxval=50, group="Risk Management")
stopLossBuffer = input.float(0.15, "Stop Loss Buffer %", minval=0.05, maxval=1.0, step=0.05, group="Risk Management")
// Advanced Settings
maxLookbackBars = input.int(8, "Divergence Lookback Bars", minval=3, maxval=20, group="Advanced")
// === 1️⃣ CALCULATIONS ===
// Optimized MACD Calculation
[macdLine, signalLine, macdHist] = ta.macd(close, macdFast, macdSlow, macdSignal)
// Optimized RSI Calculation
rsi = ta.rsi(close, rsiLength)
// Price Action Calculations
bodySize = math.abs(close - open)
lowerWick = math.min(open, close) - low
upperWick = high - math.max(open, close)
totalRange = high - low
lowerWickPercent = totalRange > 0 ? (lowerWick / totalRange) * 100 : 0
upperWickPercent = totalRange > 0 ? (upperWick / totalRange) * 100 : 0
bodyPercent = totalRange > 0 ? (bodySize / totalRange) * 100 : 0
// Reversal Signals Calculation
var int bullCandleScore = 0
var int bearCandleScore = 0
var bool bullReversalCandidate = false
var bool bearReversalCandidate = false
var float bullReversalLow = 0.0
var float bullReversalHigh = 0.0
var float bearReversalLow = 0.0
var float bearReversalHigh = 0.0
var bool bullSignalConfirmed = false
var bool bearSignalConfirmed = false
var int bullCandleCounter = 0
var int bearCandleCounter = 0
volumeIsHigh = volume > ta.sma(volume, 20)
// Reset scores
bullCandleScore := 0
bearCandleScore := 0
// Calculate reversal scores
if bar_index >= reversalLookback
for i = 0 to (reversalLookback - 1)
if close < low[i]
bullCandleScore += 1
if close > high[i]
bearCandleScore += 1
// Bear signal setup
if bearCandleScore == (reversalLookback - 1)
bearReversalCandidate := true
bearReversalLow := low
bearReversalHigh := high
bearSignalConfirmed := false
bearCandleCounter := 0
if bearReversalCandidate
bearCandleCounter += 1
if close > bearReversalHigh
bearReversalCandidate := false
bearCondition = bearReversalCandidate and close < bearReversalLow and not bearSignalConfirmed and bearCandleCounter <= (reversalConfirm + 1)
bearSignal = false
if bearCondition
bearSignalConfirmed := true
if not useVolumeConfirmation or volumeIsHigh
bearSignal := true
// Bull signal setup
if bullCandleScore == (reversalLookback - 1)
bullReversalCandidate := true
bullReversalLow := low
bullReversalHigh := high
bullSignalConfirmed := false
bullCandleCounter := 0
if bullReversalCandidate
bullCandleCounter += 1
if close < bullReversalLow
bullReversalCandidate := false
bullCondition = bullReversalCandidate and close > bullReversalHigh and not bullSignalConfirmed and bullCandleCounter <= (reversalConfirm + 1)
bullSignal = false
if bullCondition
bullSignalConfirmed := true
if not useVolumeConfirmation or volumeIsHigh
bullSignal := true
// === 2️⃣ ENTRY & EXIT LOGIC ===
// Helper Functions for Divergence Detection
findLowerLow(lookback) =>
var float lowestPrice = na
var int lowestIndex = na
if bar_index >= lookback
lowestPrice := low
lowestIndex := bar_index
for i = 1 to lookback
if low[i] < lowestPrice
lowestPrice := low[i]
lowestIndex := bar_index - i
[lowestPrice, lowestIndex]
findHigherHigh(lookback) =>
var float highestPrice = na
var int highestIndex = na
if bar_index >= lookback
highestPrice := high
highestIndex := bar_index
for i = 1 to lookback
if high[i] > highestPrice
highestPrice := high[i]
highestIndex := bar_index - i
[highestPrice, highestIndex]
// SWING BOTTOM SCORING SYSTEM
// 1. RSI Signals
rsiOversoldSignal = rsi < rsiOversold
rsiExtremeOversoldSignal = rsi < rsiExtremeOversold
rsiTurningUp = rsi > rsi[1]
// RSI Bullish Divergence
[prevLowPrice, prevLowIndex] = findLowerLow(maxLookbackBars)
rsiBullishDivergence = false
if not na(prevLowPrice) and not na(prevLowIndex) and bar_index > prevLowIndex
prevRSI = rsi[bar_index - prevLowIndex]
if low < prevLowPrice and rsi > prevRSI and not na(prevRSI)
rsiBullishDivergence := true
// 2. MACD Signals
macdNegative = macdLine < 0
macdTurningUp = macdLine > macdLine[1]
macdHistImproving = macdHist > macdHist[1]
// MACD Bullish Divergence
macdBullishDivergence = false
if not na(prevLowPrice) and not na(prevLowIndex) and bar_index > prevLowIndex
prevMACD = macdLine[bar_index - prevLowIndex]
if low < prevLowPrice and macdLine > prevMACD and not na(prevMACD)
macdBullishDivergence := true
// 3. Price Action Signals
longLowerWick = lowerWickPercent > minLowerWickPercent
smallBody = bodyPercent < 30.0
bullishClose = close > open
// 4. Quick Recovery Check
quickRecovery = false
if bar_index >= quickRecoveryBars
recoveryTarget = close * (1 + quickRecoveryPercent / 100)
for i = 1 to quickRecoveryBars
if high[i] > recoveryTarget
quickRecovery := true
break
// ENTRY SCORE CALCULATION
entryScore = 0
entryScore := entryScore + (rsiOversoldSignal ? 2 : 0)
entryScore := entryScore + (rsiExtremeOversoldSignal ? 2 : 0)
entryScore := entryScore + (rsiBullishDivergence ? 4 : 0)
entryScore := entryScore + (rsiTurningUp ? 1 : 0)
entryScore := entryScore + (macdNegative ? 1 : 0)
entryScore := entryScore + (macdTurningUp ? 2 : 0)
entryScore := entryScore + (macdHistImproving ? 2 : 0)
entryScore := entryScore + (macdBullishDivergence ? 3 : 0)
entryScore := entryScore + (longLowerWick ? 2 : 0)
entryScore := entryScore + (smallBody ? 1 : 0)
entryScore := entryScore + (bullishClose ? 1 : 0)
entryScore := entryScore + (quickRecovery ? 2 : 0)
entryScore := entryScore + (bullSignal ? 4 : 0) // Green reversal signal +4
// SWING TOP SCORING SYSTEM (for exits)
// 1. RSI Exit Signals
rsiOverboughtSignal = rsi > rsiOverbought
rsiExtremeOverboughtSignal = rsi > rsiExtremeOverbought
rsiTurningDown = rsi < rsi[1]
// RSI Bearish Divergence
[prevHighPrice, prevHighIndex] = findHigherHigh(maxLookbackBars)
rsiBearishDivergence = false
if not na(prevHighPrice) and not na(prevHighIndex) and bar_index > prevHighIndex
prevRSIHigh = rsi[bar_index - prevHighIndex]
if high > prevHighPrice and rsi < prevRSIHigh and not na(prevRSIHigh)
rsiBearishDivergence := true
// 2. MACD Exit Signals
macdPositive = macdLine > 0
macdTurningDown = macdLine < macdLine[1]
macdHistDeclining = macdHist < macdHist[1]
// MACD Bearish Divergence
macdBearishDivergence = false
if not na(prevHighPrice) and not na(prevHighIndex) and bar_index > prevHighIndex
prevMACDHigh = macdLine[bar_index - prevHighIndex]
if high > prevHighPrice and macdLine < prevMACDHigh and not na(prevMACDHigh)
macdBearishDivergence := true
// 3. Price Action Exit Signals
longUpperWick = upperWickPercent > minLowerWickPercent
bearishClose = close < open
// EXIT SCORE CALCULATION
exitScore = 0
exitScore := exitScore + (rsiOverboughtSignal ? 2 : 0)
exitScore := exitScore + (rsiExtremeOverboughtSignal ? 2 : 0)
exitScore := exitScore + (rsiBearishDivergence ? 4 : 0)
exitScore := exitScore + (rsiTurningDown ? 1 : 0)
exitScore := exitScore + (macdPositive ? 1 : 0)
exitScore := exitScore + (macdTurningDown ? 2 : 0)
exitScore := exitScore + (macdHistDeclining ? 2 : 0)
exitScore := exitScore + (macdBearishDivergence ? 3 : 0)
exitScore := exitScore + (longUpperWick ? 2 : 0)
exitScore := exitScore + (bearishClose ? 1 : 0)
exitScore := exitScore + (bearSignal ? 1 : 0) // Red reversal signal +1
// SIGNAL CONDITIONS
longCondition = entryScore >= minEntryScore and barstate.isconfirmed
exitCondition = exitScore >= minExitScore and barstate.isconfirmed
// === TP/SL LEVELS (Clean Logic) ===
var float stopLossLevel = na
var float takeProfitLevel = na
var bool tpslSet = false
// Clear levels when no position
if strategy.position_size == 0
stopLossLevel := na
takeProfitLevel := na
tpslSet := false
// Calculate TP/SL levels ONCE when position is opened
if strategy.position_size > 0 and strategy.position_size[1] == 0 and useRiskReward and not tpslSet
// Find recent low for stop loss
recentLow = low
for i = 1 to stopLossLookback
if low[i] < recentLow
recentLow := low[i]
// Set levels using actual entry price
entryPrice = strategy.opentrades.entry_price(0)
stopLossLevel := recentLow * (1 - stopLossBuffer / 100) // Configurable buffer below recent low
riskAmount = entryPrice - stopLossLevel
takeProfitLevel := entryPrice + (riskAmount * riskRewardRatio)
tpslSet := true
// === 3️⃣ TRADE EXECUTIONS ===
// Long Entry - Single Position Only
if longCondition and strategy.position_size == 0
strategy.entry("Long", strategy.long, comment="Entry Score: " + str.tostring(entryScore))
// Set TP/SL ONLY ONCE per trade (when levels are calculated and not yet set)
if strategy.position_size > 0 and useRiskReward and tpslSet and not na(stopLossLevel) and not na(takeProfitLevel)
strategy.exit("TP/SL", "Long", stop=stopLossLevel, limit=takeProfitLevel)
// Long Exit - Close Position on Swing Top Signal (Only when NOT using TP/SL)
if exitCondition and strategy.position_size > 0 and not useRiskReward
strategy.close("Long", comment="Exit Score: " + str.tostring(exitScore))
// === 4️⃣ VISUALIZATIONS ===
// Entry Score Display (Only When Score ≥ 10) - Shows on ALL qualifying bars
if showEntryScores and entryScore >= 10 and barstate.isconfirmed
label.new(bar_index, low,
text=str.tostring(entryScore),
yloc=yloc.belowbar,
color=na,
style=label.style_label_up,
textcolor=color.green,
size=size.small)
// Exit Score Display (Only When Score ≥ 10) - Shows on ALL qualifying bars
if showExitScores and exitScore >= 10 and barstate.isconfirmed
label.new(bar_index, high,
text=str.tostring(exitScore),
yloc=yloc.abovebar,
color=na,
style=label.style_label_down,
textcolor=color.red,
size=size.small)
// Large Trade Entry Triangle (Only when actually entering a position) - Using plotshape to avoid label limits
plotshape(longCondition and strategy.position_size == 0, title="Trade Entry", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.normal, text="BUY")
// Large Trade Exit Triangle (Only when actually exiting a position) - Using plotshape to avoid label limits
plotshape(exitCondition and strategy.position_size > 0, title="Trade Exit", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.normal, text="SELL")
// Reversal Signal Triangles
plotshape(bullSignal, title="Bull Reversal", location=location.belowbar,
color=color.lime, style=shape.triangleup, size=size.tiny)
plotshape(bearSignal, title="Bear Reversal", location=location.abovebar,
color=color.red, style=shape.triangledown, size=size.tiny)
// === TP/SL LEVEL PLOTS ===
plot(strategy.position_size > 0 and useRiskReward ? stopLossLevel : na, title="Stop Loss", color=color.red, linewidth=2, style=plot.style_linebr)
plot(strategy.position_size > 0 and useRiskReward ? takeProfitLevel : na, title="Take Profit", color=color.green, linewidth=2, style=plot.style_linebr)
// MACD and RSI Plots (in separate panes)
macdPlot = plot(macdLine, title="MACD Line", color=color.blue, display=display.none)
signalPlot = plot(signalLine, title="Signal Line", color=color.red, display=display.none)
histPlot = plot(macdHist, title="MACD Histogram", color=color.gray, style=plot.style_histogram, display=display.none)
rsiPlot = plot(rsi, title="RSI", color=color.purple, display=display.none)
rsiOverboughtLine = hline(rsiOverbought, title="RSI Overbought", color=color.red, linestyle=hline.style_dashed, display=display.none)
rsiOversoldLine = hline(rsiOversold, title="RSI Oversold", color=color.green, linestyle=hline.style_dashed, display=display.none)