
La stratégie est un système de trading quantitatif basé sur l’indicateur RSI et le principe de la régression moyenne. Il capte les occasions de reprise du marché en identifiant les conditions de survente et de survente du marché, en combinaison avec la portée des fluctuations des prix et la position de clôture des prix. L’idée centrale de la stratégie est de rechercher des occasions de reprise après l’apparition d’un état extrême du marché et de gérer le risque en définissant des conditions d’entrée strictes et des arrêts dynamiques.
La stratégie utilise plusieurs mécanismes de filtrage pour identifier les signaux de négociation: d’abord, il faut que le prix crée 10 cycles de nouveaux bas, indiquant que le marché est en survente; ensuite, il faut que la fourchette de fluctuation des prix de la journée soit maximale pendant près de 10 jours de négociation, indiquant que la fluctuation du marché s’intensifie; enfin, il faut confirmer le revirement potentiel en déterminant si le prix de clôture est dans le quart supérieur de la fourchette de prix de la journée.
Il s’agit d’une stratégie de retour à la valeur moyenne structurée et logiquement claire. Grâce à un filtrage multiconditionnel et à une gestion dynamique des pertes, la stratégie est capable de capturer efficacement les occasions de rebond du marché tout en contrôlant les risques. Bien qu’il existe certaines limitations, la performance globale de la stratégie peut être améliorée par une optimisation et une amélioration 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")