Cette stratégie est un système de trading quantitatif basé sur l'indicateur RSI et les principes de réversion moyenne. Elle identifie les opportunités d'inversion du marché en détectant les conditions de surachat et de survente, combinées à l'analyse de la fourchette de prix et à la position de prix de clôture.
La stratégie utilise plusieurs mécanismes de filtrage pour déterminer les signaux de négociation: premièrement, le prix doit atteindre un plus bas de 10 périodes, indiquant une condition de marché survendue; deuxièmement, la fourchette de prix du jour doit être la plus grande des 10 derniers jours de négociation, suggérant une volatilité accrue du marché; enfin, elle confirme les signaux de renversement potentiels en vérifiant si le prix de clôture est dans le quartile supérieur de la fourchette du jour.
Il s'agit d'une stratégie de réversion moyenne bien structurée avec une logique claire. Grâce au filtrage de conditions multiples et à la gestion dynamique des stop-loss, la stratégie capte efficacement les opportunités de rebond survendues du marché tout en contrôlant le risque. Bien qu'elle ait certaines limitations, la performance globale peut être améliorée grâce à une optimisation et à un raffinement raisonnables.
/*backtest start: 2024-11-04 00:00:00 end: 2024-12-04 00:00:00 period: 1h basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Larry Conners SMTP Strategy", overlay=true, margin_long=100, margin_short=100) // --- Inputs --- // Corrected the input type declaration by removing 'type=' tickSize = input.float(0.01, title="Tick Size (e.g., 1/8 for stocks)") // --- Calculate conditions --- // 1. Today the market must make a 10-period low low10 = ta.lowest(low, 10) is10PeriodLow = low == low10 // 2. Today's range must be the largest of the past 10 bars rangeToday = high - low maxRange10 = ta.highest(high - low, 10) isLargestRange = rangeToday == maxRange10 // 3. Today's close must be in the top 25 percent of today's range rangePercent = (close - low) / rangeToday isCloseInTop25 = rangePercent >= 0.75 // Combine all buy conditions buyCondition = is10PeriodLow and isLargestRange and isCloseInTop25 // --- Buy Entry (on the next day) --- var float buyPrice = na var bool orderPending = false var float stopLoss = na // Initialize stopLoss at the top level to avoid 'Undeclared identifier' errors if (buyCondition and strategy.position_size == 0) buyPrice := high + tickSize stopLoss := low orderPending := true // Condition to place buy order the next day or the day after if orderPending and ta.barssince(buyCondition) <= 2 strategy.entry("Buy", strategy.long, stop=buyPrice) orderPending := false // --- Stop-Loss and Trailing Stop --- if (strategy.position_size > 0) stopLoss := math.max(stopLoss, low) // Move stop to higher lows (manual trailing) strategy.exit("Exit", from_entry="Buy", stop=stopLoss) // --- Plotting --- // Highlight buy conditions bgcolor(buyCondition ? color.new(color.green, 50) : na) //plotshape(series=buyCondition, location=location.belowbar, color=color.green, style=shape.labelup, text="Buy Setup") // Plot Stop-Loss level for visualization //plot(strategy.position_size > 0 ? stopLoss : na, color=color.red, linewidth=2, title="Stop-Loss Level")