
Die Strategie ist ein Trend-Tracking-Trading-System, das eine Gauss-gewichtete Moving Average Channel und einen zufällig relativ starken Index (Stochastic RSI) kombiniert. Die Strategie baut einen Preiskanal mit der Gauss-gewichteten Methode auf und kombiniert die Kreuzungssignale der zufälligen RSI-Indikatoren, um die Ein- und Ausstiegsmomente zu bestimmen und die Dynamik der Trends zu erfassen und zu bestätigen. Die Strategie hat eine gute mathematische Grundlage und kann effektiv Marktlärm filtern und wichtige Trends erfassen.
Die Kernlogik der Strategie besteht aus zwei Hauptteilen:
Gauss-Kanal-System: Gebrauch von Gauss-Gewogenen Moving Averages (GWMA) und Gauss-Gewogenen Standarddifferenzen (GWSD) zur Konstruktion eines Preiskanals. GWMA verleiht den jüngsten Daten mehr Gewicht und macht die Gleichungsreaktion auf Preisänderungen empfindlicher.
Zufälliges RSI-System: Die Zufälligkeit des herkömmlichen RSI-Indikators wird berechnet, um die K- und D-Werte zu berechnen. Diese Verarbeitung ermöglicht eine bessere Identifizierung von Überkauf- und Überverkaufszonen und bietet ein genaueres Dynamiksignal.
Die Erzeugung von Handelssignalen basiert auf folgenden Bedingungen:
Durch die Kombination von Gauss-Kanälen und Zufalls-RSI-Indikatoren baut die Strategie ein Trend-Tracking-System auf, das auf einer soliden mathematischen Grundlage basiert. Die Strategie zeichnet sich in trendigen Märkten aus, muss jedoch auf die Optimierung der Parameter und die Anpassung an die Marktumgebung achten. Durch die Umsetzung der empfohlenen Optimierungsmaßnahmen können die Stabilität und die Profitabilität der Strategie weiter verbessert werden.
/*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))