Cette stratégie combine l'indicateur RSI et l'indicateur RSI lissé pour trouver des opportunités d'achat aux bas de prix. Lorsque l'indicateur RSI fait un nouveau bas alors que le prix ne fait pas un nouveau bas, il est considéré comme un signal de divergence haussière.
La stratégie repose principalement sur la caractéristique d'inversion du RSI, combinée à un jugement de tendance du RSI lissé, pour acheter lorsque le prix est sous pression tandis que le RSI est survendu.
Peut optimiser le timing d'entrée en ajustant les paramètres du RSI. Resserrer la distance de stop loss pour un arrêt plus rapide. Combiner avec d'autres indicateurs pour juger du risque de tendance, réduire le taux de faux renversement.
Améliorer encore les performances de la stratégie en ajustant les paramètres et en combinant davantage d'indicateurs.
La stratégie utilise la caractéristique d'inversion du RSI dans son ensemble. La combinaison de RSI double tire pleinement parti de l'effet d'inversion tout en introduisant également l'incertitude de la divergence des indicateurs. C'est une idée de stratégie d'indicateur typique. Peut améliorer l'adaptabilité de l'indicateur grâce à des tests et une optimisation incessants.
/*backtest start: 2024-01-30 00:00:00 end: 2024-02-29 00:00:00 period: 1m basePeriod: 1m 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/ // © BigBitsIO //@version=4 strategy(title="RSI and Smoothed RSI Bull Div Strategy [BigBitsIO]", shorttitle="RSI and Smoothed RSI Bull Div Strategy [BigBitsIO]", overlay=true, pyramiding=1, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=.1, slippage=0) TakeProfitPercent = input(3, title="Take Profit %", type=input.float, step=.25) StopLossPercent = input(1.75, title="Stop Loss %", type=input.float, step=.25) RSICurve = input(14, title="RSI Lookback Period", type=input.integer, step=1) BuyBelowTargetPercent = input(0, title="Buy Below Lowest Low In RSI Divergence Lookback Target %", type=input.float, step=.05) BuyBelowTargetSource = input(close, title="Source of Buy Below Target Price", type=input.source) SRSICurve = input(10, title="Smoothed RSI Lookback Period", type=input.integer, step=1) RSICurrentlyBelow = input(30, title="RSI Currently Below", type=input.integer, step=1) RSIDivergenceLookback = input(25, title="RSI Divergence Lookback Period", type=input.integer, step=1) RSILowestInDivergenceLookbackCurrentlyBelow = input(25, title="RSI Lowest In Divergence Lookback Currently Below", type=input.integer, step=1) RSISellAbove = input(65, title="RSI Sell Above", type=input.integer, step=1) MinimumSRSIDownTrend = input(3, title="Minimum SRSI Downtrend Length", type=input.integer, step=1) SRSICurrentlyBelow = input(35, title="Smoothed RSI Currently Below", type=input.integer, step=1) PlotTarget = input(false, title="Plot Target") RSI = rsi(close, RSICurve) SRSI = wma(2*wma(RSI, SRSICurve/2)-wma(RSI, SRSICurve), round(sqrt(SRSICurve))) // Hull moving average SRSITrendDownLength = 0 if (SRSI < SRSI[1]) SRSITrendDownLength := SRSITrendDownLength[1] + 1 // Strategy Specific ProfitTarget = (close * (TakeProfitPercent / 100)) / syminfo.mintick LossTarget = (close * (StopLossPercent / 100)) / syminfo.mintick BuyBelowTarget = BuyBelowTargetSource[(lowestbars(RSI, RSIDivergenceLookback)*-1)] - (BuyBelowTargetSource[(lowestbars(RSI, RSIDivergenceLookback)*-1)] * (BuyBelowTargetPercent / 100)) plot(PlotTarget ? BuyBelowTarget : na) bool IsABuy = RSI < RSICurrentlyBelow and SRSI < SRSICurrentlyBelow and lowest(SRSI, RSIDivergenceLookback) < RSILowestInDivergenceLookbackCurrentlyBelow and BuyBelowTargetSource < BuyBelowTarget and SRSITrendDownLength >= MinimumSRSIDownTrend and RSI > lowest(RSI, RSIDivergenceLookback) bool IsASell = RSI > RSISellAbove if IsABuy strategy.entry("Positive Trend", true) // buy by market strategy.exit("Take Profit or Stop Loss", "Positive Trend", profit = ProfitTarget, loss = LossTarget) if IsASell strategy.close("Positive Trend")