该策略是一个结合了高斯通道和随机相对强弱指数(Stochastic RSI)的趋势跟踪交易系统。高斯通道用于识别价格趋势和波动范围,而Stochastic RSI则作为过滤器来确认超买超卖条件,从而提高交易信号的准确性。策略通过观察价格与高斯通道边界的交叉以及Stochastic RSI的位置来生成交易信号。
策略的核心逻辑基于以下几个关键组件: 1. 高斯通道计算:使用高斯滤波器计算中线,并基于乘数设置上下通道带。高斯滤波器采用指数平滑方法,可以有效降低价格噪声。 2. Stochastic RSI指标:结合了随机指标和RSI的优点,通过%K和%D两条平滑线来识别超买超卖状态。 3. 入场条件: - 多头:价格突破高斯通道下轨且Stochastic RSI处于超卖区域 - 空头:价格跌破高斯通道上轨且Stochastic RSI处于超买区域 4. 出场条件: - 当价格穿越高斯通道中线 - 或Stochastic RSI达到相反的超买超卖水平
该策略通过结合高斯通道和Stochastic RSI,构建了一个兼具趋势跟踪和动量特征的交易系统。策略设计合理,具有较好的可扩展性和适应性。通过建议的优化方向,可以进一步提升策略的稳定性和盈利能力。在实际应用中,建议充分测试不同参数组合,并根据具体市场特征进行针对性优化。
/*backtest
start: 2025-01-21 00:00:00
end: 2025-02-20 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"ETH_USDT"}]
*/
//@version=6
strategy("Gaussian Channel + Stochastic RSI Filter", overlay=true, margin_long=100, margin_short=100)
// === INPUTS ===
input_length = input.int(100, title="Gaussian Channel Length", minval=1)
input_mult = input.float(2.0, title="Gaussian Channel Multiplier", minval=0.1, step=0.1)
stoch_rsi_period = input.int(14, title="Stochastic RSI Period", minval=1)
stoch_rsi_smoothK = input.int(3, title="Stochastic RSI Smooth K", minval=1)
stoch_rsi_smoothD = input.int(3, title="Stochastic RSI Smooth D", minval=1)
stoch_rsi_overbought = input.float(80.0, title="Stochastic RSI Overbought Level", minval=0, maxval=100)
stoch_rsi_oversold = input.float(20.0, title="Stochastic RSI Oversold Level", minval=0, maxval=100)
// === GAUSSIAN CHANNEL ===
// Gaussian filter calculation with proper initialization
gauss(src, len) =>
b = math.exp(-1.414 * 3.14159 / len)
a0 = 1 - b
var float f = na
f := na(f[1]) ? src : a0 * src + b * f[1]
// Calculate Gaussian channel
gaussian_channel_mid = gauss(close, input_length)
gaussian_channel_high = gaussian_channel_mid + gaussian_channel_mid * input_mult / 100
gaussian_channel_low = gaussian_channel_mid - gaussian_channel_mid * input_mult / 100
// Plot Gaussian Channel
plot(gaussian_channel_mid, color=color.blue, linewidth=2, title="Gaussian Channel Midline")
plot(gaussian_channel_high, color=color.green, linewidth=1, title="Gaussian Channel Upper Band")
plot(gaussian_channel_low, color=color.red, linewidth=1, title="Gaussian Channel Lower Band")
// === STOCHASTIC RSI ===
k = ta.sma(ta.stoch(close, high, low, stoch_rsi_period), stoch_rsi_smoothK)
d = ta.sma(k, stoch_rsi_smoothD)
is_oversold = k < stoch_rsi_oversold and d < stoch_rsi_oversold
is_overbought = k > stoch_rsi_overbought and d > stoch_rsi_overbought
// Plot Stochastic RSI
hline(stoch_rsi_overbought, "Overbought", color=color.red, linestyle=hline.style_dotted)
hline(stoch_rsi_oversold, "Oversold", color=color.green, linestyle=hline.style_dotted)
plot(k, color=color.blue, title="Stochastic RSI %K")
plot(d, color=color.orange, title="Stochastic RSI %D")
// === ENTRY AND EXIT LOGIC ===
// Long entry: Price crosses above Gaussian Channel lower band and Stochastic RSI is oversold
long_condition = ta.crossover(close, gaussian_channel_low) and is_oversold
// Short entry: Price crosses below Gaussian Channel upper band and Stochastic RSI is overbought
short_condition = ta.crossunder(close, gaussian_channel_high) and is_overbought
// Exit logic
long_exit = ta.crossunder(close, gaussian_channel_mid) or is_overbought
short_exit = ta.crossover(close, gaussian_channel_mid) or is_oversold
// Execute trades
if (long_condition)
strategy.entry("Long", strategy.long)
if (short_condition)
strategy.entry("Short", strategy.short)
if (long_exit)
strategy.close("Long")
if (short_exit)
strategy.close("Short")
// === SETTINGS ===
// Backtest date range
start_date = timestamp(2023, 1, 1, 0, 0)
end_date = timestamp(2069, 1, 1, 0, 0)
if (time < start_date or time > end_date)
strategy.close_all()