
Brinbelt dan ATR Trend Tracking Strategy adalah sistem perdagangan kuantitatif yang canggih, yang menggabungkan fungsi penyesuaian dinamik Brinbelt’s Breakthrough Signal dan Average Real Range of Volatility (ATR) untuk mengenal pasti dan menjejaki trend pasaran melalui mekanisme “Track Line” (Follow Line). Strategi ini secara khusus memperkenalkan mekanisme pengesahan HTF Multi-Frames, yang dapat menapis isyarat perdagangan mengikut arah trend pada bingkai masa yang lebih tinggi, meningkatkan kestabilan dan keuntungan strategi. Sistem ini juga merangkumi banyak fungsi lanjutan, seperti penapisan segmen perdagangan yang boleh dipilih, penyesuaian automatik kadar ATR Volatility, dan mekanisme tindak balas masa nyata terhadap perubahan trend HTF, membentuk penyelesaian perdagangan kuantitatif yang lengkap dan fleksibel.
Di tengah-tengah strategi ini adalah mekanisme “track line” yang secara dinamik mengenal pasti dan menyesuaikan diri dengan trend pasaran melalui langkah-langkah berikut:
Pembuatan isyarat pita BrinSistem pertama mengira standard Bollinger Bands, menghasilkan isyarat bullish apabila harga menembusi tren naik, menghasilkan isyarat bearish apabila ia menembusi tren turun, dan menghasilkan isyarat bearish apabila ia berada di dalam band.
Pengiraan garis jejak: Berdasarkan isyarat Brin dan kedudukan harga semasa, sistem mengira nilai garis pengesanan sementara. Dalam kes isyarat bullish, garis pengesanan ditetapkan sebagai titik rendah K semasa tolak nilai ATR ((bila penapis ATR diaktifkan) atau gunakan titik rendah secara langsung; dalam kes isyarat bearish, garis pengesanan ditetapkan sebagai titik tinggi K semasa ditambah nilai ATR atau gunakan titik tinggi secara langsung.
Mekanisme penguncian talian penjejakanStrategi ini menggunakan logik “keranjang durian” untuk mengekalkan garis pengesanan. Dalam trend menaik, nilai garis pengesanan baru diambil sebagai nilai sementara berbanding yang lebih besar daripada yang sebelumnya; dalam trend menurun, ia diambil sebagai nilai sementara berbanding yang lebih kecil daripada yang sebelumnya. Ini memastikan bahawa garis pengesanan hanya boleh bergerak ke arah trend, membentuk tahap sokongan / rintangan yang dinamik.
Penentuan trend: Dengan membandingkan garis pengesanan semasa dengan nilai garis pengesanan sebelumnya, sistem menentukan arah trend. Naik menunjukkan trend berbilang arah ((1)), turun menunjukkan trend kosong ((-1), dan tetap rata mengekalkan trend sebelumnya.
Analisis pelbagai kerangka masaStrategi: Menggunakan logik yang serupa untuk mengira garis pengesanan dan keadaan trend pada jangka masa yang lebih tinggi, anda boleh memilih jangka masa yang lebih tinggi yang sesuai secara automatik atau secara manual (contohnya 1 minit secara automatik sesuai dengan 15 minit HTF).
Syarat kemasukan: Apabila trend bingkai masa perdagangan berubah dari neutral atau menurun ke naik dan HTF mengesahkan trend naik, menghasilkan isyarat melakukan lebih banyak; sebaliknya menghasilkan isyarat melakukan short.
Syarat keluarApabila trend timeframe bertukar ke arah yang berlawanan, atau trend HTF bertukar ke arah yang berlawanan (pembaharuan versi v2.5), strategi placement mempunyai kedudukan yang sedia ada.
Penapisan masa: boleh dipilih hanya dalam masa dagangan tertentu ((seperti masa dagangan saham AS biasa 0930-1600) melakukan perdagangan
Kebolehan menyesuaikan diriMekanisme garis pengesanan mampu menyesuaikan diri secara automatik mengikut turun naik pasaran, terutamanya apabila penapisan ATR diaktifkan, memberikan kemampuan penyesuaian dinamik untuk persekitaran kadar turun naik yang berbeza.
Mekanisme pengesahan trend: Fungsi pengesahan bingkai masa berbilang menapis perdagangan “bunyi” dengan berkesan, hanya berdagang apabila arah trend HTF selaras, meningkatkan kualiti isyarat dengan ketara.
Pilihan konfigurasi yang fleksibelStrategi menawarkan banyak parameter yang boleh dioptimumkan mengikut pasaran dan jenis perdagangan, termasuk kitaran dan bias Brin, kitaran ATR, penapisan masa dan kaedah pemilihan HTF.
Kebolehan bertindak balasMekanisme tindak balas perubahan trend HTF yang baru pada versi 2.5 membolehkan strategi bertindak balas lebih cepat terhadap perubahan trend besar, menghentikan kerosakan tepat pada masanya dan mengelakkan penarikan balik yang serius.
Pembantu visualStrategi: Merakamkan jangka masa perdagangan dan garis pengesanan HTF pada carta, dan secara pilihan memaparkan label isyarat jual beli, menjadikan logik perdagangan lebih intuitif.
Pengurusan pegangan: Dengan menetapkan pyramiding=0 untuk mengelakkan masuk berulang dalam arah yang sama, risiko yang tidak perlu terkumpul akan dielakkan.
Risiko penembusan palsuWalaupun menggunakan pengesahan Brin dan HTF, pasaran masih boleh menghasilkan penembusan palsu, terutamanya dalam persekitaran yang bergelombang tinggi. Penyelesaian: Anda boleh menambah nilai deviasi Brin atau memanjangkan tempoh pengesahan, atau bahkan menambah mekanisme pengesahan penembusan tambahan.
Kepekaan ParameterPerforma strategi lebih sensitif terhadap parameter seperti kitaran ATR, tetapan Brinband. Penyelesaian: Kombinasi parameter yang paling sesuai untuk jenis perdagangan tertentu harus dijumpai melalui pengulangan, untuk mengelakkan masalah kesesuaian kurva yang disebabkan oleh pengoptimuman berlebihan.
Penurunan trendPenyelesaian: Anda boleh mempertimbangkan untuk menggunakan ATR yang lebih kecil atau kitaran Brin untuk meningkatkan kelajuan tindak balas, tetapi anda perlu mengimbangi kualiti isyarat dan tindak balas.
Kerangka masa bergantungCara penyelesaian: Disyorkan untuk menggunakan fungsi pemilihan HTF automatik, yang secara automatik memilih bingkai masa yang lebih tinggi sesuai dengan bingkai masa carta semasa.
Kekurangan pengurusan danaStrategi itu sendiri tidak merangkumi mekanisme pengurusan wang yang lengkap. Cara penyelesaian: Strategi hentikan kerugian yang sesuai dan peraturan pengurusan kedudukan, seperti risiko peratusan tetap atau hentikan ATR, harus digabungkan dalam aplikasi sebenar.
Penapis isyarat yang dipertingkatkanAnda boleh mempertimbangkan untuk memperkenalkan petunjuk teknikal lain, seperti RSI (Relatively Strong Indicator) atau Stochastic (Random Indicator) untuk mengesahkan isyarat masuk, dan hanya melakukan perdagangan apabila petunjuk menunjukkan keadaan overbought / oversold. Ini akan mengurangkan isyarat pecah palsu dan meningkatkan peluang kemenangan.
Pengaturan parameter dinamikMekanisme penyesuaian parameter penyesuaian yang boleh dibangunkan berdasarkan keadaan pasaran, seperti peningkatan secara automatik dalam lingkungan yang bergelombang tinggi dan penurunan dalam lingkungan yang bergelombang rendah, menjadikan strategi lebih sesuai dengan keadaan pasaran yang berbeza.
Optimumkan penghakiman trend HTFAlgoritma pengesahan trend HTF boleh diperbaiki, seperti pengenalan penyambungan purata bergerak indeks atau penunjuk trend lain, dan bukan hanya bergantung pada arah garis pengesanan untuk mendapatkan penghakiman trend yang lebih stabil.
Pengurusan wang yang lebih baikMengintegrasikan sistem pengurusan wang yang komprehensif, menyesuaikan saiz kedudukan secara dinamik mengikut turun naik pasaran dan skala akaun, menetapkan sasaran stop loss dan keuntungan berdasarkan ATR, memaksimumkan pulangan yang disesuaikan dengan risiko.
Menambah analisis keadaan pasaran: memperkenalkan klasifikasi persekitaran pasaran, membezakan pasaran tren dan pasaran goyah, dan menyesuaikan parameter strategi atau peraturan perdagangan secara automatik mengikut keadaan pasaran, bahkan menghentikan perdagangan dalam persekitaran pasaran yang tidak sesuai dengan strategi tersebut.
Integrasi pelbagai strategiMengambil strategi ini sebagai satu komponen dan menggabungkannya dengan strategi lain yang saling melengkapi (seperti strategi pembalikan atau strategi pengesahan terobosan) untuk membentuk satu gabungan strategi yang seimbang yang menyeimbangkan prestasi dalam keadaan pasaran yang berbeza.
Brinband dan ATR Trend Tracking Strategy adalah sistem perdagangan kuantitatif yang direka dengan baik, yang mengidentifikasi dan mengesan trend pasaran dengan berkesan dengan menggabungkan Brinband, ATR dan analisis jangka masa berbilang. Kelebihan utama strategi ini adalah kemampuan beradaptasi dan fleksibiliti, dapat menyesuaikan diri dengan keadaan pasaran yang dinamik, sambil meningkatkan kualiti isyarat dan kemenangan melalui mekanisme pengesahan HTF.
Walaupun terdapat beberapa risiko yang wujud, seperti sensitiviti parameter dan masalah penembusan palsu, ini dapat dikurangkan dengan pengoptimuman parameter yang sesuai dan mekanisme penapisan tambahan. Arah pengoptimuman strategi, seperti penapisan isyarat yang dipertingkatkan, penyesuaian parameter dinamik dan pengendalian dana yang lebih baik, memberikan jalan yang jelas untuk meningkatkan prestasi strategi.
Secara keseluruhannya, strategi ini sangat sesuai untuk pedagang trend jangka menengah dan panjang, kerana ia menyediakan rangka kerja yang kukuh untuk mengenal pasti perubahan trend dan melakukan perdagangan dalam keadaan pasaran yang menguntungkan. Dengan parameter yang munasabah dan pengurusan risiko yang sesuai, strategi ini berpotensi untuk menghasilkan pulangan yang stabil dalam pelbagai keadaan pasaran.
/*backtest
start: 2024-07-20 00:00:00
end: 2025-04-07 00:00:00
period: 2d
basePeriod: 2d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=6
//@fenyesk
//Optional Working Hours and ATR based TP/SL removed
// Added Optional Higher Timeframe Confirmation with Auto/Manual Selection
// Revised for improved profitability: Trend-following Entries/Exits
// v2.5: React to HTF trend changes as well
strategy('Follow Line Strategy Version 2.5 (React HTF)', overlay = true, process_orders_on_close = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 1, pyramiding = 0) // Version bump overlay=true, process_orders_on_close=true, default_qty_type=strategy.percent_of_equity, default_qty_value=1, pyramiding=0) // Prevent multiple entries in the same direction )
// --- Settings ---
// Indicator Parameters
atrPeriodInput = input.int(defval = 5, title = 'ATR Period', minval = 1, group = 'Indicator Settings')
bbPeriodInput = input.int(defval = 21, title = 'Bollinger Bands Period', minval = 1, group = 'Indicator Settings')
bbDeviationInput = input.float(defval = 1.00, title = 'Bollinger Bands Deviation', minval = 0.1, step = 0.1, group = 'Indicator Settings')
useAtrFilterInput = input.bool(defval = true, title = 'Use ATR for Follow Line Offset?', group = 'Indicator Settings')
showSignalsInput = input.bool(title = 'Show Trade Signals on Chart?', defval = true, group = 'Indicator Settings')
// --- Higher Timeframe Confirmation ---
htf_group = 'Higher Timeframe Confirmation'
useHTFConfirmationInput = input.bool(false, title = 'Enable HTF Confirmation?', group = htf_group)
htfSelectionMethodInput = input.string('Auto', title = 'HTF Selection Method', options = ['Auto', 'Manual'], group = htf_group)
manualHTFInput = input.timeframe('240', title = 'Manual Higher Timeframe', group = htf_group) // Default to 4h if Manual
showHTFLineInput = input.bool(false, title = 'Show HTF Follow Line?', group = htf_group)
// --- Determine Higher Timeframe ---
// Revised function with explicit return variable
f_getAutoHTF() =>
string htfResult = 'D' // Initialize with a default value (e.g., Daily)
if timeframe.isintraday
if timeframe.multiplier <= 1 and timeframe.isminutes
htfResult := '15' // 1min -> 15min
htfResult
else if timeframe.multiplier <= 5 and timeframe.isminutes
htfResult := '240' // 5min -> 4h (240min)
htfResult
else if timeframe.multiplier <= 30 and timeframe.isminutes
htfResult := '240' // 15-30min -> 4h (240min)
htfResult
else if timeframe.multiplier == 60 and timeframe.isminutes // 1 hour
htfResult := 'D' // 1h -> 1 Day
htfResult
else if timeframe.multiplier <= 240 and timeframe.isminutes // Up to 4 hours
htfResult := 'W' // 4h -> 1 Week
htfResult
// else // The default "D" is already set if none of the above match
// htfResult := "D" // Default for other intraday -> 1 Day (already default)
else if timeframe.isdaily // Daily
htfResult := 'M' // 1 Day -> 1 Month
htfResult
else if timeframe.isweekly // Weekly
htfResult := 'M' // 1 Week -> 1 Month
htfResult
else // Monthly or higher (or unknown)
htfResult := '3M' // Default to 3 Months
htfResult
htfResult // Explicitly return the variable value
autoHTF = f_getAutoHTF()
selectedHTF = htfSelectionMethodInput == 'Auto' ? autoHTF : manualHTFInput
// --- Trade Timeframe Calculations ---
// Bollinger Bands calculation
bbMiddle_trade = ta.sma(close, bbPeriodInput)
bbStdDev_trade = ta.stdev(close, bbPeriodInput)
BBUpper_trade = bbMiddle_trade + bbStdDev_trade * bbDeviationInput
BBLower_trade = bbMiddle_trade - bbStdDev_trade * bbDeviationInput
// ATR calculation
atrValue_trade = ta.atr(atrPeriodInput)
// Signal initialization for Trade TF
var float followLine_trade = na
var int bbSignal_trade = 0
var int trend_trade = 0 // Renamed from iTrend
// Determine BB signal based on current close (Trade TF)
if close > BBUpper_trade
bbSignal_trade := 1
bbSignal_trade
else if close < BBLower_trade
bbSignal_trade := -1
bbSignal_trade
else
bbSignal_trade := 0 // Reset signal if price is within bands
bbSignal_trade
// Calculate potential new FollowLine value for the current bar (Trade TF)
float tempFollowLine_trade = na // Explicit type
if bbSignal_trade == 1
tempFollowLine_trade := useAtrFilterInput ? low - atrValue_trade : low
tempFollowLine_trade
else if bbSignal_trade == -1
tempFollowLine_trade := useAtrFilterInput ? high + atrValue_trade : high
tempFollowLine_trade
// Determine the final FollowLine for the current bar, applying the "ratchet" logic (Trade TF)
if bbSignal_trade == 1 // Price closed above upper BB
followLine_trade := na(followLine_trade[1]) ? tempFollowLine_trade : math.max(tempFollowLine_trade, nz(followLine_trade[1], tempFollowLine_trade))
followLine_trade
else if bbSignal_trade == -1 // Price closed below lower BB
followLine_trade := na(followLine_trade[1]) ? tempFollowLine_trade : math.min(tempFollowLine_trade, nz(followLine_trade[1], tempFollowLine_trade))
followLine_trade
else // Price closed within bands, FollowLine continues from previous bar
if not na(followLine_trade[1])
followLine_trade := followLine_trade[1]
followLine_trade
// else followLine_trade remains na if followLine_trade[1] was na
// Trend direction determination (Based on current FollowLine vs previous FollowLine - Trade TF)
if not na(followLine_trade) and not na(followLine_trade[1])
if followLine_trade > followLine_trade[1]
trend_trade := 1
trend_trade
else if followLine_trade < followLine_trade[1]
trend_trade := -1
trend_trade
else
trend_trade := nz(trend_trade[1], 0) // Maintain previous trend if line is flat but valid
trend_trade
else if not na(followLine_trade) and na(followLine_trade[1])
trend_trade := bbSignal_trade == 1 ? 1 : bbSignal_trade == -1 ? -1 : 0 // Use ternary for initial trend
trend_trade
else if na(followLine_trade)
trend_trade := 0 // Reset trend if FollowLine becomes invalid
trend_trade
// --- Higher Timeframe Calculations ---
// Function revised to return only one value (as float) based on parameter
f_calculateHTFData(htf_close, htf_high, htf_low, return_type) =>
// Explicitly type potentially 'na' indicator results
float htf_atrValue = ta.atr(atrPeriodInput)
float htf_bbMiddle = ta.sma(htf_close, bbPeriodInput)
float htf_bbStdDev = ta.stdev(htf_close, bbPeriodInput)
float htf_BBUpper = na
float htf_BBLower = na
// Calculate BBands only if middle/stdev are valid
if not na(htf_bbMiddle) and not na(htf_bbStdDev)
htf_BBUpper := htf_bbMiddle + htf_bbStdDev * bbDeviationInput
htf_BBLower := htf_bbMiddle - htf_bbStdDev * bbDeviationInput
htf_BBLower
// Determine BB signal (HTF) - Default to 0
int htf_bbSignal = 0
// Check if bands are valid before comparing
if not na(htf_BBUpper) and not na(htf_BBLower)
if htf_close > htf_BBUpper
htf_bbSignal := 1
htf_bbSignal
else if htf_close < htf_BBLower
htf_bbSignal := -1
htf_bbSignal
// Calculate potential new FollowLine (HTF)
float htf_tempFollowLine = na // Explicitly typed float
if htf_bbSignal == 1
htf_tempFollowLine := useAtrFilterInput and not na(htf_atrValue) ? htf_low - htf_atrValue : htf_low
htf_tempFollowLine
else if htf_bbSignal == -1
htf_tempFollowLine := useAtrFilterInput and not na(htf_atrValue) ? htf_high + htf_atrValue : htf_high
htf_tempFollowLine
// Maintain FollowLine state using 'var'
var float htf_followLine = na
var int htf_trend = 0
// Determine the final FollowLine (HTF)
if htf_bbSignal == 1
htf_followLine := na(htf_followLine[1]) ? htf_tempFollowLine : math.max(htf_tempFollowLine, nz(htf_followLine[1], htf_tempFollowLine))
htf_followLine
else if htf_bbSignal == -1
htf_followLine := na(htf_followLine[1]) ? htf_tempFollowLine : math.min(htf_tempFollowLine, nz(htf_followLine[1], htf_tempFollowLine))
htf_followLine
else
if not na(htf_followLine[1])
htf_followLine := htf_followLine[1]
htf_followLine
// else htf_followLine remains na if htf_followLine[1] was na (unless reset below)
// Reset FollowLine if it's based on invalid temp line
if na(htf_tempFollowLine) and htf_bbSignal != 0 // If the signal existed but calc failed (e.g., na ATR)
htf_followLine := na // Reset line
htf_followLine
// Determine Trend (HTF)
if not na(htf_followLine) and not na(htf_followLine[1])
if htf_followLine > htf_followLine[1]
htf_trend := 1
htf_trend
else if htf_followLine < htf_followLine[1]
htf_trend := -1
htf_trend
else
htf_trend := nz(htf_trend[1], 0)
htf_trend
else if not na(htf_followLine) and na(htf_followLine[1])
htf_trend := htf_bbSignal == 1 ? 1 : htf_bbSignal == -1 ? -1 : 0
htf_trend
else if na(htf_followLine) // Trend is 0 if line becomes (or is) na
htf_trend := 0
htf_trend
// Return the requested value as float type (or na)
float return_value = na
if return_type == 'line'
return_value := htf_followLine
return_value
else if return_type == 'trend'
return_value := float(htf_trend) // Convert int trend to float for consistent return type
return_value
return_value // Return the single calculated value
// Explicitly declare variables that will receive the security call result
float followLine_htf = na
int trend_htf = 0 // Initialize with a default value (0 for neutral)
// Request HTF data UNCONDITIONALLY
followLine_htf_result = request.security(syminfo.tickerid, selectedHTF, f_calculateHTFData(close, high, low, 'line'), lookahead = barmerge.lookahead_off)
trend_htf_result_float = request.security(syminfo.tickerid, selectedHTF, f_calculateHTFData(close, high, low, 'trend'), lookahead = barmerge.lookahead_off)
// Conditionally assign the results based on whether the HTF feature is enabled
if useHTFConfirmationInput or showHTFLineInput
// Assign results, handling potential 'na' values safely
followLine_htf := followLine_htf_result // Assign float/na directly
trend_htf := na(trend_htf_result_float) ? 0 : int(nz(trend_htf_result_float)) // Convert float result back to int, default to 0 if na
trend_htf
else // If HTF features are disabled, set variables to 'na'
followLine_htf := na
trend_htf := 0 // or na if preferred
trend_htf
// HTF Filter
// Use the potentially 'na' followLine_htf and the guaranteed non-'na' trend_htf
htfConfirmsLong = not useHTFConfirmationInput or useHTFConfirmationInput and trend_htf == 1
htfConfirmsShort = not useHTFConfirmationInput or useHTFConfirmationInput and trend_htf == -1
// --- Entry/Exit Conditions ---
// Buy & Sell Conditions (Based on Trade TF trend crossover)
longCondition_trade = nz(trend_trade[1]) <= 0 and trend_trade == 1
shortCondition_trade = nz(trend_trade[1]) >= 0 and trend_trade == -1
// Combined Entry Conditions with Filters
goLong = htfConfirmsLong and longCondition_trade and strategy.position_size <= 0 // Only enter long if flat or short & HTF confirms
goShort = htfConfirmsShort and shortCondition_trade and strategy.position_size >= 0 // Only enter short if flat or long & HTF confirms
// Exit conditions based on *either* TTF or HTF changing trend against the position
exitLong = trend_trade == -1 or trend_htf == -1 // TTF to short OR HTF to short
exitShort = trend_trade == 1 or trend_htf == 1 // TTF to long OR HTF to long
// --- Strategy Execution ---
if goLong
strategy.close('Short', comment = 'Close Short for Long')
strategy.entry('Long', strategy.long, comment = 'Enter Long')
if goShort
strategy.close('Long', comment = 'Close Long for Short')
strategy.entry('Short', strategy.short, comment = 'Enter Short')
if exitLong
strategy.close('Long', comment = 'Exit Long')
if exitShort
strategy.close('Short', comment = 'Exit Short')
// --- Alerts ---
// Alerts trigger on the same bar as the entry condition, respecting all filters
// NOTE: Removed dynamic HTF from message as alertcondition requires const string
alertcondition(goLong, title = 'FL Buy Signal', message = 'Follow Line Buy Signal - {{ticker}} {{interval}}')
alertcondition(goShort, title = 'FL Sell Signal', message = 'Follow Line Sell Signal - {{ticker}} {{interval}}')
alertcondition(goLong or goShort, title = 'FL Signal', message = 'Follow Line Signal - {{ticker}} {{interval}}')
// --- Plotting ---
// Plot the Trade Timeframe Follow Line
lineColor_trade = trend_trade > 0 ? color.new(color.blue, 0) : trend_trade < 0 ? color.new(color.red, 0) : color.new(color.gray, 0)
plot(followLine_trade, color = lineColor_trade, linewidth = 2, title = 'Follow Line (Trade TF)')
// Plot the Higher Timeframe Follow Line (optional)
// Use the potentially 'na' followLine_htf and the guaranteed non-'na' trend_htf for coloring
lineColor_htf = trend_htf > 0 ? color.new(color.aqua, 0) : trend_htf < 0 ? color.new(color.orange, 0) : color.new(color.gray, 70)
plot(showHTFLineInput and useHTFConfirmationInput ? followLine_htf : na, color = lineColor_htf, linewidth = 2, style = plot.style_circles, title = 'Follow Line (HTF)', offset = 0)
// Plot shapes on the bar the trade signal occurs (based on trade TF condition), placing them AT the calculated Trade TF price level.
// Use the original trade long/short conditions for plotting shapes for clarity, before plots
plotshape(longCondition_trade and showSignalsInput and not na(followLine_trade) and not na(atrValue_trade) ? followLine_trade - atrValue_trade : na, text = 'BUY', style = shape.labelup, location = location.absolute, color = color.new(color.blue, 0), textcolor = color.new(color.white, 0), offset = 0, size = size.auto)
plotshape(shortCondition_trade and showSignalsInput and not na(followLine_trade) and not na(atrValue_trade) ? followLine_trade + atrValue_trade : na, text = 'SELL', style = shape.labeldown, location = location.absolute, color = color.new(color.red, 0), textcolor = color.new(color.white, 0), offset = 0, size = size.auto)
// Plot BBands for reference if desired
// plot(BBUpper_trade, "Upper BB", color=color.gray)
// plot(BBLower_trade, "Lower BB", color=color.gray)