
Die Strategie ist ein Trend-Tracking-Trading-System, basierend auf einem benutzerdefinierten G-Kanal und einem Index-Moving-Average (EMA). Der G-Kanal besteht aus einem oberen, unteren und mittleren Gleis (a, b und avg) und bestimmt die Grenzen des Kanals durch dynamische Berechnung der aktuellen und historischen Preise. Die Strategie kombiniert die EMA als Trendfilter, um Handelssignale durch die Kreuzung von Preisen mit der Kanallinie und die Position der Beziehung zu der EMA zu erzeugen, um Markttrendwendepunkte effektiv zu erfassen.
Die Kernlogik der Strategie besteht aus zwei Hauptkomponenten: G-Kanal und EMA-Filter. Die G-Kanal-Berechnung basiert auf aktuellen Preisen und historischen Daten und passt die Kanalbreite dynamisch anhand von adaptiven Algorithmen an. Die Oberbahn (a) nimmt die größeren Werte des aktuellen Preises im Vergleich zum vorherigen Kurs und passt diese dynamisch an die Parameter für die Kanalbreite und Länge an.
Das G-Kanal- und EMA-Trendfilter-Trading-System ist eine vollständige Handelsstrategie, die Kanalbruch und Trendverfolgung kombiniert. Durch die dynamischen Eigenschaften des G-Kanals und die Trendbestätigungsfunktionen der EMA ist es möglich, Marktwendepunkte effektiv zu erfassen und Handelsrisiken zu kontrollieren. Obwohl es einige Einschränkungen gibt, wird die Gesamtleistung der Strategie durch die vorgeschlagene Optimierungsrichtung weiter verbessert.
/*backtest
start: 2024-11-04 00:00:00
end: 2024-12-04 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("G-Channel with EMA Strategy", overlay=true)
// G-Channel Indicator
length = input.int(100, title="G-Channel Length")
src = input(close, title="Source")
var float a = na
var float b = na
a := math.max(src, nz(a[1])) - (nz(a[1]) - nz(b[1])) / length
b := math.min(src, nz(b[1])) + (nz(a[1]) - nz(b[1])) / length
avg = (a + b) / 2
// G-Channel buy/sell signals
crossup = ta.crossover(close, b)
crossdn = ta.crossunder(close, a)
bullish = ta.barssince(crossdn) <= ta.barssince(crossup)
// EMA Indicator
emaLength = input.int(200, title="EMA Length")
ema = ta.ema(close, emaLength)
// Buy Condition: G-Channel gives a buy signal and price is below EMA
buySignal = bullish and close < ema
// Sell Condition: G-Channel gives a sell signal and price is above EMA
sellSignal = not bullish and close > ema
// Plotting the G-Channel and EMA
plot(a, title="Upper", color=color.blue, linewidth=2, transp=100)
plot(b, title="Lower", color=color.blue, linewidth=2, transp=100)
plot(avg, title="Average", color=bullish ? color.lime : color.red, linewidth=1, transp=90)
plot(ema, title="EMA", color=color.orange, linewidth=2)
// Strategy Execution
if (buySignal)
strategy.entry("Buy", strategy.long)
if (sellSignal)
strategy.entry("Sell", strategy.short)
// Plot Buy/Sell Signals
plotshape(buySignal, location=location.belowbar, color=color.green, style=shape.labelup, text="Buy")
plotshape(sellSignal, location=location.abovebar, color=color.red, style=shape.labeldown, text="Sell")