Strategi ini menggabungkan Bollinger Bands dengan indikator Triple Supertrend untuk perdagangan. Ini menciptakan sistem trend-mengikuti yang kuat dengan memanfaatkan Bollinger Bands untuk penilaian rentang volatilitas dan Triple Supertrend untuk konfirmasi tren. Bollinger Bands mengidentifikasi pergerakan harga ekstrem, sementara Triple Supertrend memberikan beberapa konfirmasi arah tren melalui pengaturan parameter yang berbeda. Perdagangan hanya dilaksanakan ketika semua sinyal sejajar, mengurangi risiko sinyal palsu. Kombinasi ini mempertahankan keuntungan mengikuti tren sambil meningkatkan keandalan perdagangan.
Logika inti mencakup komponen kunci berikut:
Ini adalah strategi mengikuti tren yang menggabungkan Bollinger Bands dan Triple Supertrend, meningkatkan keandalan perdagangan melalui beberapa konfirmasi indikator teknis. Strategi menunjukkan kemampuan menangkap tren yang kuat dan pengendalian risiko, tetapi kondisi pasar secara signifikan mempengaruhi kinerjanya. Melalui optimalisasi dan penyempurnaan terus-menerus, strategi dapat mempertahankan kinerja yang stabil di berbagai kondisi pasar. Disarankan untuk melakukan backtesting menyeluruh dan optimasi parameter sebelum perdagangan langsung, dan melakukan penyesuaian yang sesuai berdasarkan kondisi pasar yang sebenarnya.
//@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")