// ----------------------------------------------
// PRC_Strategy RSI-Adaptive T3 & SAR
// version = 0
// 24.11.2025
// Iván González @ www.prorealcode.com
// Sharing ProRealTime knowledge
// ----------------------------------------------
// Definición de Parámetros
DEFPARAM CumulateOrders = False
DEFPARAM PreLoadBars = 200
// --- Configuración de Usuario ---
rsiLen = 14
minLen = 5
maxLen = 50
vFactor = 0.7
stopLen = 10
// Configuración SAR
sarStep = 0.02
sarMax = 0.21
// ----------------------------------------------
// 1. CÁLCULO DE LA LONGITUD ADAPTATIVA (RSI)
// ----------------------------------------------
myRsi = RSI[rsiLen](close)
// Escalamos el RSI invertido: (1 - RSI/100)
rsiScale = 1 - (myRsi / 100)
// Calculamos la longitud adaptativa
// Fórmula: min + (diferencia * escala)
adaptiveLenRaw = minLen + ((maxLen - minLen) * rsiScale)
adaptiveLen = ROUND(adaptiveLenRaw)
// Aseguramos que la longitud sea al menos 1 para evitar errores
adaptiveLen = MAX(1, adaptiveLen)
// ----------------------------------------------
// 2. CÁLCULO DE LA MEDIA T3 (Tilson)
// ----------------------------------------------
// La T3 requiere 6 EMAs encadenadas.
e1 = ExponentialAverage[adaptiveLen](close)
e2 = ExponentialAverage[adaptiveLen](e1)
e3 = ExponentialAverage[adaptiveLen](e2)
e4 = ExponentialAverage[adaptiveLen](e3)
e5 = ExponentialAverage[adaptiveLen](e4)
e6 = ExponentialAverage[adaptiveLen](e5)
// Coeficientes T3
// c1 = -v^3
c1 = -(vFactor * vFactor * vFactor)
// c2 = 3v^2 + 3v^3
c2 = (3 * (vFactor * vFactor)) + (3 * (vFactor * vFactor * vFactor))
// c3 = -6v^2 - 3v - 3v^3
c3 = -(6 * (vFactor * vFactor)) - (3 * vFactor) - (3 * (vFactor * vFactor * vFactor))
// c4 = 1 + 3v + v^3 + 3v^2
c4 = 1 + (3 * vFactor) + (vFactor * vFactor * vFactor) + (3 * (vFactor * vFactor))
// Fórmula Final T3
t3Value = (c1 * e6) + (c2 * e5) + (c3 * e4) + (c4 * e3)
// ----------------------------------------------
// 3. FILTRO SAR PARABÓLICO
// ----------------------------------------------
mySar = SAR[sarStep, sarStep, sarMax]
// Condición de tendencia basada en SAR
isLongTrend = close > mySar
// ----------------------------------------------
// 4. LÓGICA DE ENTRADA
// ----------------------------------------------
// Detectar cambio de pendiente en T3 (Cruce sobre su valor de hace 2 velas)
t3CrossUp = (t3Value > t3Value[2]) AND (t3Value[1] <= t3Value[3])
t3CrossDown = (t3Value < t3Value[2]) AND (t3Value[1] >= t3Value[3])
// Niveles de Stop Loss basados en extremos recientes
stopLow = Lowest[stopLen](low)
stopHigh = Highest[stopLen](high)
// Gestión de Stops
ONCE myStopLevel = 0
// --- COMPRAS ---
IF NOT LongOnMarket AND t3CrossUp AND isLongTrend THEN
BUY 1 CONTRACT AT MARKET
myStopLevel = stopLow
ENDIF
// --- VENTAS (CORTOS) ---
IF NOT ShortOnMarket AND t3CrossDown AND NOT isLongTrend THEN
SELLSHORT 1 CONTRACT AT MARKET
myStopLevel = stopHigh
ENDIF
// ----------------------------------------------
// 5. LÓGICA DE SALIDA
// ----------------------------------------------
// Aplicamos el Stop Loss fijo definido en el momento de la entrada
IF OnMarket THEN
SET STOP PRICE myStopLevel
if LongOnMarket and t3CrossDown THEN
SELL AT MARKET
elsif ShortOnMarket AND t3CrossUp THEN
EXITSHORT AT MARKET
ENDIF
endif
// ----------------------------------------------
// 6. GRAFICADO
// ----------------------------------------------
Graphonprice t3Value AS "T3 Adaptive" coloured("blue")
Graphonprice mySar AS "SAR"
Graphonprice myStopLevel as "StopLoss" coloured("red")