डायनेमिक ब्रेकआउट मास्टर चैनल रणनीति: समर्थन और प्रतिरोध ब्रेकआउट पर आधारित एक अनुकूली ट्रेडिंग प्रणाली

趋势跟踪 突破交易 支撑阻力 通道交易 动态通道 价格区间 多指标 MA SMA EMA 止损策略 风险管理
निर्माण तिथि: 2025-03-03 10:33:02 अंत में संशोधित करें: 2025-03-03 10:33:02
कॉपी: 0 क्लिक्स: 655
2
ध्यान केंद्रित करना
319
समर्थक

डायनेमिक ब्रेकआउट मास्टर चैनल रणनीति: समर्थन और प्रतिरोध ब्रेकआउट पर आधारित एक अनुकूली ट्रेडिंग प्रणाली डायनेमिक ब्रेकआउट मास्टर चैनल रणनीति: समर्थन और प्रतिरोध ब्रेकआउट पर आधारित एक अनुकूली ट्रेडिंग प्रणाली

अवलोकन

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

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

ट्रेडिंग तर्क में, जब कीमत ऊपर की ओर प्रतिरोध क्षेत्र को तोड़ती है, तो सिस्टम एक खरीद संकेत को ट्रिगर करता है; जब कीमत नीचे की ओर समर्थन क्षेत्र को तोड़ती है, तो सिस्टम एक बेचने का संकेत देता है। वास्तविक व्यापारिक वातावरण के करीब आने के लिए, रणनीति में 0.1% की कमीशन लागत की गणना भी शामिल है।

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

डायनामिक ब्रेकआउट मास्टर चैनल रणनीति का मूल सिद्धांत बाजार संरचना में समर्थन और प्रतिरोध की पहचान और तोड़ने पर आधारित है। इसके तकनीकी कार्यान्वयन में मुख्य रूप से निम्नलिखित कुछ महत्वपूर्ण कदम शामिल हैंः

  1. टर्निंग पॉइंट पहचानपाइन स्क्रिप्ट का उपयोग करने की रणनीति:pivothighऔरpivotlowमूल्य चार्ट में उच्च और निम्न बिंदुओं का पता लगाने के लिए कार्य करता है, जिन्हें संभावित समर्थन और प्रतिरोध के रूप में देखा जाता है। उपयोगकर्ता इन टर्निंग पॉइंट्स को निर्धारित करने के लिए “उच्च/निम्न” या “क्लोज/ओपन” डेटा स्रोत का उपयोग करने का विकल्प चुन सकते हैं।

  2. गतिशील चैनल गणना: प्रणाली ने पहचान किए गए मोड़ के आधार पर गतिशील समर्थन प्रतिरोध चैनल का निर्माण किया।my_channelफ़ंक्शन, रणनीति प्रत्येक मोड़ बिंदु के आसपास के क्षेत्र की गणना करता है, और इसकी ताकत के आधार पर एक चैनल की ऊपरी सीमा (ceiling) और निचली सीमा (floor) निर्धारित करता है। चैनल की चौड़ाई प्रभावित होती हैmymaxwidthपैरामीटर की सीमा, जो हाल ही में 300 फ़्रेम के मूल्य सीमा पर आधारित है।

  3. क्षेत्रीय तीव्रता मूल्यांकनरणनीति न केवल मोड़ बिंदुओं को ही ध्यान में रखती है, बल्कि प्रत्येक समर्थन / प्रतिरोध क्षेत्र की ताकत का भी आकलन करती है। ताकत स्कोर दो कारकों पर आधारित होता हैः उस क्षेत्र में मोड़ बिंदुओं की संख्या (प्रत्येक मोड़ बिंदु पर 20 अंक की प्रारंभिक ताकत) और उस क्षेत्र के भीतर मूल्य की गतिविधि की आवृत्ति (प्रत्येक स्पर्श पर 1 अंक जोड़ा जाता है) ।

  4. क्षेत्रीय छँटाई और छँटाई: सिस्टम फ़िल्टरिंग की ताकत उपयोगकर्ता द्वारा निर्धारित थ्रेशोल्ड से अधिक हैmystrength * 20) के क्षेत्र में, और उच्च से निम्न तक क्रमबद्ध।mymaxzones) का समर्थन प्रतिरोध क्षेत्र।

  5. सफलता का पता लगानारणनीतिः समर्थन / प्रतिरोध क्षेत्र के परिवर्तन के संबंध में वर्तमान समापन मूल्य की तुलना करके और पिछले स्तंभ की स्थिति की तुलना करके एक ब्रेकडाउन का पता लगाया जाता है। जब कीमत क्षेत्र के अंदर से क्षेत्र के बाहर और क्षेत्र की ऊपरी सीमा ((प्रतिरोध ब्रेकडाउन) या निचली सीमा ((समर्थन ब्रेकडाउन) से गुजरती है, तो सिस्टम को एक प्रभावी ब्रेकडाउन के रूप में पहचाना जाता है।

  6. व्यापार संकेत उत्पन्न: जब प्रतिरोध टूटने का पता चलता है तो कई संकेतों को ट्रिगर करें ((“ResBreak”), जब समर्थन टूटने का पता चलता है तो रिक्त सिग्नल को ट्रिगर करें ((“SupBreak”)

रणनीतिक लाभ

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

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

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

  4. दृश्य प्रभावरणनीतियाँः चार्ट पर समर्थन-प्रतिरोध क्षेत्रों और ब्रेकआउट को दिखाने के लिए, विभिन्न रंग विभिन्न प्रकार के क्षेत्रों को दर्शाते हैं (प्रतिरोध, समर्थन या मध्यवर्ती क्षेत्र), जिससे व्यापारियों को बाजार संरचना और संभावित व्यापारिक अवसरों को अधिक स्पष्ट रूप से समझने में मदद मिलती है।

  5. एकीकृत चलती औसत: रणनीति दो अलग-अलग मापदंडों की एक चलती औसत जोड़ने की अनुमति देता है ((SMA या ईएमए के लिए विकल्प), व्यापार निर्णय के लिए एक अतिरिक्त प्रवृत्ति विश्लेषण परिप्रेक्ष्य प्रदान करता है, विशेष रूप से उन उपयोगकर्ताओं के लिए उपयुक्त है जो कई तकनीकी संकेतकों के साथ व्यापार करने की आदत रखते हैं।

  6. लेन-देन लागत विचाररणनीतिः ट्रेडिंग कमीशन की गणना को शामिल किया गया है, जो वास्तविक ट्रेडिंग परिवेश के करीब है, जिससे व्यापारियों को अधिक यथार्थवादी उम्मीदों का प्रबंधन करने में मदद मिलती है।

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

  1. फ़र्ज़ी घुसपैठ का खतराहालांकि रणनीति ने ताकत मूल्यांकन और छानने के तंत्र के माध्यम से झूठे संकेतों को कम कर दिया है, फिर भी उच्च अस्थिरता वाले बाजारों में झूठे टूटने की घटना हो सकती है, यानी कीमतें समर्थन / प्रतिरोध क्षेत्रों को तोड़ने के बाद वापस लौटती हैं। इससे अनावश्यक व्यापारिक नुकसान हो सकता है।

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

  1. पैरामीटर संवेदनशीलता: रणनीति का प्रदर्शन पैरामीटर सेटिंग्स (जैसे टर्नओवर चक्र, न्यूनतम ताकत, आदि) के प्रति संवेदनशील है, अनुचित पैरामीटर चयन से अत्यधिक या अपर्याप्त व्यापारिक संकेत हो सकते हैं।

समाधानयह अनुशंसा की जाती है कि वास्तविक व्यापार से पहले पैरामीटर का पर्याप्त अनुकूलन और परीक्षण किया जाए, ताकि विशिष्ट व्यापार किस्मों और समय अवधि के लिए पैरामीटर का इष्टतम संयोजन पाया जा सके।

  1. बाज़ार के माहौल के अनुकूलताइस रणनीति का उपयोग बाइनरी ऑप्शन्स में किया जाता है, लेकिन यह मजबूत प्रवृत्ति वाले बाजारों या बेहद कम अस्थिरता वाले बाजारों में खराब हो सकता है।

समाधान: एक बाजार परिवेश पहचान तंत्र जोड़ा जा सकता है, जो विभिन्न बाजार स्थितियों के लिए रणनीति पैरामीटर को स्वचालित रूप से समायोजित करता है या व्यापार को निलंबित करता है।

  1. क्षतिपूर्ति की कमीवर्तमान रणनीति केवल प्रवेश संकेतों को परिभाषित करती है और कोई स्पष्ट स्टॉप-लॉस और प्रॉफिट रणनीति नहीं है, जिससे प्रतिकूल परिस्थितियों में अत्यधिक नुकसान हो सकता है।

समाधानयह सुझाव दिया जाता है कि स्टॉप-लॉस रणनीतियों को जोड़ा जाए, जैसे कि समर्थन प्रतिरोध क्षेत्र के आधार पर स्टॉप-लॉस बिट्स सेट करना, या मोबाइल स्टॉप-लॉस तंत्र की सुरक्षा का उपयोग करना।

  1. ऐतिहासिक डेटा निर्भरतारणनीतिः समर्थन प्रतिरोध क्षेत्रों की पहचान करने के लिए ऐतिहासिक डेटा (अधिकतम 400 रूबल) का उपयोग करें, जो डेटा की कमी या बाजार संरचना में मौलिक परिवर्तन होने पर खराब प्रदर्शन कर सकता है।

समाधान: ऐतिहासिक डेटा के दायरे को गतिशील रूप से समायोजित करने पर विचार करें, या अनुकूलनशीलता बढ़ाने के लिए अन्य बाजार संरचना परिवर्तन जांच तंत्र जोड़ें।

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

  1. एकीकृत यातायात विश्लेषणवर्तमान रणनीति केवल मूल्य डेटा के आधार पर निर्णय लेने के लिए है, और यह सुझाव दिया जाता है कि लेन-देन विश्लेषण को एकीकृत किया जाए ताकि ब्रेकआउट सिग्नल की विश्वसनीयता को बढ़ाया जा सके। लेन-देन की मात्रा आमतौर पर वास्तविक ब्रेकआउट के दौरान काफी बढ़ जाती है, यह विशेषता कई झूठे ब्रेकआउट सिग्नल को फ़िल्टर करने में मदद कर सकती है।

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

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

  4. समय फ़िल्टर जोड़ें: कुछ समय के दौरान (जैसे कि बाजार खुलने या बंद होने से पहले) ब्रेकआउट अधिक अविश्वसनीय हो सकता है। समय फ़िल्टरिंग को जोड़ने से व्यापार को रोकने से बचने से समग्र जीत की दर बढ़ सकती है।

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

  6. स्थिति प्रबंधन तर्क में शामिल हों: क्षेत्रीय ताकत, बाजार की अस्थिरता या अन्य जोखिम कारकों के आधार पर स्थिति आकार को गतिशील रूप से समायोजित करें, उच्च आत्मविश्वास के मामले में स्थिति बढ़ाएं, उच्च जोखिम के मामले में खांचे को कम करें।

  7. अनुकूली मापदंडों का कार्यान्वयन: महत्वपूर्ण पैरामीटर (जैसे टर्निंग पॉइंट चक्र, चैनल की चौड़ाई आदि) को अनुकूलित करने के लिए डिज़ाइन किया गया है, जो बाजार की अस्थिरता या अन्य स्थितियों के आधार पर स्वचालित रूप से समायोजित हो सकता है, जिससे पैरामीटर के चयन की व्यक्तिपरकता कम हो जाती है।

संक्षेप

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

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

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

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

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

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © tradingbauhaus

//@version=6
strategy("Dynamic Breakout Master by tradingbauhaus ", overlay=true, max_bars_back=501, commission_type=strategy.commission.percent, commission_value=0.1)

// My Custom Inputs
myperiod = input.int(10, "Pivot Period", minval=4, maxval=30, group="Settings", tooltip="Bars on each side for pivots")
mysource = input.string("High/Low", "Data Source", options=["High/Low", "Close/Open"], group="Settings", tooltip="Where I grab pivots from")
mychannelwidth = input.int(5, "Max Channel Width %", minval=1, maxval=8, group="Settings", tooltip="Percentage based on 300 bars")
mystrength = input.int(1, "Min Strength", minval=1, group="Settings", tooltip="Min pivots per channel")
mymaxzones = input.int(6, "Max S/R Zones", minval=1, maxval=10, group="Settings", tooltip="Max S/R zones to show") - 1
mylookback = input.int(290, "Lookback Period", minval=100, maxval=400, group="Settings", tooltip="Bars back to check pivots")
myrescolor = input.color(color.new(color.red, 75), "Resistance Tone", group="Colors")
mysupcolor = input.color(color.new(color.blue, 75), "Support Tone", group="Colors")
myincolor = input.color(color.new(color.gray, 75), "In-Channel Tone", group="Colors")
myshowpivots = input.bool(false, "Show Pivots", group="Extras")
myshowbreaks = input.bool(false, "Show Breaks", group="Extras")
myma1_on = input.bool(false, "MA1 On", group="Extras")
myma1_len = input.int(50, "MA1 Length", minval=1, group="Extras")
myma1_type = input.string("SMA", "MA1 Type", options=["SMA", "EMA"], group="Extras")
myma2_on = input.bool(false, "MA2 On", group="Extras")
myma2_len = input.int(200, "MA2 Length", minval=1, group="Extras")
myma2_type = input.string("SMA", "MA2 Type", options=["SMA", "EMA"], group="Extras")

// Define commission as a constant (for display purposes, since strategy() already uses it)
mycommission = 0.1  // Matches commission_value in strategy(); adjust here if needed

// Calculate my moving averages
myma1 = myma1_on ? myma1_type == "SMA" ? ta.sma(close, myma1_len) : ta.ema(close, myma1_len) : na
myma2 = myma2_on ? myma2_type == "SMA" ? ta.sma(close, myma2_len) : ta.ema(close, myma2_len) : na
plot(myma1, color=not na(myma1) ? color.blue : na) 
plot(myma2, color=not na(myma2) ? color.red : na) 

// My custom data sources
float myhigh = mysource == "High/Low" ? high : math.max(close, open)
float mylow = mysource == "High/Low" ? low : math.min(close, open)
float mypeak = ta.pivothigh(myhigh, myperiod, myperiod)
float myvalley = ta.pivotlow(mylow, myperiod, myperiod)

// Draw pivots if I want
plotshape(not na(mypeak) and myshowpivots, text="P", style=shape.labeldown, color=na, textcolor=color.new(color.red, 0), location=location.abovebar, offset=-myperiod)
plotshape(not na(myvalley) and myshowpivots, text="V", style=shape.labelup, color=na, textcolor=color.new(color.blue, 0), location=location.belowbar, offset=-myperiod)

// Calculate max channel width
mytop = ta.highest(300) 
mybottom = ta.lowest(300) 
mymaxwidth = (mytop - mybottom) * mychannelwidth / 100

// Store my pivots with flair
var float[] myvalues = array.new_float(0) 
var float[] mypositions = array.new_float(0)
if not na(mypeak) or not na(myvalley) 
    array.unshift(myvalues, not na(mypeak) ? mypeak : myvalley) 
    array.unshift(mypositions, bar_index)
    for x = array.size(myvalues) - 1 to 0 
        if bar_index - array.get(mypositions, x) > mylookback 
            array.pop(myvalues) 
            array.pop(mypositions) 
            continue 
        break

// My channel-making function
my_channel(ind) => 
    float base = array.get(myvalues, ind) 
    float ceiling = base 
    float floor = base 
    int strength = 0
    for y = 0 to array.size(myvalues) - 1 
        float level = array.get(myvalues, y) 
        float gap = level <= ceiling ? ceiling - level : level - floor
        if gap <= mymaxwidth 
            if level <= ceiling 
                floor := math.min(floor, level) 
            else 
                ceiling := math.max(ceiling, level)
            strength += 20
    [ceiling, floor, strength]

// My S/R zones and swap function
var float[] sr_zones = array.new_float(20, 0)
myswap(x, y) => 
    temp = array.get(sr_zones, y * 2)
    array.set(sr_zones, y * 2, array.get(sr_zones, x * 2)) 
    array.set(sr_zones, x * 2, temp)
    temp := array.get(sr_zones, y * 2 + 1)
    array.set(sr_zones, y * 2 + 1, array.get(sr_zones, x * 2 + 1)) 
    array.set(sr_zones, x * 2 + 1, temp)

// Main logic with my twist
if not na(mypeak) or not na(myvalley) 
    float[] levels = array.new_float(0) 
    float[] power = array.new_float(10, 0)
    for x = 0 to array.size(myvalues) - 1 
        [c, f, s] = my_channel(x) 
        array.push(levels, s) 
        array.push(levels, c) 
        array.push(levels, f)
    for x = 0 to array.size(myvalues) - 1 
        highlvl = array.get(levels, x * 3 + 1) 
        lowlvl = array.get(levels, x * 3 + 2) 
        boost = 0
        for y = 0 to mylookback 
            if high[y] <= highlvl and high[y] >= lowlvl or low[y] <= highlvl and low[y] >= lowlvl 
                boost += 1
        array.set(levels, x * 3, array.get(levels, x * 3) + boost)
    array.fill(sr_zones, 0) 
    counter = 0
    for x = 0 to array.size(myvalues) - 1 
        maxpower = -1. 
        maxspot = -1
        for y = 0 to array.size(myvalues) - 1 
            if array.get(levels, y * 3) > maxpower and array.get(levels, y * 3) >= mystrength * 20 
                maxpower := array.get(levels, y * 3) 
                maxspot := y
        if maxspot >= 0 
            top = array.get(levels, maxspot * 3 + 1) 
            bottom = array.get(levels, maxspot * 3 + 2)
            array.set(sr_zones, counter * 2, top) 
            array.set(sr_zones, counter * 2 + 1, bottom)
            array.set(power, counter, array.get(levels, maxspot * 3))
            for y = 0 to array.size(myvalues) - 1 
                if array.get(levels, y * 3 + 1) <= top and array.get(levels, y * 3 + 1) >= bottom or array.get(levels, y * 3 + 2) <= top and array.get(levels, y * 3 + 2) >= bottom 
                    array.set(levels, y * 3, -1)
            counter += 1 
            if counter >= 10 
                break
    for x = 0 to 8 
        for y = x + 1 to 9 
            if array.get(power, y) > array.get(power, x) 
                temp = array.get(power, y) 
                array.set(power, y, array.get(power, x)) 
                myswap(x, y)

// My level and color functions
mylevel(ind) => 
    float result = na 
    if ind < array.size(sr_zones) and array.get(sr_zones, ind) != 0 
        result := array.get(sr_zones, ind)
    result

mycolor(ind) => 
    color shade = na 
    if ind < array.size(sr_zones) and array.get(sr_zones, ind) != 0 
        shade := array.get(sr_zones, ind) > close and array.get(sr_zones, ind + 1) > close ? myrescolor : array.get(sr_zones, ind) < close and array.get(sr_zones, ind + 1) < close ? mysupcolor : myincolor
    shade
    
// Detect breaks
resistancebroken = false 
supportbroken = false 
outofzone = true
for x = 0 to math.min(9, mymaxzones) 
    if close <= array.get(sr_zones, x * 2) and close >= array.get(sr_zones, x * 2 + 1) 
        outofzone := false
if outofzone 
    for x = 0 to math.min(9, mymaxzones) 
        if close[1] <= array.get(sr_zones, x * 2) and close > array.get(sr_zones, x * 2) 
            resistancebroken := true
        if close[1] >= array.get(sr_zones, x * 2 + 1) and close < array.get(sr_zones, x * 2 + 1) 
            supportbroken := true

// Alerts and shapes
alertcondition(resistancebroken, title="ResBreak", message="Resistance shattered!")
alertcondition(supportbroken, title="SupBreak", message="Support cracked!")
plotshape(myshowbreaks and resistancebroken, style=shape.triangleup, location=location.belowbar, color=color.new(color.blue, 0), size=size.tiny)
plotshape(myshowbreaks and supportbroken, style=shape.triangledown, location=location.abovebar, color=color.new(color.red, 0), size=size.tiny)

// Strategy with commissions factored in
if resistancebroken 
    strategy.entry("ResBreak", strategy.long)
if supportbroken 
    strategy.entry("SupBreak", strategy.short)