[SM-021-v1.1] Gaussian Channel Strategy - Long & Short by sebamarghella
By sebamarghella
Performance Metrics
- Author: sebamarghella
- Symbol: INDEX:BTCUSD
- Timeframe: 4 hours
- Net P&L: +45,084.10 USD (+4,508.41%)
- Win Rate: 44.6%
- Profit Factor: 2.325
- Max Drawdown: 5,363.18 USD (20.53%)
- Total Trades: 177
Description
This is a trend-following breakout strategy that combines a sophisticated Moving Average (the Gaussian Channel) with a momentum oscillator (Stochastic RSI).It aims to catch strong trend moves when the price breaks outside of the volatility bands, using the Stochastic RSI to confirm sufficient momentum exists.Here is a detailed breakdown of how the strategy works:1. Primary Indicator: The Gaussian ChannelThe core of this strategy is a custom indicator originally developed by DonovanWall. It is designed to reduce the "lag" (delay) typically found in standard moving averages while remaining very smooth.The Filter (Middle Line): It calculates a "Pole" based Gaussian filter. If the line is sloping up, it paints green (bullish); if sloping down, it paints red (bearish).The Bands (Volatility): It calculates a True Range (volatility) multiplier to create an Upper Band (hband) and a Lower Band (lband).Lag Reduction: The script includes logic to artificially reduce lag or increase response speed (modeLag and modeFast inputs).2. Secondary Indicator: Stochastic RSIThe strategy uses standard Stochastic RSI settings (14, 100, 3, 3 inputs) to measure momentum.K Line: The primary line used for decision-making in this script.3. Strategy LogicLong Trade Setup (Buying)The strategy enters a Long position when ALL of the following conditions are met:Trend is Bullish: The Gaussian Filter is sloping upwards (Green).Breakout: The Closing Price is above the Gaussian Upper Band (hband).Momentum Validation: The Stoch RSI k line is at an extreme reading (either > 80 or 80 or var arr = array.new(9, 0.0) _fn = nz(_s) _f1 = float(na) _len = math.max(1, math.min(int(_i), 9)) for i = 0 to _len - 1 _fn := _a * _fn + (1 - _a) * arr.get(i) _f1 := i == 0 ? _fn : _f1 arr.set(i, _fn) [_fn, _f1]