फिबोनाची पैटर्न सांख्यिकीय विश्लेषण रणनीति

斐波那契 模式识别 统计分析 技术指标 趋势跟踪 ATR 风险管理 IQR
निर्माण तिथि: 2025-03-03 10:24:54 अंत में संशोधित करें: 2025-03-03 10:24:54
कॉपी: 3 क्लिक्स: 478
2
ध्यान केंद्रित करना
319
समर्थक

फिबोनाची पैटर्न सांख्यिकीय विश्लेषण रणनीति फिबोनाची पैटर्न सांख्यिकीय विश्लेषण रणनीति

अवलोकन

फिबोनाची पैटर्न सांख्यिकीय विश्लेषण रणनीति एक उन्नत मात्रात्मक ट्रेडिंग विधि है जो तीन मुख्य मुख्य तकनीकों को जोड़ती है, फिबोनाची रिवर्स स्तर, पैटर्न पहचान एल्गोरिदम और सांख्यिकीय विश्लेषण। रणनीति मुख्य रूप से व्यापार संकेतों के आधार के रूप में 19% और 82.56% फिबोनाची रिवर्स स्तर का उपयोग करती है, जबकि पैटर्न मिलान एल्गोरिदम के माध्यम से उच्च संभावना ट्रेडिंग सेटिंग्स की पहचान करती है, और सांख्यिकीय विश्लेषण द्वारा पुष्टि की जाती है। इस बहुआयामी सिग्नल पुष्टि तंत्र ने रणनीति की विश्वसनीयता और सटीकता में काफी सुधार किया है। नीति में स्पष्ट प्रवेश और निकास नियम हैं, जिसमें हरे रंग के तीर मजबूत बहुसंकेत, लाल नीचे तीर मजबूत रिक्त संकेत, हरे रंग की पृष्ठभूमि बहुसंकेत, लाल पृष्ठभूमि रिक्त संकेत शामिल हैं। इसके अलावा, रणनीति में एक टेक्स्ट पैनल भी शामिल है, जो स्थिति को दर्शाता है, जब एक स्पर्श ने पहले की तुलना की थी।

रणनीति सिद्धांत

फिबोनैचि मॉडल की सांख्यिकीय विश्लेषण रणनीति का मूल सिद्धांत तीन मुख्य घटकों पर आधारित है:

  1. फिबोनैचि रिवाइंड स्तर: रणनीति 93 चक्रों में उच्चतम और निम्नतम बिंदुओं का उपयोग करती है, जो 19 प्रतिशत और 82.56% फिबोनैचि रिवर्स स्तरों की गणना करती है। ये असामान्य फिबोनैचि स्तर रणनीति की विशिष्टता हैं, जो बाजार के विशिष्ट व्यवहार के सांख्यिकीय विश्लेषण के आधार पर हो सकते हैं। जब कीमतें इन स्तरों को छूती हैं या तोड़ती हैं, तो एक प्रारंभिक व्यापार संकेत उत्पन्न होता है।

  2. पैटर्न पहचान: रणनीति एक जटिल पैटर्न मिलान एल्गोरिथ्म को लागू करती है जो पिछले मूल्य पैटर्न का विश्लेषण करके और वर्तमान पैटर्न के साथ समानता की गणना करती है। यह एक निर्दिष्ट लंबाई के आरेख पैटर्न (डिफ़ॉल्ट 5) का उपयोग करता है और ऐतिहासिक डेटा (डिफ़ॉल्ट 9 3 चक्र) में सबसे अच्छा मिलान ढूंढता है। यदि पाया गया पैटर्न समानता सेट थ्रेशोल्ड (डिफ़ॉल्ट 0.7) से अधिक है, तो रणनीति इस ऐतिहासिक पैटर्न के बाद मूल्य आंदोलन के आधार पर वर्तमान पैटर्न के बाद संभावित आंदोलन की भविष्यवाणी करती है।

  3. सांख्यिकी विश्लेषण: रणनीति में एक सांख्यिकीय पुष्टि तंत्र पेश किया गया है, जो मूल्य के सांख्यिकीय वितरण को निर्धारित करने के लिए माध्य, चतुर्थांश और चतुर्थांश अंतर (IQR) की गणना करता है। जब कीमत मध्य, ऊपरी और निचले चतुर्थांश को पार करती है या ऊपरी और निचले सीमा (Q3 + 1.5 * IQR और Q1 - 1.5 * IQR के रूप में परिभाषित) से परे जाती है, तो एक सांख्यिकीय संकेत उत्पन्न होता है। इन संकेतों की ताकत की गणना ब्रीच स्तर और उपयोगकर्ता द्वारा निर्धारित सांख्यिकीय अधिकारों के आधार पर की जाती है।

ट्रेडिंग सिग्नल का निर्माण इन तीन घटकों के संयोजन का परिणाम है:

  • कई शर्तों को पूरा करने के लिए Fibonacci स्पर्श या तोड़ने संकेतों को पूरा करना आवश्यक है (उपयोगकर्ता सेटिंग्स के आधार पर) और मोड दिशा बहुपक्षीय या तटस्थ है।
  • रिक्त करने की शर्तों को फिबोनैचि टच या ब्रेकिंग सिग्नल को पूरा करने की आवश्यकता होती है, मॉडल दिशा रिक्त या तटस्थ होती है, और सांख्यिकीय रिक्त पक्ष 0 से अधिक महत्वपूर्ण होती है।

रणनीति में जटिल जोखिम प्रबंधन तंत्र भी शामिल है, जिसमें शामिल हैंः

  • प्रतिशत या एटीआर के आधार पर स्टॉप लॉस का विकल्प
  • वैकल्पिक ट्रैक रोक
  • सात-स्तरीय बैच-लाभ तंत्र, प्रत्येक स्तर पर 14.28% की स्थिति

रणनीतिक लाभ

  1. बहुआयामी संकेत की पुष्टियह रणनीति तकनीकी विश्लेषण (फिबोनैच), पैटर्न पहचान और सांख्यिकीय विश्लेषण के तीन आयामों को जोड़ती है, जिससे एक शक्तिशाली बहु-पुष्टि तंत्र बनता है, जो झूठे संकेतों की संभावना को काफी कम करता है।

  2. अत्यधिक अनुकूलनीय: रणनीति समय चक्र चयन, पैटर्न की लंबाई, समानता थ्रेशोल्ड, ऐतिहासिक रिव्यू विंडो, सांख्यिकीय चक्र आदि सहित कई पैरामीटर सेटिंग्स प्रदान करती है, जिससे यह विभिन्न बाजार स्थितियों और व्यापार किस्मों के लिए अनुकूल हो सकता है।

  3. स्मार्ट पैटर्न पहचान: रणनीति के पैटर्न मिलान एल्गोरिदम न केवल पैटर्न के आकार पर विचार करते हैं, बल्कि समानता थ्रेशोल्ड पर भी विचार करते हैं, यह सुनिश्चित करते हुए कि केवल अत्यधिक समान पैटर्न का उपयोग भविष्यवाणी के लिए किया जाता है, जिससे भविष्यवाणी की सटीकता बढ़ जाती है।

  4. सांख्यिकीय सत्यापनचतुर्धातुक और IQR की सांख्यिकीय विधियों को शामिल करके, रणनीति को यह पहचानने में सक्षम किया जाता है कि कीमतें सांख्यिकीय वितरण में कहां हैं, जो व्यापारिक निर्णयों के लिए अतिरिक्त वस्तुनिष्ठ आधार प्रदान करती हैं।

  5. अच्छा जोखिम प्रबंधन: रणनीति कई स्टॉप-लॉस विकल्प प्रदान करती है (फिक्स्ड प्रतिशत, एटीआर गुणांक, स्टॉप-लॉस ट्रैक) और सात-स्तरीय बैच-बैक-प्रॉफिट तंत्र, जो लचीले और व्यवस्थित जोखिम प्रबंधन को लागू करता है।

  6. सहज ज्ञान युक्त दृश्य: रणनीति पृष्ठभूमि रंग, तीर, मार्कर और टैग सहित दृश्य तत्वों की एक विस्तृत श्रृंखला प्रदान करती है, जिससे व्यापारियों को वर्तमान बाजार की स्थिति और सिग्नल की ताकत को समझने में मदद मिलती है।

  7. वास्तविक समय स्थिति पैनल: रणनीति चार्ट पर एक वास्तविक समय में अद्यतन स्थिति पैनल प्रदर्शित करता है, स्पष्ट रूप से फिबोनाची, मॉडल और आंकड़ों के तीन घटकों की वर्तमान स्थिति, और उनके समग्र परिणामों को प्रदर्शित करता है।

रणनीतिक जोखिम

  1. पैरामीटर संवेदनशीलता: रणनीति कई मापदंडों का उपयोग करती है, जैसे कि मोड लंबाई, समानता थ्रेशोल्ड, सांख्यिकीय चक्र, आदि, और इन मापदंडों की सेटिंग्स रणनीति के प्रदर्शन को महत्वपूर्ण रूप से प्रभावित करती हैं। अनुचित पैरामीटर सेटिंग्स से ओवरफिट या सिग्नल की कमी हो सकती है। यह अनुशंसा की जाती है कि फीडबैक ऑप्टिमाइज़ेशन के माध्यम से किसी विशेष बाजार के लिए उपयुक्त पैरामीटर संयोजन का पता लगाया जाए।

  2. बाजार पर्यावरण पर निर्भरता: कुछ बाजार स्थितियों में, फिबोनैचि स्तरों में विफल हो सकता है, विशेष रूप से मजबूत प्रवृत्ति या अत्यधिक अस्थिरता वाले बाजारों में। रणनीति की प्रभावशीलता बाजार की स्थितियों के साथ बदल सकती है। समाधान बाजार की स्थिति का पता लगाने के लिए एक तंत्र की शुरूआत है, जो विभिन्न बाजार स्थितियों में विभिन्न पैरामीटर सेटिंग्स का उपयोग करता है।

  3. गणना की जटिलता: रणनीति के पैटर्न मिलान एल्गोरिदम को प्रत्येक चक्र में ऐतिहासिक डेटा को पार करने और समानता की गणना करने की आवश्यकता होती है, जो कम समय के फ्रेम पर गणना भार पैदा कर सकता है। इस समस्या को कम करने के लिए, एल्गोरिदम को अनुकूलित करने या गणना की आवृत्ति को कम करने पर विचार किया जा सकता है।

  4. ओवरट्रेडिंग का खतरा: एकाधिक सिग्नल तंत्र अक्सर ट्रेडिंग सिग्नल का कारण बन सकता है, विशेष रूप से कम समय सीमा पर। केवल उच्चतम गुणवत्ता के संकेतों को निष्पादित करने के लिए ट्रेडिंग आवृत्ति प्रतिबंध या सिग्नल शक्ति फ़िल्टर जोड़ने की सिफारिश की जाती है।

  5. रोक नुकसान सेटअप चुनौती: हालांकि रणनीति कई स्टॉप विकल्प प्रदान करती है, लेकिन इष्टतम स्टॉप स्तर का निर्धारण करना अभी भी एक चुनौती है। बहुत तंग स्टॉप अक्सर स्टॉप का कारण बन सकता है, और बहुत व्यापक बहुत अधिक नुकसान का कारण बन सकता है। बाजार की अस्थिर गतिशीलता के आधार पर स्टॉप स्तर को समायोजित करने की सिफारिश की जाती है।

  6. मूलभूत विचार का अभाव: रणनीति पूरी तरह से तकनीकी और सांख्यिकीय विश्लेषण पर आधारित है, बुनियादी कारकों को ध्यान में नहीं रखा गया है। जब कोई बड़ी खबर या घटना होती है, तो शुद्ध तकनीकी रणनीति को चुनौती दी जा सकती है। समाधान समाचार फ़िल्टर जोड़ना या बड़ी घटनाओं से पहले या बाद में व्यापार को रोकना है।

रणनीति अनुकूलन दिशा

  1. गतिशील पैरामीटर समायोजन: एक अनुकूलन तंत्र को पेश किया जा सकता है, जो बाजार की अस्थिरता या प्रवृत्ति की ताकत के आधार पर गतिशील रूप से पैरामीटर को समायोजित करता है, जैसे कि पैटर्न की लंबाई, समानता थ्रेशोल्ड और सांख्यिकीय चक्र। यह विभिन्न बाजार स्थितियों में रणनीति की अनुकूलनशीलता को बढ़ाएगा।

  2. उन्नत मोड मिलान एल्गोरिदम: वर्तमान पैटर्न मिलान मुख्य रूप से समापन मूल्य और समापन मूल्य के बीच संबंधों पर आधारित है (उच्च, निम्न या फ्लैट) और अधिक जटिल पैटर्न विशेषताओं को शामिल करने पर विचार किया जा सकता है, जैसे कि उच्च-नीचे बिंदु संबंध, लेनदेन की मात्रा या अस्थिरता दर पैटर्न, पैटर्न पहचान की सटीकता में सुधार करने के लिए।

  3. बाज़ार परिवेश वर्गीकरण: बाजार की स्थिति के वर्गीकरण के तंत्र को पेश करें, जैसे कि प्रवृत्ति / अंतराल / अराजकता वर्गीकरण, और विभिन्न बाजार स्थितियों में अलग-अलग व्यापार नियमों या पैरामीटर सेटिंग्स का उपयोग करें। इससे रणनीति को विभिन्न बाजार स्थितियों के लिए बेहतर रूप से अनुकूलित करने में मदद मिलेगी।

  4. सांख्यिकीय विश्लेषण को अनुकूलित करें: अधिक जटिल सांख्यिकीय विधियों का उपयोग करने पर विचार किया जा सकता है, जैसे कि जेड-स्कोर या प्रतिशत क्रम, या सांख्यिकीय संकेतों की गुणवत्ता में सुधार के लिए गतिशील सांख्यिकीय चक्रों को पेश करना।

  5. मशीन सीखने को एकीकृत करना: एक मशीन सीखने एल्गोरिथ्म का उपयोग करने के लिए विचार किया जा सकता है जो पैटर्न पहचान और सांख्यिकीय भार के वितरण को अनुकूलित करता है, या किसी विशेष पैटर्न के बाद मूल्य आंदोलन की संभावना वितरण की भविष्यवाणी करता है।

  6. बेहतर जोखिम प्रबंधन: गतिशील स्थिति प्रबंधन रणनीति को लागू करने के लिए, सिग्नल की ताकत, बाजार की अस्थिरता और खाता जोखिम के आधार पर स्थिति आकार को समायोजित करें। इसके अलावा, थोक लाभप्रदता तंत्र को अनुकूलित करने के लिए, बाजार की स्थिति के आधार पर गतिशील लाभप्रदता लक्ष्य को समायोजित करने के लिए।

  7. फ़िल्टर जोड़ें: विभिन्न प्रकार के फ़िल्टर जैसे कि रुझान फ़िल्टर, उतार-चढ़ाव दर फ़िल्टर या लेन-देन मात्रा फ़िल्टर को पेश करना, सिग्नल की गुणवत्ता को और बेहतर बनाने और झूठे संकेतों को कम करने के लिए।

संक्षेप

फिबोनाची पैटर्न की सांख्यिकीय विश्लेषण रणनीति एक संरचित, कार्यात्मक, मात्रात्मक ट्रेडिंग रणनीति है, जो एक शक्तिशाली बहुआयामी सिग्नल प्रणाली का निर्माण करने के लिए फिबोनाची रिवर्स लेवल, पैटर्न पहचान और सांख्यिकीय विश्लेषण के अभिनव संयोजन के माध्यम से है। रणनीति का मुख्य लाभ इसकी बहु-स्तरीय पुष्टिकरण तंत्र, अनुकूली डिजाइन और परिष्कृत जोखिम प्रबंधन सुविधाओं में है, जो इसे विभिन्न बाजार स्थितियों में उच्च संभावना वाले व्यापार के अवसरों की तलाश करने में सक्षम बनाता है।

हालांकि, रणनीति को पैरामीटर संवेदनशीलता, बाजार की स्थिति पर निर्भरता और गणना की जटिलता जैसी चुनौतियों का भी सामना करना पड़ता है। गतिशील पैरामीटर समायोजन, बढ़ी हुई पैटर्न मिलान एल्गोरिदम, बाजार की स्थिति वर्गीकरण और मशीन सीखने जैसे अनुकूलन दिशाओं को पेश करके रणनीति में काफी सुधार की गुंजाइश है।

इस रणनीति का उपयोग करने के इच्छुक व्यापारियों के लिए, यह अनुशंसा की जाती है कि वे पहले विभिन्न बाजारों और पैरामीटर सेटिंग्स के तहत रणनीति के प्रदर्शन के बारे में पता लगाएं, फिर छोटे पदों से शुरू करें और वास्तविक समय के व्यापार में पैरामीटर को धीरे-धीरे समायोजित करें और अनुकूलित करें, ताकि यह विशिष्ट व्यापार शैली और बाजार की स्थिति के अनुकूल हो सके। सबसे महत्वपूर्ण बात यह है कि इस रणनीति को एक उपकरण के रूप में देखें ट्रेडिंग टूलकिट में, न कि एक अलग-अलग प्रणाली, अन्य विश्लेषणात्मक तरीकों और जोखिम प्रबंधन सिद्धांतों के साथ संयोजन में उपयोग करने के लिए, इसकी क्षमता को अधिकतम करने के लिए।

रणनीति स्रोत कोड
/*backtest
start: 2024-03-03 00:00:00
end: 2024-05-01 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("Fibonacci-Only Strategi V2", overlay=true)

timeframe = input.timeframe("15", "Select Timeframe", options=["1", "5", "15", "30", "60", "240", "D"])
use_break_strategy = input(true, "Use Break Strategy")
stop_loss_percent = input.float(1.0, "Stop Loss %", minval=0.1, maxval=2.0, step=0.1)
use_atr_for_sl = input(true, "Use ATR for Stop Loss")
atr_multiplier = input.float(2.0, "ATR Multiplier for SL", minval=0.5, maxval=5.0, step=0.1)
use_trailing_stop = input(true, "Use Trailing Stop")
trailing_stop_percent = input.float(1.5, "Trailing Stop %", minval=0.1, maxval=5.0, step=0.1)

pattern_length = input.int(5, "Candle Pattern Length", minval=3, maxval=10)
similarity_threshold = input.float(0.7, "Pattern Similarity Threshold", minval=0.6, maxval=0.95)
lookback_window = input.int(93, "Historical Lookback Window", minval=10, maxval=93)

stat_period = input.int(50, "Statistical Period", minval=20, maxval=200)
stat_weight = input.float(0.5, "Statistical Confirmation Weight", minval=0.1, maxval=1.0, step=0.1)

fib_high = ta.highest(high, 93)
fib_low = ta.lowest(low, 93)
fib_diff = fib_high - fib_low
fib_19 = fib_high - fib_diff * 0.19
fib_8256 = fib_high - fib_diff * 0.8256
fib_19_reverse = fib_low + fib_diff * 0.19

plot(fib_8256, color=color.purple, style=plot.style_line, title="82.56% Fib")
plot(fib_19_reverse, color=color.orange, style=plot.style_line, title="19% Fib (Low to High)")

fib_19_touch = low[1] > fib_19 and low <= fib_19
fib_8256_touch = high[1] < fib_8256 and high >= fib_8256
fib_19_break = close < fib_19 and open > fib_19
fib_8256_break = close > fib_8256 and open < fib_8256
fib_19_reverse_touch = high[1] < fib_19_reverse and high >= fib_19_reverse
fib_19_reverse_break = close > fib_19_reverse and open < fib_19_reverse

bull_confirmation = close > open
bear_confirmation = close < open

getMedianAndQuartiles(src, len) =>
    values = array.new_float(0)
    for i = 0 to len - 1
        array.push(values, src[i])
    array.sort(values)
    size = array.size(values)
    median = size % 2 == 1 ? array.get(values, math.floor(size / 2)) : (array.get(values, size / 2 - 1) + array.get(values, size / 2)) / 2
    q1_idx = math.floor(size / 4)
    q3_idx = math.floor(3 * size / 4)
    q1 = array.get(values, q1_idx)
    q3 = array.get(values, q3_idx)
    [median, q1, q3]

[price_median, price_q1, price_q3] = getMedianAndQuartiles(close, stat_period)
iqr = price_q3 - price_q1
upper_bound = price_q3 + 1.5 * iqr
lower_bound = price_q1 - 1.5 * iqr

stat_bull_signal = close > price_median and close[1] <= price_median
stat_bear_signal = close < price_median and close[1] >= price_median
stat_strong_bull = close > price_q3 and close[1] <= price_q3
stat_strong_bear = close < price_q1 and close[1] >= price_q1
stat_extreme_bull = close > upper_bound
stat_extreme_bear = close < lower_bound

long_condition_fib_touch = (fib_19_touch or fib_19_reverse_touch) and bull_confirmation
long_condition_fib_break = use_break_strategy and (fib_19_break or fib_19_reverse_break) and bull_confirmation

short_condition_fib_touch = fib_19_touch and bear_confirmation
short_condition_fib_break = use_break_strategy and fib_19_break and bear_confirmation

getPatternSignature(start_idx, len) =>
    pattern = array.new_float(len)
    
    for i = 0 to len - 1
        if close[start_idx + i] > open[start_idx + i]
            array.set(pattern, i, 1.0)
        else if close[start_idx + i] < open[start_idx + i]
            array.set(pattern, i, -1.0)
        else
            array.set(pattern, i, 0.0)
    
    pattern

calcSimilarity(current_pattern, hist_pattern) =>
    matches = 0.0
    
    for i = 0 to array.size(current_pattern) - 1
        if array.get(current_pattern, i) == array.get(hist_pattern, i)
            matches := matches + 1.0
    
    matches / array.size(current_pattern)

findBestMatch() =>
    curr_pattern = getPatternSignature(1, pattern_length)
    
    best_idx = -1
    best_sim = 0.0
    direction = 0
    
    for i = pattern_length + 2 to lookback_window + 1
        if i < pattern_length * 2
            continue
            
        hist_pattern = getPatternSignature(i, pattern_length)
        sim = calcSimilarity(curr_pattern, hist_pattern)
        
        if sim > best_sim and sim >= similarity_threshold
            best_sim := sim
            best_idx := i
            
            next_close = close[i - pattern_length - 1]
            curr_close = close[i - pattern_length]
            
            if next_close > curr_close
                direction := 1
            else if next_close < curr_close
                direction := -1
    
    [best_idx, best_sim, direction]

var latest_pattern_sim = 0.0
var pattern_direction = 0

if barstate.isconfirmed
    [idx, sim, dir] = findBestMatch()
    
    if sim >= similarity_threshold
        latest_pattern_sim := sim
        pattern_direction := dir

calculateStatWeight(stat_signal, stat_strong, stat_extreme) =>
    weight = 0.0
    if stat_signal
        weight := stat_weight * 0.5
    if stat_strong
        weight := weight + stat_weight * 0.3
    if stat_extreme
        weight := weight + stat_weight * 0.2
    weight

stat_bull_weight = calculateStatWeight(stat_bull_signal, stat_strong_bull, stat_extreme_bull)
stat_bear_weight = calculateStatWeight(stat_bear_signal, stat_strong_bear, stat_extreme_bear)

long_condition = (long_condition_fib_touch or long_condition_fib_break) and 
                 (pattern_direction == 1 or pattern_direction == 0)

short_condition = (short_condition_fib_touch or short_condition_fib_break) and 
                  (pattern_direction == -1 or pattern_direction == 0) and
                  stat_bear_weight > 0

atr = ta.atr(14)

if long_condition
    strategy.entry("Long", strategy.long)

if short_condition
    strategy.entry("Short", strategy.short)

var float long_stop_loss = na
var float short_stop_loss = na

if strategy.position_size > 0
    long_stop_loss := use_atr_for_sl ? strategy.position_avg_price - atr * atr_multiplier : strategy.position_avg_price * (1 - stop_loss_percent / 100)

if strategy.position_size < 0
    short_stop_loss := use_atr_for_sl ? strategy.position_avg_price + atr * atr_multiplier : strategy.position_avg_price * (1 + stop_loss_percent / 100)

take_profit_levels = array.new_float(7)
for i = 0 to 6
    tp_percent = 1 + (i + 1) * 0.5 / 100
    array.set(take_profit_levels, i, tp_percent * strategy.position_avg_price)

if strategy.position_size > 0
    if use_trailing_stop
        trail_price = high - (high - strategy.position_avg_price) * trailing_stop_percent / 100
        strategy.exit("Long TS", "Long", stop=math.max(trail_price, long_stop_loss))
    else
        strategy.exit("Long SL", "Long", stop=long_stop_loss)
    
    for i = 0 to 6
        long_tp_price = array.get(take_profit_levels, i)
        strategy.exit("Long TP" + str.tostring(i+1), "Long", limit=long_tp_price, qty_percent=14.28)

if strategy.position_size < 0
    if use_trailing_stop
        trail_price = low + (strategy.position_avg_price - low) * trailing_stop_percent / 100
        strategy.exit("Short TS", "Short", stop=math.min(trail_price, short_stop_loss))
    else
        strategy.exit("Short SL", "Short", stop=short_stop_loss)
    
    for i = 0 to 6
        short_tp_price = array.get(take_profit_levels, i)
        strategy.exit("Short TP" + str.tostring(i+1), "Short", limit=short_tp_price, qty_percent=14.28)

bgcolor(long_condition ? color.new(color.green, 80) : short_condition ? color.new(color.red, 80) : na)

plotarrow(long_condition ? 1 : short_condition ? -1 : 0, title="Signal Direction", colorup=color.green, colordown=color.red, minheight=10, maxheight=20)

long_touch_marker = long_condition and long_condition_fib_touch ? low - atr : na
long_break_marker = long_condition and long_condition_fib_break ? low - atr * 1.5 : na
short_touch_marker = short_condition and short_condition_fib_touch ? high + atr : na
short_break_marker = short_condition and short_condition_fib_break ? high + atr * 1.5 : na

plotshape(long_touch_marker, style=shape.circle, color=color.green, size=size.normal, title="Long Touch Marker", location=location.absolute)
plotshape(long_break_marker, style=shape.xcross, color=color.green, size=size.normal, title="Long Break Marker", location=location.absolute)
plotshape(short_touch_marker, style=shape.circle, color=color.red, size=size.normal, title="Short Touch Marker", location=location.absolute)
plotshape(short_break_marker, style=shape.xcross, color=color.red, size=size.normal, title="Short Break Marker", location=location.absolute)

plotshape(stat_bear_signal, style=shape.triangledown, color=color.red, size=size.tiny, title="Statistical Bear Signal", location=location.abovebar)

if barstate.islast
    var table info = table.new(position.top_right, 4, 5, color.black, color.white, 2, color.gray, 2)
    
    table.clear(info, 0, 0, 3, 4)
    
    table.cell(info, 0, 0, "Fibonacci-Pattern with Stats", bgcolor=color.blue, text_color=color.white)
    table.cell(info, 0, 1, "Fib Status", bgcolor=color.blue, text_color=color.white)
    
    fib_status = "NEUTRAL"
    fib_color = color.gray
    
    if long_condition_fib_touch or long_condition_fib_break
        fib_status := "LONG"
        fib_color := color.green
    else if short_condition_fib_touch or short_condition_fib_break
        fib_status := "SHORT"
        fib_color := color.red
        
    table.cell(info, 1, 1, fib_status, bgcolor=fib_color, text_color=color.white)
    
    table.cell(info, 0, 2, "Pattern", bgcolor=color.blue, text_color=color.white)
    
    pattern_status = "NEUTRAL"
    pattern_color = color.gray
    
    if pattern_direction == 1
        pattern_status := "LONG"
        pattern_color := color.green
    else if pattern_direction == -1
        pattern_status := "SHORT"
        pattern_color := color.red
        
    table.cell(info, 1, 2, pattern_status, bgcolor=pattern_color, text_color=color.white)
    table.cell(info, 2, 2, pattern_direction != 0 ? str.tostring(math.round(latest_pattern_sim * 100)) + "%" : "N/A", bgcolor=color.gray, text_color=color.white)
    
    table.cell(info, 0, 3, "Statistics", bgcolor=color.blue, text_color=color.white)
    
    stat_status = "NEUTRAL"
    stat_color = color.gray
    
    if stat_bull_weight > 0
        stat_status := "BULL"
        stat_color := color.green
    else if stat_bear_weight > 0
        stat_status := "BEAR"
        stat_color := color.red
        
    table.cell(info, 1, 3, stat_status, bgcolor=stat_color, text_color=color.white)
    table.cell(info, 2, 3, stat_bull_weight > 0 ? str.tostring(math.round(stat_bull_weight * 100)) + "%" : 
                          stat_bear_weight > 0 ? str.tostring(math.round(stat_bear_weight * 100)) + "%" : "0%", 
                          bgcolor=color.gray, text_color=color.white)
    
    table.cell(info, 0, 4, "Combined", bgcolor=color.blue, text_color=color.white)
    
    combined_status = "NEUTRAL"
    combined_color = color.gray
    
    if long_condition
        combined_status := "LONG"
        combined_color := color.green
    else if short_condition
        combined_status := "SHORT"
        combined_color := color.red
        
    table.cell(info, 1, 4, combined_status, bgcolor=combined_color, text_color=color.white)

var label_id = label.new(na, na, "", color=color.gray, style=label.style_label_down, textcolor=color.white)

if long_condition and barstate.isconfirmed
    label.set_xy(label_id, bar_index, high)
    label.set_text(label_id, "LONG\n" + 
                           (long_condition_fib_touch ? "Touch" : "Break") + 
                           (pattern_direction == 1 ? " + Pattern " + str.tostring(math.round(latest_pattern_sim * 100)) + "%" : "") +
                           "\nStat: " + str.tostring(math.round(stat_bull_weight * 100)) + "%")
    label.set_color(label_id, color.green)
    label.set_style(label_id, label.style_label_down)

if short_condition and barstate.isconfirmed
    label.set_xy(label_id, bar_index, low)
    label.set_text(label_id, "SHORT\n" + 
                           (short_condition_fib_touch ? "Touch" : "Break") + 
                           (pattern_direction == -1 ? " + Pattern " + str.tostring(math.round(latest_pattern_sim * 100)) + "%" : "") +
                           "\nStat: " + str.tostring(math.round(stat_bear_weight * 100)) + "%")
    label.set_color(label_id, color.red)
    label.set_style(label_id, label.style_label_up)

alertcondition(long_condition, title="Long Entry", message="Long entry signal detected")
alertcondition(short_condition, title="Short Entry", message="Short entry signal detected")