Mehrjähriger gleitender Durchschnittskanaltrend nach Strategie

Schriftsteller:ChaoZhang, Datum: 2024-02-20 13:45:42
Tags:

img

Übersicht

Dies ist eine Swing-Strategie, die für Trending-Märkte wie Krypto und Aktien entwickelt wurde und große Zeitrahmen wie 8 Stunden verwendet.

Gehen Sie lang, wenn die Schließung über der durchschnittlichen Linie liegt, die auf die Höhe angewendet wird. Gehen Sie kurz, wenn die Schließung unter der durchschnittlichen Linie liegt, die auf die Tiefe angewendet wird.

Strategie Logik

Die Strategie verwendet 7 verschiedene Arten von gleitenden Durchschnitten, darunter SMA, EMA, VWMA, ALMA, SMMA, LSMA und VWMA.

Die durchschnittliche Linie, die auf hohe Preise angewendet wird, wird avg_high genannt. Die Linie, die auf niedrige Preise angewendet wird, wird avg_low genannt. Diese beiden Linien bilden einen Kanal.

Gehen Sie lang, wenn die Schließung über dem Durchschnitt liegt. Gehen Sie kurz, wenn die Schließung unter dem Durchschnitt liegt.

Der Stop Loss für Long ist avg_low. Take Profit ist Eintrittspreis *(1 + tp_long). Kurz gesagt, Stop Loss ist avg_high, Take Profit ist Eintrittspreis *(1 - tp_short).

Analyse der Vorteile

Der größte Vorteil dieser Strategie besteht darin, mehrere gleitende Durchschnitte zu nutzen, um die Rentabilität zu verbessern.

Ein weiterer Vorteil ist der Kanalansatz, der die Stop-Loss-Range begrenzt und das für den Swing-Handel geeignete Risiko reduziert.

Risikoanalyse

Die Strategie birgt zwei Hauptrisiken:

  1. Die Kombination von mehreren MAs macht das Parameter-Tuning komplex und erfordert viele Tests und Optimierungen, um das Beste zu finden.

  2. In seitlichen oder nicht-trendigen Märkten führt die Strategie in der Regel zu Verlusten und Whipsaws.

Um die Risiken zu mindern, wählen Sie Produkte mit klaren Trends und führen Sie umfangreiche Backtests und Optimierungen durch, um Parameter zu finden, die für die aktuellen Marktbedingungen geeignet sind.

Optimierungsrichtlinien

Bereiche für eine weitere Optimierung:

  1. Testen Sie mehr Arten von MAs, um bessere Kombinationen zu finden, wie SMA, EMA, KAMA, TEMA usw.

  2. Optimieren Sie die Länge der MAs und die Kanalbreite, um optimale Parameter zu ermitteln.

  3. Verschiedene Profit- und Stop-Loss-Mechanismen wie Trailing- oder Dynamic-Stops testen.

  4. Verwenden Sie Trend-Messwerte wie ADX, ATR, um Schlagzeilen während unruhiger Märkte zu vermeiden.

  5. Optimieren Sie die Ein- und Ausstiegslogik mit zusätzlichen Filtern, um ungültige Trades zu reduzieren.

Zusammenfassung

Diese Swing-Trend-Folge-Strategie verbessert die Rentabilität mit mehreren MAs und reduziert das Risiko über Kanäle. Es funktioniert gut für Trending-Produkte nach Parameteroptimierung. Aber kann bei Trendumkehrungen große Verluste erleiden. Weitere Optimierungen sind erforderlich, um Abwärtsrisiken zu mindern.


/*backtest
start: 2024-01-20 00:00:00
end: 2024-02-19 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © exlux99

//@version=4

strategy(title="High/Low channel swing", shorttitle="Multi MA swing", overlay=true)


fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2000, title = "From Year", minval = 1970)
 //monday and session 
// To Date Inputs
toDay = input(defval = 31, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2021, title = "To Year", minval = 1970)

startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true

//////
length_ma= input(defval=12, title="Length Moving averages", minval=1)

////////////////////////////////SETUP///////////////////////////////////////////

sma_high   = sma(high, length_ma)
ema_high   = ema(high, length_ma)
wma_high   = wma(high, length_ma)
alma_high  = alma(high,length_ma, 0.85, 6)
smma_high = rma(high,length_ma)
lsma_high = linreg(high, length_ma, 0)
vwma_high = vwma(high,length_ma)



avg_high = (sma_high+ema_high+wma_high+alma_high+smma_high+lsma_high+vwma_high)/7

///////////////////////////////////////////

sma_low   = sma(low, length_ma)
ema_low   = ema(low, length_ma)
wma_low   = wma(low, length_ma)
alma_low  = alma(low,length_ma, 0.85, 6)
smma_low = rma(low,length_ma)
lsma_low = linreg(low, length_ma, 0)
vwma_low = vwma(low,length_ma)



avg_low = (sma_low+ema_low+wma_low+alma_low+smma_low+lsma_low+vwma_low)/7

////////////////////////////PLOTTING////////////////////////////////////////////


plot(avg_high , title="avg", color=color.green, linewidth = 4)
plot(avg_low , title="avg", color=color.red, linewidth = 4)

long= close > avg_high
short = close < avg_low

tplong=input(0.06, title="TP Long", step=0.01)
sllong=input(0.05, title="SL Long", step=0.01)

tpshort=input(0.045, title="TP Short", step=0.01)
slshort=input(0.05, title="SL Short", step=0.01)

if(time_cond)
    strategy.entry("long",1,when=long)
    strategy.exit("closelong", "long" , profit = close * tplong / syminfo.mintick, loss = close * sllong / syminfo.mintick, alert_message = "closelong")
    strategy.close("long", when=crossunder(low,avg_low))
    
    
    strategy.entry("short",0,when=short)
    strategy.exit("closeshort", "short" , profit = close * tpshort / syminfo.mintick, loss = close * slshort / syminfo.mintick, alert_message = "closeshort")
    strategy.close("short",when=crossover(high,avg_high))



Mehr