
La estrategia es un sistema de seguimiento de tendencias que combina un canal de media móvil ponderado en Gauss y un índice Stochastic RSI de fuerza relativamente aleatoria. La estrategia construye un canal de precios a través de un método de Gauss ponderado y combina señales cruzadas de un indicador RSI aleatorio para determinar los momentos de entrada y salida, para lograr la captura y la confirmación de la dinámica de la tendencia. La estrategia tiene una buena base matemática y puede filtrar el ruido del mercado de manera efectiva y capturar las principales tendencias.
La lógica central de la estrategia tiene dos partes principales:
Sistema de canales de Gauss: construye canales de precios utilizando promedios móviles ponderados en Gauss ((GWMA) y diferencias estándar ponderadas en Gauss ((GWSD)). El GWMA otorga un mayor peso a los datos recientes, lo que hace que la línea de la igualdad sea más sensible a la respuesta a los cambios de precios. La subida y bajada de canales se determina multiplicando el GWSD por el factor multiplicador.
Sistema de RSI aleatorio: procesamiento aleatorio de los indicadores RSI tradicionales para calcular los valores K y D. Este procesamiento permite identificar mejor las zonas de sobreventa y sobrecompra, proporcionando una señal de dinámica más precisa.
La generación de señales de negociación se basa en las siguientes condiciones:
La estrategia combina el canal de Gauss y el indicador RSI aleatorio para construir un sistema de seguimiento de tendencias con una sólida base matemática. La estrategia se desempeña de manera excelente en mercados con tendencias evidentes, pero se debe tener en cuenta la optimización de los parámetros y la adaptabilidad al entorno del mercado.
/*backtest
start: 2024-02-21 00:00:00
end: 2025-02-18 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Binance","currency":"ETH_USDT"}]
*/
//@version=5
strategy("Gaussian Channel + Stoch RSI Strategy", 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
// Gaussian standard deviation chosen as length/6 for a smooth curve
denom = (length / 6.0) * (length / 6.0)
for i = 0 to length - 1
x = i - half
w = math.exp(-(x * x) / (2 * denom))
sum += source[i] * w
norm += w
sum / norm
// Gaussian Weighted Standard Deviation Function
f_gaussian_std(source, length) =>
half = (length - 1) / 2.0
gavg = f_gaussian(source, length)
sum = 0.0
norm = 0.0
denom = (length / 6.0) * (length / 6.0)
for i = 0 to length - 1
x = i - half
w = math.exp(-(x * x)/(2*denom))
diff = source[i] - gavg
sum += diff * diff * w
norm += w
math.sqrt(sum/norm)
// Compute Gaussian Channel
gaussMid = f_gaussian(close, length)
gaussStd = f_gaussian_std(close, length)
gaussUpper = gaussMid + gaussStd * multiplier
gaussLower = gaussMid - gaussStd * multiplier
// Stochastic RSI Calculation
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)
// Conditions
// Long entry: Price closes above upper Gaussian line AND Stoch RSI K > D (stochastic is "up")
longCondition = close > gaussUpper and k > d
// Exit condition: Price closes below upper Gaussian line
exitCondition = close < gaussUpper
// Only trade in the specified date range
inDateRange = time >= timestamp("2018-01-01T00:00:00") and time < timestamp("2069-01-01T00:00:00")
// Submit Orders
if inDateRange
if longCondition and strategy.position_size <= 0
strategy.entry("Long", strategy.long)
if exitCondition and strategy.position_size > 0
strategy.close("Long")
// Plot Gaussian Channel
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))