
Cette stratégie utilise une méthode de négociation combinant les bandes de Brin et les indicateurs de triple surtrend. Un système robuste de suivi de la tendance est formé par la détermination de la zone de fluctuation de la bande de Brin et la confirmation de la tendance du triple surtrend. La bande de Brin est utilisée pour identifier les fluctuations extrêmes des prix, tandis que le triple surtrend fournit une confirmation multiple de la direction de la tendance grâce à différents paramètres.
La logique fondamentale de la stratégie comprend les éléments clés suivants :
Il s’agit d’une stratégie de suivi de la tendance combinant les bandes de Brin et le triple hypertrend pour améliorer la fiabilité des transactions grâce à la confirmation de plusieurs indicateurs techniques. La stratégie a une forte capacité de capture de tendance et de contrôle des risques, mais il faut également tenir compte de l’impact de l’environnement du marché sur la performance de la stratégie.
//@version=5
strategy("Demo GPT - Bollinger + Triple Supertrend Combo", overlay=true, commission_type=strategy.commission.percent, commission_value=0.1, slippage=3)
// -------------------------------
// User Input for Date Range
// -------------------------------
startDate = input(title="Start Date", defval=timestamp("2018-01-01 00:00:00"))
endDate = input(title="End Date", defval=timestamp("2069-12-31 23:59:59"))
// -------------------------------
// Bollinger Band Inputs
// -------------------------------
lengthBB = input.int(20, "Bollinger Length")
multBB = input.float(2.0, "Bollinger Multiplier")
// -------------------------------
// Supertrend Inputs for 3 lines
// -------------------------------
// Line 1
atrPeriod1 = input.int(10, "ATR Length (Line 1)", minval = 1)
factor1 = input.float(3.0, "Factor (Line 1)", minval = 0.01, step = 0.01)
// Line 2
atrPeriod2 = input.int(10, "ATR Length (Line 2)", minval = 1)
factor2 = input.float(4.0, "Factor (Line 2)", minval = 0.01, step = 0.01)
// Line 3
atrPeriod3 = input.int(10, "ATR Length (Line 3)", minval = 1)
factor3 = input.float(5.0, "Factor (Line 3)", minval = 0.01, step = 0.01)
// -------------------------------
// Bollinger Band Calculation
// -------------------------------
basis = ta.sma(close, lengthBB)
dev = multBB * ta.stdev(close, lengthBB)
upperBand = basis + dev
lowerBand = basis - dev
// Plot Bollinger Bands
plot(upperBand, "Upper BB", color=color.new(color.blue, 0))
plot(basis, "Basis", color=color.new(color.gray, 0))
plot(lowerBand, "Lower BB", color=color.new(color.blue, 0))
// -------------------------------
// Supertrend Calculation Line 1
// -------------------------------
[supertrendLine1, direction1] = ta.supertrend(factor1, atrPeriod1)
supertrendLine1 := barstate.isfirst ? na : supertrendLine1
upTrend1 = plot(direction1 < 0 ? supertrendLine1 : na, "Up Trend 1", color = color.green, style = plot.style_linebr)
downTrend1 = plot(direction1 < 0 ? na : supertrendLine1, "Down Trend 1", color = color.red, style = plot.style_linebr)
// -------------------------------
// Supertrend Calculation Line 2
// -------------------------------
[supertrendLine2, direction2] = ta.supertrend(factor2, atrPeriod2)
supertrendLine2 := barstate.isfirst ? na : supertrendLine2
upTrend2 = plot(direction2 < 0 ? supertrendLine2 : na, "Up Trend 2", color = color.new(color.green, 0), style = plot.style_linebr)
downTrend2 = plot(direction2 < 0 ? na : supertrendLine2, "Down Trend 2", color = color.new(color.red, 0), style = plot.style_linebr)
// -------------------------------
// Supertrend Calculation Line 3
// -------------------------------
[supertrendLine3, direction3] = ta.supertrend(factor3, atrPeriod3)
supertrendLine3 := barstate.isfirst ? na : supertrendLine3
upTrend3 = plot(direction3 < 0 ? supertrendLine3 : na, "Up Trend 3", color = color.new(color.green, 0), style = plot.style_linebr)
downTrend3 = plot(direction3 < 0 ? na : supertrendLine3, "Down Trend 3", color = color.new(color.red, 0), style = plot.style_linebr)
// -------------------------------
// Middle line for fill (used as a reference line)
// -------------------------------
bodyMiddle = plot(barstate.isfirst ? na : (open + close) / 2, "Body Middle", display = display.none)
// Fill areas for each supertrend line
fill(bodyMiddle, upTrend1, color.new(color.green, 90), fillgaps = false)
fill(bodyMiddle, downTrend1, color.new(color.red, 90), fillgaps = false)
fill(bodyMiddle, upTrend2, color.new(color.green, 90), fillgaps = false)
fill(bodyMiddle, downTrend2, color.new(color.red, 90), fillgaps = false)
fill(bodyMiddle, upTrend3, color.new(color.green, 90), fillgaps = false)
fill(bodyMiddle, downTrend3, color.new(color.red, 90), fillgaps = false)
// Alerts for the first line only (as an example)
alertcondition(direction1[1] > direction1, title='Downtrend to Uptrend (Line 1)', message='Supertrend Line 1 switched from Downtrend to Uptrend')
alertcondition(direction1[1] < direction1, title='Uptrend to Downtrend (Line 1)', message='Supertrend Line 1 switched from Uptrend to Downtrend')
alertcondition(direction1[1] != direction1, title='Trend Change (Line 1)', message='Supertrend Line 1 switched trend')
// -------------------------------
// Strategy Logic
// -------------------------------
inDateRange = true
// Long Conditions
longEntryCondition = inDateRange and close > upperBand and direction1 < 0 and direction2 < 0 and direction3 < 0
longExitCondition = direction1 > 0 or direction2 > 0 or direction3 > 0
// Short Conditions
shortEntryCondition = inDateRange and close < lowerBand and direction1 > 0 and direction2 > 0 and direction3 > 0
shortExitCondition = direction1 < 0 or direction2 < 0 or direction3 < 0
// Execute Long Trades
if longEntryCondition and strategy.position_size <= 0
strategy.entry("Long", strategy.long)
if strategy.position_size > 0 and longExitCondition
strategy.close("Long")
// Execute Short Trades
if shortEntryCondition and strategy.position_size >= 0
strategy.entry("Short", strategy.short)
if strategy.position_size < 0 and shortExitCondition
strategy.close("Short")