
Ne vous laissez pas tromper par le nom, le K-algo trail n’est pas une simple stratégie de suivi d’ATR. Ce système combine habilement les trois techniques de SuperTrend, de Gann Nine-Sided Graph et de Heikin Ashi Smooth, formant un cadre de reconnaissance de tendances tridimensionnel.
L’innovation centrale de la stratégie réside dans le Heikin Ashi qui traite les doubles EMA de 11 cycles. Le Heikin Ashi traditionnel est susceptible de produire de faux signaux, mais après deux tours d’EMA, la qualité du signal est considérablement améliorée.
Le paramètre de stop loss utilise directement la ligne de SuperTrend, ce qui est le plus raisonnable pour un stop loss dynamique. Plus intéressant est la conception de trois niveaux de stop loss: 1,7 fois, 2,5 fois et 3,0 fois la distance de risque. Ce stop progressif garantit à la fois un rendement de base et laisse suffisamment de place à la tendance.
Le calcul du Gann Square of 9 dans le code est apparemment simple, mais il est très utile. En calculant la racine carrée du prix actuel, les points de résistance de soutien ascendants et descendants fournissent des points de résistance supplémentaires pour la stratégie. Bien que la logique de la stratégie n’utilise pas directement ces positions, elles fournissent une référence importante pour l’ajustement manuel et l’évaluation des risques.
Cette stratégie fonctionne bien dans les marchés à tendance unilatérale, en particulier dans les variétés plus volatiles comme les crypto-monnaies et les futures d’indices boursiers. Mais il faut être clair: dans un contexte de volatilité horizontale, de fréquentes fausses percées entraînent des pertes mineures en série. Il est recommandé de l’utiliser pendant les périodes de forte volatilité et de tendance du marché et d’éviter les opérations dans les périodes d’incertitude qui suivent la publication de données économiques importantes.
Il est recommandé de contrôler strictement les positions individuelles au-delà de 2% du capital total et de suspendre la négociation après 3 arrêts de perte consécutifs et de réévaluer l’environnement du marché. L’efficacité de la stratégie dépend fortement des tendances du marché et doit être utilisée avec prudence dans les marchés qui manquent d’une direction claire.
/*backtest
start: 2025-06-11 00:00:00
end: 2025-08-25 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=5
strategy('K-algo trail', overlay=true)
// ===== INPUTS =====
Periods = input(title='ATR Period', defval=10)
src = input(hl2, title='Source')
Multiplier = input.float(title='ATR Multiplier', step=0.1, defval=3)
changeATR = input(title='Change ATR Calculation Method ?', defval=true)
showsignals = input(title='Show Buy/Sell Signals ?', defval=true)
// ===== ATR & SUPER TREND (K-TREND) CALCULATION =====
atr2 = ta.sma(ta.tr, Periods)
atr = changeATR ? ta.atr(Periods) : atr2
up = src - Multiplier * atr
up1 = nz(up[1], up)
up := close[1] > up1 ? math.max(up, up1) : up
dn = src + Multiplier * atr
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? math.min(dn, dn1) : dn
trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend
// Plot SuperTrend
upPlot = plot(trend == 1 ? up : na, title='Up Trend', style=plot.style_linebr, linewidth=2, color=color.new(color.green, 0))
buySignal = trend == 1 and trend[1] == -1
plotshape(buySignal ? up : na, title='UpTrend Begins', location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.green, 0))
dnPlot = plot(trend == 1 ? na : dn, title='Down Trend', style=plot.style_linebr, linewidth=2, color=color.new(color.red, 0))
sellSignal = trend == -1 and trend[1] == 1
plotshape(sellSignal ? dn : na, title='DownTrend Begins', location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.red, 0))
// ===== GANN SQUARE OF 9 =====
normalise_squareRootCurrentClose = math.floor(math.sqrt(close))
upperGannLevel_1 = (normalise_squareRootCurrentClose + 1) * (normalise_squareRootCurrentClose + 1)
upperGannLevel_2 = (normalise_squareRootCurrentClose + 2) * (normalise_squareRootCurrentClose + 2)
zeroGannLevel = normalise_squareRootCurrentClose * normalise_squareRootCurrentClose
lowerGannLevel_1 = (normalise_squareRootCurrentClose - 1) * (normalise_squareRootCurrentClose - 1)
lowerGannLevel_2 = (normalise_squareRootCurrentClose - 2) * (normalise_squareRootCurrentClose - 2)
// ===== SMOOTHED HEIKIN ASHI CALCULATION =====
ma1_len = input.int(title='MA1', defval=11, minval=1, maxval=100, step=1)
ma2_len = input.int(title='MA2', defval=11, minval=1, maxval=100, step=1)
// First Smoothing (11,11)
o = ta.ema(open, ma1_len)
c = ta.ema(close, ma1_len)
h = ta.ema(high, ma1_len)
l = ta.ema(low, ma1_len)
ha_t = ticker.heikinashi(syminfo.tickerid)
ha_o = request.security(ha_t, timeframe.period, o)
ha_c = request.security(ha_t, timeframe.period, c)
ha_h = request.security(ha_t, timeframe.period, h)
ha_l = request.security(ha_t, timeframe.period, l)
o2 = ta.ema(ha_o, ma2_len)
c2 = ta.ema(ha_c, ma2_len)
h2 = ta.ema(ha_h, ma2_len)
l2 = ta.ema(ha_l, ma2_len)
ha_col = o2 > c2 ? color.orange : color.blue
plotcandle(o2, h2, l2, c2, title='Heikin Ashi Smoothed', color=ha_col, wickcolor=#00000000)
// ===== STRATEGY LOGIC =====
// Final Combined Long Condition
longCondition = (o2 < c2 and trend == 1) and barstate.isconfirmed
// Final Combined Short Condition
shortCondition = (o2 > c2 and trend == -1) and barstate.isconfirmed
// ===== STRATEGY EXECUTION =====
if longCondition
SL = math.round(up, 2)
range_1 = math.abs(close - SL)
TARGET1 = close + range_1 * 1.7
TARGET2 = close + range_1 * 2.5
TARGET3 = close + range_1 * 3.0
strategy.entry('BUY', strategy.long)
strategy.exit('BUY T1', 'BUY', qty=1, limit=TARGET1)
strategy.exit('BUY T2', 'BUY', qty=1, limit=TARGET2)
strategy.exit('BUY T3', 'BUY', qty=1, limit=TARGET3)
strategy.exit('BUY SL', 'BUY', stop=SL)
if shortCondition
SL = math.round(dn, 2)
range_2 = math.abs(close - SL)
TARGET1 = close - range_2 * 1.7
TARGET2 = close - range_2 * 2.5
TARGET3 = close - range_2 * 3.0
strategy.entry('SELL', strategy.short)
strategy.exit('SELL T1', 'SELL', qty=1, limit=TARGET1)
strategy.exit('SELL T2', 'SELL', qty=1, limit=TARGET2)
strategy.exit('SELL T3', 'SELL', qty=1, limit=TARGET3)
strategy.exit('SELL SL', 'SELL', stop=SL)
// Plot entry signals
plotshape(longCondition ? close : na, title='Buy', text='BUY', location=location.belowbar, style=shape.labelup, size=size.tiny, color=color.new(color.green, 0), textcolor=color.new(color.white, 0))
plotshape(shortCondition ? close : na, title='Sell', text='SELL', location=location.abovebar, style=shape.labeldown, size=size.tiny, color=color.new(color.red, 0), textcolor=color.new(color.white, 0))