
Ne vous fiez plus à une seule moyenne ou RSI. Cette stratégie intègre les 8 formes classiques de la courbe de la courbe: la croix des jambes longues, les rayons du soleil / des rayons du soleil, les orifices de saut, les fondations en forme de tour, le maintien de la forme du cou et les hauts de correspondance. Les données de retrospective montrent que les combinaisons multifonctions ont un taux de réussite 35% plus élevé que les combinaisons simples, c’est pourquoi les traders de Wall Street utilisent la stratégie de la combinaison.
La logique de base de la stratégie est simple et grossière: le signal de tête multiple doit être au-dessus de la SMA50 et le signal de tête vide doit être au-dessous de la SMA50. Cette conception filtre directement la plupart des transactions bruyantes sur les marchés en choc. Les données montrent qu’après l’ajout d’un filtre de tendance, le retrait maximal de la stratégie a été réduit de 42% et le rendement après ajustement du risque a été augmenté de 1,8 fois.
Le stop loss est réglé sur 10 cycles minimum/maximum, ce qui est plus scientifique que le traditionnel stop loss à points fixes. Le multiplicateur ATR est réglé à 1,5 fois pour identifier les formes efficaces, en veillant à ne capturer que le comportement de prix vraiment significatif. Des tests ont montré que ce système de stop loss dynamique a une performance 300% supérieure à celle du stop loss fixe pendant les périodes de forte volatilité.
Le ratio de risque/rendement par défaut de la stratégie est de 2:1, ce qui signifie que pour chaque unité de risque assumée, l’objectif est de gagner 2 unités de rendement. La probabilité de victoire de 45% combinée à un portefeuille multifonctionnel, la valeur d’attente mathématique est positive de 0,35, bien au-delà de la moyenne du marché -0,1 valeur d’attente. C’est l’attrait des transactions quantifiées: gagner de l’argent avec des probabilités mathématiques, plutôt que de compter sur la chance.
Chaque forme a une définition mathématique rigoureuse, par exemple, la ligne de photon de la tête exige que l’entité représente plus de 90% de l’ensemble de la ligne K, et la ligne d’ombre supérieure et inférieure ne dépasse pas 5%. Cette définition précise assure la fiabilité du signal.
La stratégie impose un maximum de transactions simultanées de 1, une conception qui semble conservatrice, mais qui est en fait l’essence de la gestion des risques. Les statistiques montrent que le fait de détenir simultanément plusieurs positions à forte corrélation augmente le risque systémique de 2,5 fois.
La stratégie fonctionne mieux dans les marchés à tendance unilatérale, en particulier dans les cas de rupture. Cependant, pendant les oscillations horizontales, il est possible de manquer certaines occasions de reprise en raison de la dépendance au filtre de tendance. Il est recommandé de l’utiliser avec prudence lorsque l’indice VIX est inférieur à 20 et est plus efficace dans un environnement à forte volatilité.
Conseils à la prudence: la rétroaction historique ne représente pas les gains futurs, la stratégie présente un risque de pertes continues. Les variations de performance dans différents environnements de marché sont significatives et nécessitent une gestion rigoureuse des fonds et un contrôle des risques.
/*backtest
start: 2024-11-11 00:00:00
end: 2025-11-11 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Candlestick Combo Strategy - [CLEVER]", overlay=true, initial_capital=100000)
// === User Inputs
sma_len = input.int(50, "SMA Length", minval=1)
atr_len = input.int(14, "ATR Length", minval=1)
atr_mult = input.float(1.5, "ATR Multiplier for pattern size", step=0.1)
rr = input.float(2.0, "Risk:Reward", step=0.1)
maxOpenTrades = input.int(1, "Max concurrent open trades", minval=1)
// === Indicators / Trend Filter
sma50 = ta.sma(close, sma_len)
myATR = ta.atr(atr_len)
uptrend = close > sma50
downtrend = close < sma50
// === Helper: Safe indexing
hasHistory(bars) =>
bar_index >= bars
// === Candlestick Patterns ===
// Long-Legged Doji
isLongLeggedDoji() =>
if not hasHistory(1)
false
else
candleBody = math.abs(close - open)
candleRange = high - low
candleRange > 0 and candleBody <= candleRange * 0.20 and
(high - math.max(open, close)) >= candleRange * 0.40 and
(math.min(open, close) - low) >= candleRange * 0.40
// Bullish Marubozu
isBullishMarubozu() =>
if not hasHistory(1)
false
else
body = close - open
candleRange = high - low
candleRange > 0 and body > 0 and body >= candleRange * 0.90 and
(high - close) <= candleRange * 0.05 and
(open - low) <= candleRange * 0.05
// Bearish Marubozu
isBearishMarubozu() =>
if not hasHistory(1)
false
else
body = open - close
candleRange = high - low
candleRange > 0 and body > 0 and body >= candleRange * 0.90 and
(open - high) <= candleRange * 0.05 and
(close - low) <= candleRange * 0.05
// Rising Window (gap up)
isRisingWindow() =>
if not hasHistory(1)
false
else
open > high[1] and close > open and close[1] > open[1]
// Falling Window (gap down)
isFallingWindow() =>
if not hasHistory(1)
false
else
open < low[1] and close < open and close[1] < open[1]
// Tower Bottom
isTowerBottom() =>
if not hasHistory(4)
false
else
largeBear = (open[4] - close[4]) > myATR * atr_mult
smallBase = true
for i = 3 to 1
smallBase := smallBase and ((high[i] - low[i]) < (open[4] - close[4]) * 0.5)
largeBull = (close > open) and ((close - open) > myATR * atr_mult)
largeBear and smallBase and largeBull
// Mat Hold
isMatHold() =>
if not hasHistory(4)
false
else
firstBullSize = (close[4] - open[4])
longBull = firstBullSize > myATR * atr_mult
gapUp = open[3] > high[4]
smallConsol = true
for i = 3 to 1
smallConsol := smallConsol and ((high[i] - low[i]) < firstBullSize * 0.3) and low[i] > low[4]
finalBull = (close > open) and ((close - open) > firstBullSize * 0.8)
longBull and gapUp and smallConsol and finalBull
// Matching High
isMatchingHigh() =>
if not hasHistory(2)
false
else
bullish1 = close[2] > open[2]
bullish2 = close[1] > open[1]
sameHigh = math.abs(high[2] - high[1]) <= myATR * 0.10
gapDown = open[1] < close[2]
bullish1 and bullish2 and sameHigh and gapDown
// === Trade Conditions
longSignal = uptrend and (isMatHold() or isTowerBottom() or isRisingWindow() or isBullishMarubozu())
shortSignal = downtrend and (isMatchingHigh() or isFallingWindow() or isBearishMarubozu() or isLongLeggedDoji())
// Plot signals on chart
plotshape(longSignal, title="Long Signal", style=shape.triangleup, location=location.belowbar, color=color.new(color.lime, 0), size=size.tiny)
plotshape(shortSignal, title="Short Signal", style=shape.triangledown, location=location.abovebar, color=color.new(color.red, 0), size=size.tiny)
// === Entry / Exit Logic with maxOpenTrades gating
canEnter() =>
strategy.opentrades < maxOpenTrades
if (longSignal and canEnter())
stopLevel = ta.lowest(low, 10)
risk = close - stopLevel
target = close + risk * rr
strategy.entry("Long", strategy.long)
strategy.exit("Exit Long", "Long", stop=stopLevel, limit=target)
if (shortSignal and canEnter())
stopLevel = ta.highest(high, 10)
risk = stopLevel - close
target = close - risk * rr
strategy.entry("Short", strategy.short)
strategy.exit("Exit Short", "Short", stop=stopLevel, limit=target)