Stratégie de notation d'identification du swing

RSI SMA VOLUME PATTERN
Date de création: 2025-09-09 09:24:08 Dernière modification: 2025-09-09 09:24:08
Copier: 0 Nombre de clics: 275
2
Suivre
319
Abonnés

Stratégie de notation d’identification du swing Stratégie de notation d’identification du swing

Ce n’est pas une stratégie de swing ordinaire, mais un système de tir de précision avec une notation d’IA

Où est le problème avec les stratégies traditionnelles d’oscillation ? Il y a trop de signaux, une mauvaise qualité et de fausses percées fréquentes.Chaque signal a une note de qualité de 1 à 5 points, et seuls les signaux de qualité supérieure à 4 points sont échangés.

La logique de base est simple et grossière: identifiez le Higher Low et le Lower High, puis donnez un score au signal en 4 dimensions.Il suffit de 4 minutes pour ouvrir le magasin et filtrer directement 80% des signaux de déchets

Où un système de notation à cinq dimensions est-il meilleur qu’un seul indicateur ?

1 point de baseLa présence d’un mouvement est confirmée. Confirmation de la livraison + 1 pointLe nombre de transactions sur 20 cycles est 1,2 fois supérieur à la valeur moyenne, ce qui indique que les fonds sont validés. Le RSI est à + 1 pointLe RSI se situe entre 30 et 70 pour éviter les faux signaux de survente. L’entité de la ligne K + 1 pointLe nombre d’entités représentant plus de 60% de la population mondiale est estimé à plus d’un million de personnes. La tendance est à l’alignement + 1 pointLe prix, le MA20 et le MA50 sont tous dans le même sens.

Résultat: 5 points pour un signal complet avec le plus de chances de succès, 4 points ou plus pour un signal négociable, 3 points ou moins pour un signal négligé.

La conception de stop-loss: une limite de 10 cycles, et non un ATR à réglage aléatoire

La logique de l’arrêt des dommages est très claire:

  • Le plus grand arrêt est le plus bas des 10 lignes K.
  • Le stop loss est égal au sommet des 10 dernières lignes K.

Pourquoi 10 cycles ?Comme la nature de la stratégie oscillante est de capturer des retournements à court terme, les 10 cycles permettent à la fois de donner suffisamment de marge de manœuvre au prix et de ne pas laisser une distance de rupture trop grande.

Les signaux d’échec sont aussi des opportunités commerciales

La stratégie identifie également les “victoires de l’échec”:

  • Higher Low échoue: des niveaux plus élevés et des niveaux plus bas se forment
  • Lower High faillit: formation d’un plus bas haut et une nouvelle percée

Ces échecs sont souvent le signe d’une accélération de la tendance et constituent le moment idéal pour un revers.

Signal continu = confirmation de la tendance

Lorsque deux lignes K consécutives se présentent dans la même direction, le signe de confirmation est indiqué avec un diamant. Cela signifie généralement:

  • La tendance à la hausse est établie
  • La tendance est à la baisse

Les signaux en série ont généralement un taux de réussite de 15 à 20% supérieur à ceux des signaux individuels.

Scénario d’application: prédominance des turbulences / marché déconnecté

Le meilleur environnement

  • Des marchés qui ont une tendance claire mais qui se retournent souvent
  • Variabilité modérée (pas extrêmement calme ou extrêmement agité)
  • Variétés dont le rendement est relativement stable

Évitez les scénarios

  • Les tempêtes unilatérales se déchaînent (les signaux oscillants sont fréquemment détectés)
  • Disque horizontal à très faible oscillation (signaux rares et de mauvaise qualité)
  • Variétés minoritaires dont le rendement est très instable

Avertissement: les retours sur le passé ne sont pas synonymes de bénéfices futurs

Les risques sont clairs

  1. Les stratégies peuvent présenter des pertes continues, en particulier pendant les périodes de conversion de tendances
  2. Les signaux de plus de 4 minutes ont une qualité élevée, mais un taux d’échec de 30 à 40%
  3. La conception de stop loss est relativement souple, et les pertes peuvent être plus importantes.
  4. Des écarts de performances dans différents environnements de marché

Conseils en gestion de fonds: risque unique ne dépassant pas 2% du compte, suspension de la transaction après 3 pertes consécutives et réévaluation de la situation du marché.

Code source de la stratégie
/*backtest
start: 2024-09-09 00:00:00
end: 2025-09-07 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT","balance":500000}]
*/

//@version=6
strategy("Higher Lows, Lower Highs & Failures with Signal Quality Scoring", overlay=true)

// --- Higher Low detection ---
shares = 1
minScore = 4  // Minimum score to take trades

lowPoint      = ta.lowest(low, 3)
prevLowPoint  = ta.lowest(low[3], 3)
isHigherLow   = low == lowPoint and low > prevLowPoint
bullConfirm   = isHigherLow and close > open

// --- Lower High detection ---
highPoint     = ta.highest(high, 3)
prevHighPoint = ta.highest(high[3], 3)
isLowerHigh   = high == highPoint and high < prevHighPoint
bearConfirm   = isLowerHigh and close < open

// --- Failures ---
failHigherLow = isHigherLow[1] and low < low[1]
failLowerHigh = isLowerHigh[1] and high > high[1]

// --- 2-in-a-row detection ---
bullSecond = bullConfirm and bullConfirm[1]
bearSecond = bearConfirm and bearConfirm[1]

// --- SIGNAL QUALITY SCORING (1-5 scale) ---
bullScore = if bullConfirm
    score = 1  // Base score
    
    // Factor 1: Volume confirmation
    avgVolume = ta.sma(volume, 20)
    if volume > avgVolume * 1.2
        score := score + 1
        
    // Factor 2: RSI positioning
    rsi = ta.rsi(close, 14)
    if rsi < 70 and rsi > 30
        score := score + 1
        
    // Factor 3: Candle strength
    bodySize = math.abs(close - open)
    candleRange = high - low
    bodyRatio = candleRange > 0 ? bodySize / candleRange : 0
    if bodyRatio > 0.6
        score := score + 1
        
    // Factor 4: Trend alignment
    ma20 = ta.sma(close, 20)
    ma50 = ta.sma(close, 50)
    if ma20 > ma50 and close > ma20
        score := score + 1
        
    math.max(1, math.min(5, score))
else
    na

bearScore = if bearConfirm
    score = 1  // Base score
    
    // Factor 1: Volume confirmation
    avgVolume = ta.sma(volume, 20)
    if volume > avgVolume * 1.2
        score := score + 1
        
    // Factor 2: RSI positioning
    rsi = ta.rsi(close, 14)
    if rsi > 30 and rsi < 70
        score := score + 1
        
    // Factor 3: Candle strength
    bodySize = math.abs(close - open)
    candleRange = high - low
    bodyRatio = candleRange > 0 ? bodySize / candleRange : 0
    if bodyRatio > 0.6
        score := score + 1
        
    // Factor 4: Trend alignment
    ma20 = ta.sma(close, 20)
    ma50 = ta.sma(close, 50)
    if ma20 < ma50 and close < ma20
        score := score + 1
        
    math.max(1, math.min(5, score))
else
    na

// --- Plot main signals with score-based styling ---
// Bullish signals
plotshape(bullConfirm and bullScore == 1, "Bull Score 1", shape.triangleup, location.belowbar, color.gray, size=size.tiny)
plotshape(bullConfirm and bullScore == 2, "Bull Score 2", shape.triangleup, location.belowbar, color.orange, size=size.small)
plotshape(bullConfirm and bullScore == 3, "Bull Score 3", shape.triangleup, location.belowbar, color.yellow, size=size.normal)
plotshape(bullConfirm and bullScore == 4, "Bull Score 4", shape.triangleup, location.belowbar, color.lime, size=size.normal)
plotshape(bullConfirm and bullScore == 5, "Bull Score 5", shape.triangleup, location.belowbar, color.green, size=size.large)

// Bearish signals
plotshape(bearConfirm and bearScore == 1, "Bear Score 1", shape.triangledown, location.abovebar, color.gray, size=size.tiny)
plotshape(bearConfirm and bearScore == 2, "Bear Score 2", shape.triangledown, location.abovebar, color.orange, size=size.small)
plotshape(bearConfirm and bearScore == 3, "Bear Score 3", shape.triangledown, location.abovebar, color.yellow, size=size.normal)
plotshape(bearConfirm and bearScore == 4, "Bear Score 4", shape.triangledown, location.abovebar, color.lime, size=size.normal)
plotshape(bearConfirm and bearScore == 5, "Bear Score 5", shape.triangledown, location.abovebar, color.green, size=size.large)

// --- Plot failures ---
plotshape(failHigherLow, "Failed Higher Low", shape.arrowdown, location.abovebar, color.red, size=size.small)
plotshape(failLowerHigh, "Failed Lower High", shape.arrowup, location.belowbar, color.green, size=size.small)

// --- Plot consecutive signals ---
plotshape(bullSecond, "Double Bullish Star", shape.diamond, location.bottom, color.lime, size=size.tiny)
plotshape(bearSecond, "Double Bearish Star", shape.diamond, location.top, color.red, size=size.tiny)

// --- Display score labels ---
if bullConfirm
    labelColor = bullScore == 1 ? color.gray : bullScore == 2 ? color.orange : bullScore == 3 ? color.yellow : bullScore == 4 ? color.lime : color.green
    label.new(bar_index, low - (high - low) * 0.1, "↑ " + str.tostring(bullScore), style=label.style_label_up, color=labelColor, textcolor=color.white, size=size.small)

if bearConfirm
    labelColor = bearScore == 1 ? color.gray : bearScore == 2 ? color.orange : bearScore == 3 ? color.yellow : bearScore == 4 ? color.lime : color.green
    label.new(bar_index, high + (high - low) * 0.1, "↓ " + str.tostring(bearScore), style=label.style_label_down, color=labelColor, textcolor=color.white, size=size.small)

// --- Alerts for high-quality signals only ---
alertcondition(bullConfirm and bullScore >= 4, "High Quality Bullish", "Strong Bullish Signal Detected")
alertcondition(bearConfirm and bearScore >= 4, "High Quality Bearish", "Strong Bearish Signal Detected")

// --- STRATEGY LOGIC ---
// Track previous highs and lows for stop levels
var float prevHigh = na
var float prevLow = na

// Update previous high/low when we get signals
if bullConfirm and bullScore >= minScore
    prevLow := ta.lowest(low, 10)  // Previous 10-bar low for stop
    
if bearConfirm and bearScore >= minScore
    prevHigh := ta.highest(high, 10)  // Previous 10-bar high for stop

// Entry conditions (only scores 4 or higher)
longCondition = bullConfirm and bullScore >= minScore
shortCondition = bearConfirm and bearScore >= minScore

// Execute trades
if longCondition and strategy.position_size == 0
    strategy.entry("Long", strategy.long, qty=shares)
    strategy.exit("Long Exit", "Long", stop=prevLow)
    
if shortCondition and strategy.position_size == 0
    strategy.entry("Short", strategy.short, qty=shares)
    strategy.exit("Short Exit", "Short", stop=prevHigh)

// Close opposite position if new signal occurs
if longCondition and strategy.position_size < 0
    strategy.close("Short")
    strategy.entry("Long", strategy.long, qty=shares)
    strategy.exit("Long Exit", "Long", stop=prevLow)
    
if shortCondition and strategy.position_size > 0
    strategy.close("Long")
    strategy.entry("Short", strategy.short, qty=shares)
    strategy.exit("Short Exit", "Short", stop=prevHigh)

// Plot stop levels for visualization
plot(strategy.position_size > 0 ? prevLow : na, "Long Stop", color.red, linewidth=2, style=plot.style_linebr)
plot(strategy.position_size < 0 ? prevHigh : na, "Short Stop", color.red, linewidth=2, style=plot.style_linebr)