Shawrie
- Bibliotecas
- Kevin Kipkoech
- Versión: 1.0
- Activaciones: 5
Este Script de Pine implementa una Estrategia de Canal Gaussiano + Estocástico RSI para TradingView. Calcula una Media Móvil Ponderada Gaussiana (GWMA) y su desviación estándar para formar un canal superior e inferior. También se calcula un RSI estocástico para determinar el impulso. Se entra en una posición larga cuando el precio cierra por encima de la banda gaussiana superior y el Stoch RSI K-line cruza por encima de la D-line. Se sale de la posición cuando el precio cae por debajo de la banda superior. El script incluye comisión, gestión de capital y filtrado de fechas.
aquí está el código
//@version=5 strategy("Canal Gaussiano + Estrategia Stoch RSI", overlay=true, margin_long=100, margin_short=100, initial_capital=100000, commission_type=strategy.commission.percent, commission_value=0.1, default_qty_type=strategy.percent_of_equity, default_qty_value=100, pyramiding=1) // User Inputs length = input.int(20, "Gaussian Length", minval=5) multiplier = input.float(2.0, "Channel Multiplier", step=0.1) rsiLength = input.int(14, "RSI Length", minval=1) stochLength= input.int(14, "Stoch RSI Length", minval=1) kLength = input.int(3, "Stoch K Smoothing", minval=1) dLength = input.int(3, "Stoch D Smoothing", minval=1) // Gaussian Weighted Moving Average Function f_gaussian(source, length) => half = (length - 1) / 2.0 sum = 0.0 norm = 0.0 // Desviación estándar gaussiana elegida como length/6 para una curva suave denom = (length / 6.0) * (length / 6.0) for i = 0 to length - 1 x = i - half w = math.exp(-(x * x) / (2 * denom)) sum += fuente[i] * w norm += w sum / norm // Función de desviación estándar ponderada gaussiana f_gaussian_std(fuente, longitud) => half = (longitud - 1) / 2.0 gavg = f_gaussian(fuente, longitud) sum = 0.0 norm = 0.0 denom = (longitud / 6.0) * (longitud / 6.0) for i = 0 to longitud - 1 x = i - half w = math.exp(-(x * x)/(2*denom)) diff = fuente[i] - gavg sum += diff * diff * w norm += w math.sqrt(sum/norm) // Cálculo del canal gaussiano gaussMid = f_gaussian(close, length) gaussStd = f_gaussian_std(close, length) gaussUpper = gaussMid + gaussStd * multiplicador gaussLower = gaussMid - gaussStd * multiplicador // Cálculo estocástico del RSI rsi = ta.rsi(close, rsiLength) rsiLowest = ta.lowest(rsi, stochLength) rsiHighest = ta.highest(rsi, stochLength) stoch = 100 * (rsi - rsiLowest) / math.max(rsiHighest - rsiLowest, 1e-10) k = ta.sma(stoch, kLength) d = ta.sma(k, dLength) // Condiciones // Entrada en largo: El precio cierra por encima de la línea gaussiana superior AND Stoch RSI K > D (el estocástico es "alcista") longCondition = close > gaussUpper and k > d // Exit condition: El precio cierra por debajo de la línea gaussiana superior exitCondition = close < gaussUpper // Operar sólo en el rango de fechas especificado inDateRange = time >= timestamp("2018-01-01T00:00:00") and time < timestamp("2069-01-01T00:00:00") // Enviar órdenes si inDateRange if longCondition and strategy.position_size <= 0 strategy.entry("Long", strategy.long) if exitCondition y strategy.position_size > 0 strategy.close("Long") // Trazar Canal Gaussiano plot(gaussMid, "Gaussian Mid", color=color.new(color.yellow, 0)) plot(gaussUpper, "Gaussian Upper", color=color.new(color.green, 0)) plot(gaussLower, "Gaussian Lower", color=color.new(color.red, 0))
