Diese Strategie nutzt die gleitenden Durchschnittswerte und den Relative Strength Index voll aus, um Trends zu identifizieren und zu verfolgen. Sie benötigt nur zwei Indikatoren, um den Trend zu bestimmen und den richtigen Eintritts-/Austrittszeitpunkt zu finden.
Die Strategie verwendet drei EMAs mit unterschiedlichen Perioden, wobei EMA-A die kürzeste Periode, EMA-B das mittlere und EMA-C das längste hat. Wenn die kürzere EMA-A über die längere EMA-B überschreitet, signalisiert sie einen Aufwärtstrend und geht damit lang. Umgekehrt signalisiert EMA-A, wenn sie unter EMA-B überschreitet, einen Abwärtstrend und geht damit kurz. Um falsche Signale zu filtern, verwendet sie auch die längste EMA-C - nur unter Berücksichtigung des Eingangs nach dem Preisbruch EMA-C.
Die Strategie verwendet auch den RSI, um Exit-Punkte zu lokalisieren. Wenn es lang ist, schließt es die Position, wenn der RSI über 70 fällt. Wenn es kurz ist, geht es aus, wenn der RSI unter 30 fällt. Dies sperrt den Trendgewinn und verhindert, dass Verluste weiter zunehmen.
Diese Risiken können durch die Optimierung der RSI-Parameter, das Hinzufügen von Filtern und die Kombination mit der Trendanalyse reduziert werden.
Diese Strategie kombiniert Trend-Folgen und Oszillator-Indikatoren zur Trendidentifizierung und -Erfassung. Mit einfachen Parametern und Logikoptimierung kann sie erheblich verbessert werden, während die Einfachheit beibehalten wird.
/*backtest start: 2023-08-26 00:00:00 end: 2023-09-25 00:00:00 period: 2h 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/ //@author Alorse //@version=5 // strategy(title='Tendency EMA + RSI [Alorse]', shorttitle='Tendece EMA + RSI [Alorse]', overlay=true, pyramiding=0, currency=currency.USD, default_qty_type=strategy.percent_of_equity, initial_capital=1000, default_qty_value=20, commission_type=strategy.commission.percent, commission_value=0.01) // Bollinger Bands len = input.int(14, minval=1, title='Length', group='RSI') src = input.source(close, 'Source', group='RSI') rsi = ta.rsi(src, len) // Moving Averages len_a = input.int(10, minval=1, title='EMA A Length', group='Moving Averages') out_a = ta.ema(close, len_a) plot(out_a, title='EMA A', color=color.purple) len_b = input.int(20, minval=1, title='EMA B Length', group='Moving Averages') out_b = ta.ema(close, len_b) plot(out_b, title='EMA B', color=color.orange) len_c = input.int(100, minval=1, title='EMA C Length', group='Moving Averages') out_c = ta.ema(close, len_c) plot(out_c, title='EMA B', color=color.green) // Strategy Conditions stratGroup = 'Strategy' showLong = input.bool(true, title='Long entries', group=stratGroup) showShort = input.bool(false, title='Short entries', group=stratGroup) closeAfterXBars = input.bool(true, title='Close after X # bars', tooltip='If trade is in profit', group=stratGroup) xBars = input.int(24, title='# bars') entryLong = ta.crossover(out_a, out_b) and out_a > out_c and close > open exitLong = rsi > 70 entryShort = ta.crossunder(out_a, out_b) and out_a < out_c and close < open exitShort = rsi < 30 bought = strategy.opentrades[0] == 1 and strategy.position_size[0] > strategy.position_size[1] entry_price = ta.valuewhen(bought, open, 0) var int nPastBars = 0 if strategy.position_size > 0 nPastBars := nPastBars + 1 nPastBars if strategy.position_size == 0 nPastBars := 0 nPastBars if closeAfterXBars exitLong := nPastBars >= xBars and close > entry_price ? true : exitLong exitLong exitShort := nPastBars >= xBars and close < entry_price ? true : exitShort exitShort // Long Entry strategy.entry('Long', strategy.long, when=entryLong and showLong) strategy.close('Long', when=exitLong) // Short Entry strategy.entry('Short', strategy.short, when=entryShort and showShort) strategy.close('Short', when=exitShort)