Diese Strategie ist eine kurzfristige Umkehrhandelsstrategie, die auf dem Bollinger-Band-Indikator basiert. Sie kombiniert gleitende Durchschnitte, Standardabweichungen und Bollinger-Bänder, um nach Möglichkeiten für den Umkehrhandel zu suchen, wenn die Preise ungewöhnlich verteilt sind.
Berechnen Sie gleitenden Durchschnitt und Standardabweichung. Verwenden Sie die Funktion sma ((() zur Berechnung des gleitenden Durchschnitts sma und die Funktion stdev ((() zur Berechnung der Standardabweichung.
Berechnen Sie die obere und untere Schiene des Bollingerbands nach gleitendem Durchschnitt und Standardabweichung.1 und die untere Schiene ist die Preisstandardabweichung1.
Wenn der Preis durch die obere oder untere Schiene bricht, zeigt dies an, dass der Preis abnormal ist.
Insbesondere, wenn der Preis niedriger als die untere Schiene ist, gehen wir lang; wenn der Preis höher ist als die obere Schiene, gehen wir kurz.
Verwenden Sie den Bollinger-Band-Kanal, um abnormale Preise zu beurteilen, was eine Grundlage für den Umkehrhandel bietet.
In Kombination mit dem gleitenden Durchschnittsfaktor können einige laute Trades effektiv ausfiltert werden.
Die Einführung des Standardabweichungsfaktors macht den Bollinger-Band-Kanal dynamischer, um abnormale Preise besser beurteilen zu können.
Diese Strategie hat relativ geringe Abzüge und eine gewisse Stabilität.
Der Bollinger-Band-Indikator kann die abnormale Kurslage nicht vollständig bestimmen.
Es wird empfohlen, die Parameter entsprechend anzupassen, um die Handelsfrequenz zu kontrollieren.
Die Breakout-Signale der oberen und unteren Bollinger-Bänder können lange anhalten.
Einführung eines angemessenen Stop-Loss zur Risikokontrolle.
Optimieren Sie den gleitenden Durchschnittszyklus und die Standardabweichungsparameter, um einen vernünftigeren Bollinger-Band-Kanal zu erhalten.
Erhöhen Sie Hilfsfaktoren wie EMA und MACD, um einige Signale zu filtern.
Einführung von Stop-Loss- und Positionskontrollmechanismen.
Optimierung der Positionsgröße und der Positionskontrollmaßnahmen.
Diese Strategie beurteilt abnormale Preise durch den Bollinger Band-Indikator und macht Umkehrtrades mit gleitenden Durchschnitten und Standardabweichungsparametern. Sie hat eine gewisse Stabilität. Wir müssen den maximalen Drawdown der Strategie weiter reduzieren und die Stabilität durch Mittel wie Parameteroptimierung, Einführung von Hilfsfaktoren, Stop-Loss-Management und Positionskontrolle verbessern.
/*backtest start: 2022-12-12 00:00:00 end: 2023-12-18 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy("BCE Version of EMA, SMA Mean Reversion", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100) // Inputs st_yr_inp = input(defval=2017, title='Backtest Start Year') st_mn_inp = input(defval=01, title='Backtest Start Month') st_dy_inp = input(defval=01, title='Backtest Start Day') en_yr_inp = input(defval=2025, title='Backtest End Year') en_mn_inp = input(defval=01, title='Backtest End Month') en_dy_inp = input(defval=01, title='Backtest End Day') sma_lookback = input(defval=100, title="Lookback Period For SMA") ema_lookback = input(defval=10, title="Lookback Period For EMA") long_diff_perc = input(defval=6, title="Percentage Deviation From SMA to go Long")/100 short_diff_perc = input(defval=20, title="Percentage Deviation From SMA to go Short")/100 ema_filter_bars = input(defval=4, title="The number of bars the EMA must rise/fall") lng_allwd = input(defval=true, title="Allow Longs?") srt_allwd = input(defval=true, title="Allow Shorts?") use_stop = input(defval=true, title="Use Stoploss?") stop_perc = input(defval=30, title="Stop Loss Percentage")/100 // Dates start = timestamp(st_yr_inp, st_mn_inp, st_dy_inp,00,00) end = timestamp(en_yr_inp, en_mn_inp, en_dy_inp,00,00) can_trade = time >= start and time <= end // Indicators Setup sma = sma(close, sma_lookback) ema = ema(close, ema_lookback) // Strategy Calcuations close_stdev = stdev(close, sma_lookback) sd1_upper = close + (close_stdev * 1) sd1_lower = close - (close_stdev * 1) close_diff = (close - sma) / sma // Entries and Exits longCondition = close > sma and open > sma if (time >= start and time <= end) if (longCondition) strategy.entry("Long", strategy.long) if use_stop stop_price = close * (1 - stop_perc) strategy.order("Long Stoploss", false, stop=stop_price) shortCondition = close < sma and open < sma if (shortCondition) // strategy.entry("Short", strategy.short) // if use_stop // stop_price = close * (1 + stop_perc) // strategy.order("Short Stoploss", true, stop=stop_price) //if (time >= start) strategy.close("Long", when=close < sma and open < sma) //strategy.cancel("Long Stoploss", when=sma < sma[1]) // strategy.close("Short", when=close > sma and open > sma) //strategy.cancel("Short Stoploss", when=close_diff<=0) // Plotting sma_col = sma > sma[1] ? green : red ema_fill = close_diff <= -long_diff_perc ? lime : close_diff >= short_diff_perc ? maroon : aqua p_sma = plot(sma, color=sma_col, linewidth=3) p_ema = plot(ema, color=black, linewidth=2) p_sd1 = plot(sd1_upper, color=black, linewidth=1, transp=85) p_sd2 = plot(sd1_lower, color=black, linewidth=1, transp=85) fill(p_sd1, p_sd2, title='STDEV Fill', color=silver, transp=80) fill(p_sma, p_ema, title='EMA > Mean Percentage', color=ema_fill, transp=80)