Cette stratégie tire pleinement parti des moyennes mobiles et de l'indice de force relative pour identifier et suivre les tendances. Elle n'a besoin que de deux indicateurs pour déterminer la tendance et trouver le bon moment d'entrée/sortie.
La stratégie utilise trois EMA avec des périodes différentes, avec EMA-A ayant la période la plus courte, EMA-B moyenne et EMA-C la plus longue. Lorsque la plus courte EMA-A traverse au-dessus de la plus longue EMA-B, elle signale une tendance à la hausse, donc aller long. Inversement, lorsque EMA-A traverse en dessous de EMA-B, elle signale une tendance à la baisse, donc aller court. Pour filtrer les faux signaux, elle utilise également la plus longue EMA-C - en considérant seulement l'entrée après que le prix a brisé EMA-C.
La stratégie utilise également le RSI pour localiser les points de sortie. Lorsqu'il est long, il ferme la position si le RSI dépasse 70. Lorsqu'il est court, il sort si le RSI tombe en dessous de 30.
Ces risques peuvent être réduits en optimisant les paramètres RSI, en ajoutant des filtres et en les combinant avec l'analyse des tendances.
Cette stratégie combine des indicateurs de suivi de tendance et d'oscillateur pour l'identification et la capture de tendance. Avec un paramètre simple et une optimisation logique, elle peut être grandement améliorée tout en maintenant la simplicité.
/*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)