Chiến lược này kết hợp Bollinger Bands với các chỉ số Triple Supertrend để giao dịch. Nó tạo ra một hệ thống theo dõi xu hướng mạnh mẽ bằng cách sử dụng Bollinger Bands để đánh giá phạm vi biến động và Triple Supertrend để xác nhận xu hướng.
Logic cốt lõi bao gồm các thành phần chính sau:
Đây là một chiến lược theo xu hướng kết hợp Bollinger Bands và Triple Supertrend, nâng cao độ tin cậy giao dịch thông qua việc xác nhận nhiều chỉ số kỹ thuật. Chiến lược thể hiện khả năng nắm bắt xu hướng mạnh mẽ và kiểm soát rủi ro, nhưng điều kiện thị trường ảnh hưởng đáng kể đến hiệu suất của nó. Thông qua tối ưu hóa và tinh chỉnh liên tục, chiến lược có thể duy trì hiệu suất ổn định trong các điều kiện thị trường khác nhau.
//@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")