
हाइकेन ऐश ट्रेंड ट्रैकिंग रणनीति एक व्यापक ट्रेडिंग प्रणाली है जो हाइकेन ऐश चार्ट, सुपर ट्रेंड इंडिकेटर और औसत दिशात्मक सूचकांक ((एडीएक्स) फिल्टर के लाभों को जोड़ती है, जिसका उद्देश्य मजबूत प्रवृत्ति आंदोलनों की पहचान करना और प्रभावी धन प्रबंधन करना है। यह रणनीति स्थापित प्रवृत्ति में गतिशीलता को पकड़ने पर केंद्रित है, जबकि उन्नत तीन-स्तरीय रोकथाम तंत्र का उपयोग करके धन की सुरक्षा और मुनाफे को लॉक करना है। यह रणनीति कई प्रकार के व्यापार के लिए उपयुक्त है, विशेष रूप से अस्थिर बाजारों में।
हेकेनअश ट्रेंड ट्रैकिंग रणनीति तीन मुख्य तकनीकी संकेतकों पर आधारित हैः
हेकेन एचिग्टो का विश्लेषणइस रणनीति में विशेष रूप से हाइकेन एशियंस पर ध्यान केंद्रित किया गया है, जो लगभग कोई ऊपर-नीचे छाया रेखा नहीं है, जो एक दिशा में कीमतों को निर्णायक रूप से स्थानांतरित करते हैं, और लगभग कोई पलटाव नहीं करते हैं, जो मजबूत गति और प्रवृत्ति की निरंतरता को इंगित करते हैं। नीचे-नीचे छाया रेखा के साथ हरे रंग की एशियंस को मल्टी-सिग्नल के रूप में माना जाता है, और ऊपर-नीचे छाया रेखा के बिना लाल एशियंस को शून्य सिग्नल के रूप में माना जाता है।
सुपर ट्रेंड सूचकांक फ़िल्टर करें: सिस्टम एक सुपरट्रेंड इंडिकेटर का उपयोग करता है ((डिफ़ॉल्ट फैक्टरः3.0, एटीआर चक्रः10) संभावित प्रवृत्ति दिशा की पुष्टि करने के लिए। इनपुट सिग्नल को सुपरट्रेंड की दिशा के अनुरूप होना चाहिए, जिससे सिग्नल की विश्वसनीयता बढ़ जाती है और गलत ट्रेडों को कम किया जाता है।
ADX फ़िल्टर (वैकल्पिक): औसत दिशात्मक सूचकांक का उपयोग प्रवृत्ति की ताकत का आकलन करने के लिए किया जाता है, और ट्रेडिंग केवल तब ट्रिगर होती है जब ADX निर्दिष्ट थ्रेशोल्ड (डिफ़ॉल्टः 25) से अधिक हो जाता है, जो झटके या क्षैतिज बाजारों में शोर संकेतों को फ़िल्टर करने में मदद करता है।
ट्रेडिंग सिस्टम में प्रवेश और निकास के स्पष्ट नियम हैंः
इस रणनीति की सबसे उल्लेखनीय विशेषता इसकी अभिनव तीन-स्तरीय रोकथाम प्रणाली हैः
बहुस्तरीय जोखिम प्रबंधनट्रिपल स्टॉप सिस्टम विभिन्न बाजार स्थितियों और जोखिम परिदृश्यों के लिए व्यापक धन सुरक्षा प्रदान करता है, जो इस रणनीति का सबसे महत्वपूर्ण लाभ है।
अत्यधिक अनुकूलनीय: सभी घटक ((सुपरट्रेंड, ADX) को विभिन्न बाजार स्थितियों के आधार पर चालू/बंद किया जा सकता है, और पैरामीटर को भी समायोजित किया जा सकता है, जिससे रणनीति में बहुत अधिक लचीलापन हो सकता है।
मजबूत प्रवृत्ति पकड़ने की क्षमताइस रणनीति में हाइकेन एशेज के स्पष्ट दृश्य संकेतों, सुपरट्रेंड की पुष्टि और एडीएक्स की प्रवृत्ति की ताकत का आकलन शामिल है, जो मजबूत प्रवृत्ति के आंदोलनों की पहचान करने में सक्षम है।
स्पष्ट दृश्य प्रतिक्रियारणनीतियाँ चार्ट पर स्थिति, प्रवेश मूल्य और वर्तमान स्टॉप-लॉस स्तर प्रदर्शित करती हैं, जिससे व्यापारियों को रणनीतियों के निष्पादन को समझने और ट्रैक करने की अनुमति मिलती है।
अंतर्निहित धन प्रबंधन: रणनीति में इक्विटी प्रतिशत के आधार पर पोजीशन मैनेजमेंट विधि का उपयोग किया गया है ((डिफ़ॉल्टः 3%)), जो खाता आकार के परिवर्तन के साथ एक समान जोखिम को सुनिश्चित करता है।
पूर्ण लेनदेन प्रणाली: बिना किसी अतिरिक्त निर्णय या संकेतकों के, प्रवेश संकेत से लेकर बाहर निकलने के नियमों तक पूरी ट्रेडिंग प्रक्रिया प्रदान करना।
अति-अनुकूलन जोखिम: रणनीति में कई समायोज्य पैरामीटर शामिल हैं, जो वक्र-फिट की समस्या का कारण बन सकता है, यानी रणनीति ऐतिहासिक डेटा पर अच्छा प्रदर्शन करती है, लेकिन वास्तविक समय के व्यापार में खराब प्रदर्शन करती है। इसका समाधान पर्याप्त लंबे ऐतिहासिक डेटा का उपयोग करके वापस परीक्षण करना है और विभिन्न बाजार स्थितियों में रणनीति की स्थिरता का परीक्षण करना है।
प्रवृत्ति उलट जोखिम: बहुस्तरीय स्टॉप-लॉस तंत्र होने के बावजूद, मजबूत प्रवृत्ति के अचानक उलट जाने पर इस रणनीति को एक बड़ी वापसी का सामना करना पड़ सकता है। बाजार में अचानक चरम उतार-चढ़ाव के कारण स्टॉप-लॉस को समय पर ट्रिगर करने में विफलता हो सकती है, जिससे अपेक्षित से अधिक नुकसान हो सकता है। समाधान यह है कि अस्थिरता फ़िल्टर को बढ़ाने या अधिक सख्त जोखिम प्रबंधन नियमों को लागू करने पर विचार किया जाए।
पैरामीटर संवेदनशीलता: विभिन्न पैरामीटर सेटिंग्स के परिणामस्वरूप काफी अलग परिणाम हो सकते हैं, विशेष रूप से सुपरट्रेंड फैक्टर और एडीएक्स थ्रेशोल्ड। यह एक व्यापारी को प्रत्येक पैरामीटर के प्रभाव को गहराई से समझने और एक विशेष बाजार की स्थिति के लिए उपयुक्त संतुलन खोजने की आवश्यकता है।
कम अस्थिरता वाले वातावरण में खराब प्रदर्शनकम अस्थिरता या क्षैतिज बाजारों में, यह रणनीति कई बार गलत संकेत दे सकती है, जिसके परिणामस्वरूप “चिकनी” व्यापार होता है। समाधान इस तरह के वातावरण में व्यापार को रोकना या अतिरिक्त बाजार परिदृश्य फ़िल्टर जोड़ना है।
धन प्रबंधन जोखिम: एक निश्चित प्रतिशत स्थिति प्रबंधन सभी बाजार स्थितियों के लिए उपयुक्त नहीं हो सकता है और उच्च अस्थिरता वाले बाजारों में जोखिम को नियंत्रित करने के लिए स्थिति के आकार को कम करने की आवश्यकता हो सकती है।
अधिक अस्थिरता के लिए अनुकूलन तंत्र: वर्तमान रणनीतियों को और अधिक अनुकूलित किया जा सकता है, जैसे कि ऐतिहासिक अस्थिरता (एचवी) या निहित अस्थिरता (आईवी) के संकेतकों के रूप में अस्थिरता फ़िल्टर की शुरुआत करके, विभिन्न बाजार स्थितियों में पैरामीटर को स्वचालित रूप से समायोजित करने के लिए। यह रणनीति को उच्च अस्थिरता और कम अस्थिरता के दौरान स्थिर प्रदर्शन करने में सक्षम करेगा।
एकीकृत समय फ़िल्टरसमय-आधारित फ़िल्टर को जोड़ने पर विचार करें और कम अस्थिरता या कम बाजार प्रवृत्ति के साथ व्यापार करने से बचें। यह विशेष रूप से व्यापार-विशिष्ट किस्मों के लिए उपयोगी है, क्योंकि विभिन्न किस्मों में दिन के विभिन्न समय पर अलग-अलग व्यवहार लक्षण होते हैं।
मशीन लर्निंग अनुकूलन: मशीन लर्निंग तकनीक का उपयोग करके स्वचालित रूप से सर्वोत्तम पैरामीटर संयोजन की पहचान की जा सकती है, न कि स्थिर पैरामीटर सेटिंग्स पर निर्भर रहना। यह भविष्य में विशिष्ट बाजार स्थितियों में कौन से पैरामीटर सेटिंग्स का सबसे अच्छा प्रदर्शन कर सकता है, यह भविष्यवाणी करने के लिए ऐतिहासिक डेटा में पैटर्न का विश्लेषण करके किया जा सकता है।
प्रासंगिक बाजार फ़िल्टर जोड़ें: संबंधित बाजार या सूचकांक के व्यवहार को देखकर प्रवेश संकेतों को बढ़ाएं, उदाहरण के लिए, एक विशिष्ट किस्म का व्यापार करते समय समग्र बाजार की प्रवृत्ति या संबंधित बाजार की ताकत को ध्यान में रखें।
नुकसान को रोकने के लिए अनुकूलन: वर्तमान तीन-स्तरीय रोक प्रणाली को और अधिक अनुकूलित किया जा सकता है, जैसे कि अस्थिरता के आधार पर बीमा रोक प्रतिशत को गतिशील रूप से समायोजित करना, या समर्थन / प्रतिरोध स्तरों का उपयोग करना ताकि रोक को एक सरल रिवर्स पीरियड के उच्च या निम्न के बजाय सटीक रूप से सेट किया जा सके।
समेकित लेनदेन की मात्रा विश्लेषणसिग्नल की विश्वसनीयता को बढ़ाने के लिए, यह सुनिश्चित करने के लिए कि मूल्य आंदोलन को पर्याप्त मात्रा में समर्थन प्राप्त है, सिग्नल की पुष्टि के दौरान एक लेनदेन मात्रा फ़िल्टर जोड़ा गया है।
हाइकेन एश ट्रेड ट्रैकिंग रणनीति एक जटिल और व्यापक ट्रेडिंग प्रणाली है, जो हाइकेन एश चार्ट, सुपरट्रेंड इंडिकेटर और एडीएक्स फिल्टर के अद्वितीय संयोजन के माध्यम से मजबूत रुझानों में गतिशील अवसरों को पकड़ने पर केंद्रित है। इसकी तीन-स्तरीय स्टॉप लॉस प्रणाली व्यापक जोखिम प्रबंधन प्रदान करती है, जबकि इसकी अनुकूलन योग्य पैरामीटर सेटिंग्स इसे विभिन्न बाजार स्थितियों के अनुकूल बनाने में सक्षम बनाती हैं।
इस रणनीति के मुख्य लाभ इसकी स्पष्ट दृश्य संकेत, मजबूत प्रवृत्ति पहचान क्षमता और व्यापक धन सुरक्षा तंत्र में निहित हैं। हालांकि, व्यापारियों को पैरामीटर अनुकूलन की चुनौतियों और कम अस्थिरता वाले वातावरण में संभावित सीमाओं के बारे में जागरूक होना चाहिए।
इस रणनीति की स्थिरता और अनुकूलनशीलता को और बढ़ाया जा सकता है, जैसे कि अस्थिरता के अनुकूलन तंत्र को जोड़ने, समय फिल्टर और ट्रेड वॉल्यूम विश्लेषण को एकीकृत करने के लिए सिफारिशों के अनुकूलन दिशाओं को लागू करना। अंत में, हाइकेन-एश ट्रेंड ट्रैकिंग रणनीति एक संतुलित दृष्टिकोण का प्रतिनिधित्व करती है, जो तकनीकी विश्लेषण के स्पष्ट संकेतों और व्यवस्थित जोखिम प्रबंधन के सिद्धांतों के साथ मिलकर एक मूल्यवान उपकरण प्रदान करती है।
/*backtest
start: 2025-01-01 00:00:00
end: 2025-04-12 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=5
strategy("Heiken Ashi Supertrend ADX - Strategy", overlay=true, initial_capital=1000, commission_type=strategy.commission.percent, commission_value=0, calc_on_every_tick=true, process_orders_on_close=false, default_qty_type=strategy.percent_of_equity, default_qty_value=3)
// Supertrend Settings
useSupertrend = input.bool(true, "Use Supertrend for Entries", group="Supertrend Settings")
atrPeriod = input.int(10, "ATR Period", minval=1, group="Supertrend Settings")
factor = input.float(3.0, "Supertrend Factor", minval=0.5, step=0.1, group="Supertrend Settings")
// ADX Filter Settings
useAdxFilter = input.bool(false, "Use ADX Filter", group="ADX Filter")
adxPeriod = input.int(14, "ADX Period", minval=1, group="ADX Filter")
adxThreshold = input.float(25, "ADX Threshold", minval=0, group="ADX Filter")
// Stop Loss Options
useSwingStop = input.bool(false, "Use Swing Point Stop", group="Stop Loss Options")
swingLookback = input.int(3, "Swing Lookback Periods", minval=1, maxval=20, group="Stop Loss Options")
useSafetyNetStop = input.bool(true, "Use Insurance Stop", group="Stop Loss Options")
safetyNetPercent = input.float(5.0, "Insurance Stop Loss Percent", minval=0.1, step=0.1, group="Stop Loss Options")
// Trailing Stop Loss Settings
useTrailingStop = input.bool(true, "Use ATR Trailing Stop", group="Stop Loss Options")
trailAtrMultiplier = input.float(2.0, "Trailing Stop ATR Multiplier", minval=0.1, step=0.1, group="Stop Loss Options")
// Get HA data for signals
ha_security = ticker.heikinashi(syminfo.tickerid)
[o, h, l, c] = request.security(ha_security, timeframe.period, [open, high, low, close])
// Get real price data
real_open = open
real_high = high
real_low = low
real_close = close
// Calculate Supertrend using built-in function with real price data
[supertrend, direction] = ta.supertrend(factor, atrPeriod)
supertrend := barstate.isfirst ? na : supertrend
// Determine if we're in an uptrend or downtrend based on Supertrend
isUptrend = direction < 0 // In TradingView, negative direction means uptrend
isDowntrend = direction > 0 // In TradingView, positive direction means downtrend
// Calculate ATR for visualization
atrValue = ta.atr(atrPeriod)
// Calculate ADX and Trade Logic
[diplus, diminus, adx] = ta.dmi(adxPeriod, adxPeriod)
int trade = 0
if trade == 0 and diplus > diminus
trade := 1
else if trade == 0 and diminus > diplus
trade := -1
else if trade == 1 and diminus > diplus
trade := -1
else if trade == -1 and diplus > diminus
trade := 1
else
trade := trade[1]
// Combine with ADX Threshold
isAdxBullish = diplus > diminus and adx > adxThreshold
isAdxBearish = diminus > diplus and adx > adxThreshold
// Debug ADX Values (only if needed for development)
// plot(adx, "ADX", color=color.orange, linewidth=1)
// plot(diplus, "DI+", color=color.green, linewidth=1)
// plot(diminus, "DI-", color=color.red, linewidth=1)
// hline(adxThreshold, "ADX Threshold", color=color.gray, linestyle=hline.style_dashed)
// Check for wicks on the current candle
threshold = syminfo.mintick * 0.1
noBottomWick = math.abs(math.min(o, c) - l) <= threshold
noTopWick = math.abs(h - math.max(o, c)) <= threshold
// Identify candle color and signal conditions
isGreenCandle = c > o
isRedCandle = c < o
// KEY INTEGRATION: Color the real bars based on HA trend
bullishColor = color.green // Green for long/bullish
bearishColor = color.purple // Purple for short/bearish
barcolor(isGreenCandle ? bullishColor : bearishColor)
// Signal conditions for both entry and exit
longCondition = (isGreenCandle and noBottomWick and barstate.isconfirmed) and (not useSupertrend or isUptrend) and (not useAdxFilter or isAdxBullish)
shortCondition = (isRedCandle and noTopWick and barstate.isconfirmed) and (not useSupertrend or isDowntrend) and (not useAdxFilter or isAdxBearish)
exitLongCondition = isRedCandle and noTopWick and barstate.isconfirmed
exitShortCondition = isGreenCandle and noBottomWick and barstate.isconfirmed
// Calculate swing points based on real candles (not HA)
swingLow = ta.lowest(real_low, swingLookback)
swingHigh = ta.highest(real_high, swingLookback)
// Position tracking
var int position = 0 // 0 = no position, 1 = long, -1 = short
var float entryPrice = na
var float trailStopLevel = na // For ATR trailing stop
var float swingStopLevel = na // For swing point stop
var float safetyNetStopLevel = na // For safety net stop
var float highestSinceEntry = na // For tracking highest price since entry (for long positions)
var float lowestSinceEntry = na // For tracking lowest price since entry (for short positions)
// Alert variables
var bool longAlert = false
var bool shortAlert = false
var bool exitLongAlert = false
var bool exitShortAlert = false
// Reset alerts each bar
longAlert := false
shortAlert := false
exitLongAlert := false
exitShortAlert := false
// Handle entries and exits
if longCondition and (position <= 0)
if position < 0
exitShortAlert := true
strategy.close("Short", comment="Exit Short")
position := 0
longAlert := true
strategy.entry("Long", strategy.long, comment="Enter Long")
position := 1
entryPrice := real_close
highestSinceEntry := real_close
lowestSinceEntry := na
// Initialize trailing stops
if useTrailingStop
trailStopLevel := real_close - (atrValue * trailAtrMultiplier)
// Initialize swing point stop
if useSwingStop
swingStopLevel := swingLow
// Initialize safety net stop
if useSafetyNetStop
safetyNetStopLevel := real_close * (1 - safetyNetPercent / 100)
if shortCondition and (position >= 0)
if position > 0
exitLongAlert := true
strategy.close("Long", comment="Exit Long")
position := 0
shortAlert := true
strategy.entry("Short", strategy.short, comment="Enter Short")
position := -1
entryPrice := real_close
highestSinceEntry := na
lowestSinceEntry := real_close
// Initialize trailing stops
if useTrailingStop
trailStopLevel := real_close + (atrValue * trailAtrMultiplier)
// Initialize swing point stop
if useSwingStop
swingStopLevel := swingHigh
// Initialize safety net stop
if useSafetyNetStop
safetyNetStopLevel := real_close * (1 + safetyNetPercent / 100)
if position > 0 and exitLongCondition
exitLongAlert := true
strategy.close("Long", comment="Exit Long Signal")
position := 0
trailStopLevel := na
swingStopLevel := na
safetyNetStopLevel := na
highestSinceEntry := na
if position < 0 and exitShortCondition
exitShortAlert := true
strategy.close("Short", comment="Exit Short Signal")
position := 0
trailStopLevel := na
swingStopLevel := na
safetyNetStopLevel := na
lowestSinceEntry := na
// Check for swing point stop hit
if useSwingStop and position != 0 and not na(swingStopLevel)
// For long positions, check if price drops below the swing low
if position > 0 and real_low <= swingStopLevel
strategy.close("Long", comment="Swing Point Stop Hit")
position := 0
trailStopLevel := na
swingStopLevel := na
safetyNetStopLevel := na
highestSinceEntry := na
// For short positions, check if price rises above the swing high
else if position < 0 and real_high >= swingStopLevel
strategy.close("Short", comment="Swing Point Stop Hit")
position := 0
trailStopLevel := na
swingStopLevel := na
safetyNetStopLevel := na
lowestSinceEntry := na
// Check for safety net stop loss hit
if useSafetyNetStop and position != 0 and not na(safetyNetStopLevel)
// For long positions, check if price drops below the safety net level
if position > 0 and real_low <= safetyNetStopLevel
strategy.close("Long", comment="Safety Net Stop Hit")
position := 0
trailStopLevel := na
swingStopLevel := na
safetyNetStopLevel := na
highestSinceEntry := na
// For short positions, check if price rises above the safety net level
else if position < 0 and real_high >= safetyNetStopLevel
strategy.close("Short", comment="Safety Net Stop Hit")
position := 0
trailStopLevel := na
swingStopLevel := na
safetyNetStopLevel := na
lowestSinceEntry := na
// Track highest/lowest prices for trailing stop calculation
if position > 0 and not na(highestSinceEntry)
highestSinceEntry := math.max(highestSinceEntry, real_high)
if position < 0 and not na(lowestSinceEntry)
lowestSinceEntry := math.min(lowestSinceEntry, real_low)
// Update and check trailing stop (ATR-based)
if useTrailingStop and position != 0 and not na(trailStopLevel)
// Update trailing stop level for long positions
if position > 0
// Calculate new potential trailing stop level
trailStopNew = real_close - (atrValue * trailAtrMultiplier)
// Only move the stop up, never down
if trailStopNew > trailStopLevel
trailStopLevel := trailStopNew
// Check if price hit stop
if real_low <= trailStopLevel
strategy.close("Long", comment="ATR Trailing Stop Hit")
position := 0
trailStopLevel := na
swingStopLevel := na
safetyNetStopLevel := na
highestSinceEntry := na
// Update trailing stop level for short positions
else if position < 0
// Calculate new potential trailing stop level
trailStopNew = real_close + (atrValue * trailAtrMultiplier)
// Only move the stop down, never up
if trailStopNew < trailStopLevel
trailStopLevel := trailStopNew
// Check if price hit stop
if real_high >= trailStopLevel
strategy.close("Short", comment="ATR Trailing Stop Hit")
position := 0
trailStopLevel := na
swingStopLevel := na
safetyNetStopLevel := na
lowestSinceEntry := na
// Plot stop loss levels
plot(useTrailingStop and position != 0 ? trailStopLevel : na, "ATR Trailing Stop", color=color.yellow, style=plot.style_linebr, linewidth=1)
plot(useSwingStop and position != 0 ? swingStopLevel : na, "Swing Point Stop", color=color.red, style=plot.style_circles, linewidth=2)
plot(useSafetyNetStop and position != 0 ? safetyNetStopLevel : na, "Insurance Stop", color=color.yellow, style=plot.style_circles, linewidth=1)
// Visual signals for chart (just entry/exit markers, no ADX labels)
plotshape(longAlert, title="Long Entry", location=location.abovebar, color=bullishColor, style=shape.triangleup, size=size.small)
plotshape(shortAlert, title="Short Entry", location=location.belowbar, color=bearishColor, style=shape.triangledown, size=size.small)
plotshape(exitLongAlert, title="Long Exit Signal", location=location.abovebar, color=bullishColor, style=shape.xcross, size=size.small)
plotshape(exitShortAlert, title="Short Exit Signal", location=location.belowbar, color=bearishColor, style=shape.xcross, size=size.small)
// Supertrend visualization
bodyMiddlePlot = plot((real_open + real_close) / 2, "Body Middle", display=display.none)
upTrend = plot(useSupertrend and isUptrend ? supertrend : na, "Up Trend", color=bullishColor, style=plot.style_linebr, linewidth=1)
downTrend = plot(useSupertrend and isDowntrend ? supertrend : na, "Down Trend", color=bearishColor, style=plot.style_linebr, linewidth=1)
fill(upTrend, bodyMiddlePlot, color=useSupertrend ? color.new(bullishColor, 85) : na, title="Uptrend Background")
fill(downTrend, bodyMiddlePlot, color=useSupertrend ? color.new(bearishColor, 85) : na, title="Downtrend Background")
// Position background
bgcolor(position == 1 ? color.new(bullishColor, 85) : position == -1 ? color.new(bearishColor, 85) : na, title="Position Background")
// Position label
var label positionLabel = na
label.delete(positionLabel)
if barstate.islast
positionText = position == 1 ? "LONG" : position == -1 ? "SHORT" : "FLAT"
entryInfo = not na(entryPrice) ? "\nEntry: " + str.tostring(entryPrice, "#.00000") : ""
atrStopInfo = useTrailingStop and not na(trailStopLevel) ? "\nATR Stop: " + str.tostring(trailStopLevel, "#.00000") + " (" + str.tostring(trailAtrMultiplier, "#.0") + "x ATR)" : ""
swingStopInfo = useSwingStop and not na(swingStopLevel) ? "\nSwing Stop: " + str.tostring(swingStopLevel, "#.00000") + " (" + str.tostring(swingLookback) + " bars)" : ""
safetyNetInfo = useSafetyNetStop and not na(safetyNetStopLevel) ? "\nInsurance Stop: " + str.tostring(safetyNetStopLevel, "#.00000") + " (" + str.tostring(safetyNetPercent, "#.0") + "%)" : ""
supertrendInfo = useSupertrend ? "\nSupertrend: " + (isUptrend ? "UPTREND" : "DOWNTREND") : ""
positionColor = position == 1 ? bullishColor : position == -1 ? bearishColor : color.gray
positionLabel := label.new(bar_index, high, positionText + entryInfo + atrStopInfo + swingStopInfo + safetyNetInfo + supertrendInfo, color=positionColor, style=label.style_label_down, textcolor=color.white)