
Cette stratégie est un système de trading de superposition d’indicateurs à plusieurs niveaux basé sur l’indice de force relative (RSI). La stratégie fonctionne dans une fenêtre de temps de négociation spécifique, identifie les opportunités de négociation grâce aux signaux de surachat et de survente de l’indicateur RSI, et la combine avec un mécanisme d’ajustement de position dynamique pour optimiser les rendements globaux en créant des positions par lots lorsque le marché évolue dans la direction opposée. La stratégie utilise une méthode de profit cible basée sur le prix d’entrée moyen pour la gestion du stop-profit.
La stratégie repose principalement sur les éléments fondamentaux suivants :
Cette stratégie forme un système de trading relativement complet en combinant l’indicateur RSI avec le mécanisme d’ouverture de lots. L’avantage principal de la stratégie réside dans son mécanisme de filtrage des signaux à plusieurs niveaux et sa méthode de gestion flexible des positions, mais en même temps, il est également nécessaire de prêter attention à des problèmes tels que les risques de marché de tendance et l’optimisation des paramètres. Les performances globales de la stratégie peuvent encore être améliorées en ajoutant des filtres de tendance, en optimisant les mécanismes de stop-loss et d’autres améliorations.
/*backtest
start: 2024-12-10 00:00:00
end: 2025-01-08 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/
//@version=6
strategy("TonyM RSI", overlay=true)
// Input Settings
rsiLengthInput = input.int(14, minval=1, title="RSI Length", group="RSI Settings")
rsiSourceInput = input.source(close, "Source", group="RSI Settings")
startHour = input.int(2, "Start Hour", minval=0, maxval=23, group="Trading Window")
endHour = input.int(4, "End Hour", minval=0, maxval=23, group="Trading Window")
// RSI Calculation
change = ta.change(rsiSourceInput)
up = ta.rma(math.max(change, 0), rsiLengthInput)
down = ta.rma(-math.min(change, 0), rsiLengthInput)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
// Time Filter
inTradingWindow = (hour >= startHour and hour < endHour)
// Strategy Settings
buyLevel = 30
sellLevel = 70
scaleDistance = 1.0 // Distance in points to add to the position
takeProfitPoints = 1.5 // Profit target from average price
initialQty = 1 // Initial trade size
scalingQty = 1 // Additional trade size for scaling
// Trade Logic
if inTradingWindow
// Entry Logic
if rsi <= buyLevel and strategy.position_size == 0
strategy.entry("Buy", strategy.long, qty=initialQty)
if rsi >= sellLevel and strategy.position_size == 0
strategy.entry("Sell", strategy.short, qty=initialQty)
// Scaling Logic
if strategy.position_size > 0 and close <= strategy.position_avg_price - scaleDistance
strategy.entry("Scale Buy", strategy.long, qty=scalingQty)
if strategy.position_size < 0 and close >= strategy.position_avg_price + scaleDistance
strategy.entry("Scale Sell", strategy.short, qty=scalingQty)
// Exit Logic (based on average price)
if strategy.position_size > 0
strategy.exit("Take Profit Long", "Buy", limit=strategy.position_avg_price + takeProfitPoints)
if strategy.position_size < 0
strategy.exit("Take Profit Short", "Sell", limit=strategy.position_avg_price - takeProfitPoints)
// Plot RSI
plot(rsi, "RSI", color=color.blue, linewidth=1)
rsiUpperBand = hline(70, "RSI Upper Band", color=color.red)
rsiLowerBand = hline(30, "RSI Lower Band", color=color.green)
fill(rsiUpperBand, rsiLowerBand, color=color.new(color.gray, 90))