चलती औसत लिफाफा चैनल ट्रेंड फॉलोअप रणनीति चलती औसत लाइनों और चैनल संकेतकों के आधार पर एक प्रवृत्ति अनुसरण रणनीति है। यह बहु-स्तरीय चलती औसत चैनल स्थापित करके मूल्य रुझानों के निर्णय और ट्रैकिंग का एहसास करती है। रणनीति बहु-समय फ्रेम संलयन प्राप्त करने के लिए विभिन्न समय सीमाओं के चलती औसत गणनाओं को भी जोड़ती है, जो बड़े रुझानों को पकड़ने में मदद करती है।
इस रणनीति का मूल सिद्धांत चलती औसत रेखाओं की प्रवृत्ति ट्रैकिंग कार्यक्षमता और लिफाफे संकेतकों के चैनल निर्णय पर आधारित है। रणनीति एक आधार रेखा चलती औसत बनाने के लिए चलती औसत अवधि, चिकनी प्रकार, मूल्य स्रोत, आदि जैसे विन्यास योग्य मापदंडों का उपयोग करती है। फिर मापदंडों द्वारा निर्धारित प्रतिशत शिफ्ट मूल्यों के अनुसार ऊपर और नीचे के चैनल स्थापित किए जाते हैं। जब कीमत निचले चैनल के माध्यम से टूटती है, तो लंबी; जब कीमत ऊपरी चैनल के माध्यम से टूटती है, तो छोटी जाती है। साथ ही, रणनीति स्टॉप लॉस लाइन के रूप में एक स्वतंत्र चलती औसत पेश करती है।
विशेष रूप से, रणनीति की निम्नलिखित विशेषताएं हैंः
लंबे और छोटे दोनों प्रकार के संचालन का समर्थन करें, ऊपर और नीचे के चैनलों के माध्यम से प्रवृत्ति की दिशा का न्याय करें।
4 आदेशों तक खोलें, अधिक लाभ प्राप्त करने के लिए पॉलीलाइन परतों के माध्यम से पिरामिड ऑर्डर खोलने को लागू करें।
सटीक स्टॉप लॉस प्राप्त करने के लिए स्वतंत्र उद्घाटन चलती औसत और समापन चलती औसत को कॉन्फ़िगर करें।
मल्टी टाइमफ्रेम फ्यूजन प्राप्त करने के लिए विभिन्न समय सीमाओं (1 मिनट से 1 दिन) के चलती औसत गणना का समर्थन करें।
खोलने और बंद करने वाले चलती औसत 6 अलग-अलग चिकनाई मोड के चयन का समर्थन करते हैं, जिन्हें विभिन्न किस्मों और चक्रों के लिए अनुकूलित किया जा सकता है।
चैनल को समायोजित करने और अधिक सटीक सफलता प्राप्त करने के लिए सकारात्मक और नकारात्मक ऑफसेट दर्ज किए जा सकते हैं।
रणनीति का विशिष्ट व्यापारिक तर्क इस प्रकार है:
बेंचमार्क खोलने के चलती औसत की गणना करें, और पैरामीटर के सेट प्रतिशत के अनुसार 4 ब्रेकथ्रू लाइन प्राप्त करें।
जब कीमत निचली चैनल लाइन को तोड़ती है, तो लंबे समय तक जाने के लिए पदों को खोलें; जब कीमत ऊपरी चैनल लाइन को तोड़ती है, तो शॉर्ट करने के लिए पदों को खोलें।
स्टॉप लॉस लाइन के रूप में स्वतंत्र क्लोजिंग मूविंग एवरेज की गणना करें। जब कीमत फिर से लाइन से नीचे गिरती है, तो परतों में लंबे ऑर्डर को रोकें; जब कीमत फिर से लाइन से ऊपर उठती है, तो परतों में छोटे ऑर्डर को रोकें।
अधिक लाभ प्राप्त करने के लिए स्तरित पिरामिड ऑर्डर खोलने का उपयोग करें।
इस रणनीति के सिद्धांत के माध्यम से, यह देखा जा सकता है कि यह रणनीति एक अपेक्षाकृत कठोर और पूर्ण प्रवृत्ति प्रणाली बनाने के लिए चलती औसत रेखाओं के प्रवृत्ति ट्रैकिंग, चैनल निर्णय के सफलता संकेतों और स्वतंत्र स्टॉप लॉस लाइनों की स्थापना जैसे तत्वों को एकीकृत करती है।
कोड और तार्किक विश्लेषण के अनुसार, चलती औसत को कवर करने वाली चैनल ट्रेंड रणनीति के निम्नलिखित फायदे हैंः
मल्टी-टाइमफ्रेम फ्यूजन बड़े पैमाने पर रुझानों को कैप्चर करने की संभावना में सुधार करता है। रणनीति 1 मिनट से 1 दिन तक विभिन्न चक्रों के चलती औसत की गणना का समर्थन करती है। विभिन्न चक्रों के साथ उद्घाटन और स्टॉप-लॉस चलती औसत को कॉन्फ़िगर करने से मल्टी-टाइमफ्रेम ट्रेंड जजमेंट शक्ति का संलयन प्राप्त होता है, जो बड़े पैमाने पर रुझानों को कैप्चर करने के लिए अधिक अनुकूल है।
पिरामिड ऑर्डर खोलने की विधि अधिक लाभ का पीछा करती है। रणनीति 4 ऑर्डर तक खोल सकती है। स्तरित ऑर्डर खोलने से, यह लाभ अनुपात को संतुलित करता है और जोखिमों को नियंत्रित करते हुए अधिक लाभ का पीछा करता है।
चयन के लिए 6 प्रकार के मूविंग एवरेज उपलब्ध हैं और अनुकूलन क्षमता मजबूत है। उद्घाटन और स्टॉप-लॉस मूविंग एवरेज SMA/EMA/डायनामिक मूविंग एवरेज सहित 6 मोड के चयन का समर्थन करता है, जिन्हें अनुकूलन क्षमता में सुधार के लिए विभिन्न किस्मों और चक्रों के लिए अनुकूलित किया जा सकता है।
समायोज्य चैनल लाइनें सफलता के निर्णय को अधिक सटीक बनाती हैं। रणनीति विभिन्न किस्मों या बाजार वातावरणों के अनुकूल अनुकूलन के लिए चैनल चौड़ाई को समायोजित करने के लिए चैनल चलती प्रतिशत मापदंडों के इनपुट की अनुमति देती है, जिससे सफलता के निर्णयों की सटीकता में सुधार होता है।
स्वतंत्र स्टॉप लॉस लाइन जोखिम नियंत्रण के लिए उपयोगी है। रणनीति एक स्वतंत्र चलती औसत रेखा की गणना लॉन्ग या शॉर्ट ऑर्डर को रोकने के लिए बंद लाइन के रूप में करती है, जो ट्रेडिंग जोखिम को काफी कम कर सकती है और ऑर्डर खोकर पीछा करने से बच सकती है।
कोड संरचना स्पष्ट और विकसित करने में आसान है। रणनीति पाइन स्क्रिप्ट में स्पष्ट संरचना के साथ लिखी गई है और समझने और विकसित करने में आसान है। उपयोगकर्ता मौजूदा ढांचे के आधार पर मापदंडों को अनुकूलित करना या अन्य तर्क जोड़ना जारी रख सकते हैं।
यद्यपि समग्र रणनीति तर्क कठोर है और जोखिम नियंत्रण लागू है, फिर भी कुछ व्यापारिक जोखिमों के बारे में पता होना चाहिए, विशेष रूप से निम्नलिखित सहितः
बड़े पैमाने पर रुझान उलट जोखिम। रणनीति की मुख्य धारणा यह है कि कीमतें कुछ प्रवृत्ति के साथ लगातार आगे बढ़ती रहेंगी। हालांकि, जब बड़े पैमाने पर रुझान उलट जाते हैं, तो इसका रणनीति की लाभप्रदता पर अधिक प्रभाव पड़ेगा। नुकसान को नियंत्रित करने के लिए समय पर नुकसान को रोकना आवश्यक है।
अमान्य सफलता का जोखिम। साइडवेज या सदमे के बाजारों में, कीमतें ब्रेक के बाद चैनल लाइन से नीचे गिर सकती हैं, जिससे ऑर्डर खोकर पीछा किया जा सकता है। ऐसे मामलों को कम करने के लिए मापदंडों को अनुकूलित करने की आवश्यकता है।
अपेक्षा प्रबंधन जोखिम। रणनीति अधिक लाभ प्राप्त करने के लिए पिरामिड आदेशों की 4 परतें निर्धारित करती है, जिसके परिणामस्वरूप लाभ अवधि के दौरान महत्वपूर्ण रिटर्न होता है लेकिन हानि अवधि के दौरान अपेक्षाओं में भी तेज गिरावट आती है। इसके लिए निवेशकों को पेशेवर मनोवैज्ञानिक प्रबंधन कौशल की आवश्यकता होती है।
सिग्नल अनुकूलन जोखिम। रणनीति में चैनल चौड़ाई और चलती औसत चक्र जैसे कई मापदंडों पर समायोजन और अनुकूलन शामिल हैं। इससे पेशेवर क्वांट्स को ओवरफिटिंग से बचने के लिए अनुकूलन अनुभव की आवश्यकता होती है।
विशेष बाजार स्थितियों का जोखिमः तेजी से अंतराल या छोटी लाइन सीमाओं जैसे चरम बाजार स्थितियां रणनीति तर्क को काफी नुकसान पहुंचाएंगी, इसलिए समय पर स्टॉप लॉस के लिए प्रणालीगत जोखिम मेट्रिक्स पर ध्यान देने की आवश्यकता है।
आम तौर पर, रणनीति लाभप्रदता के लिए मुख्य रूप से बड़े पैमाने पर प्रवृत्ति लाभ पर निर्भर करती है, और केवल दीर्घकालिक दृढ़ता विशेषताओं वाली किस्मों और बाजार वातावरण पर लागू होती है। इसके अलावा, बहु-पैरामीटर अनुकूलन और मानसिकता नियंत्रण भी रणनीतियों की स्थिर लाभप्रदता सुनिश्चित करने के लिए महत्वपूर्ण हैं।
इस चलती औसत लिफाफा चैनल प्रवृत्ति के लिए निम्नलिखित रणनीति के लिए मुख्य अनुकूलन दिशाओं में शामिल हैंः
मशीन लर्निंग एल्गोरिदम के आधार पर चैनल लाइनों और स्टॉप लॉस लाइनों का अनुकूलन अनुकूलन। स्मार्ट मूल्य भविष्यवाणी और जोखिम से बचने के लिए चैनल और स्टॉप लॉस लाइन मॉडल को प्रशिक्षित करने के लिए एलएसटीएम और प्रक्षेपवक्र भविष्यवाणी जैसे मॉडल का उपयोग किया जा सकता है।
पिरामिड तर्क को अनुकूलित करने के लिए भावना संकेतक, पोर्टफोलियो भार अनुपात जैसे सहायक कारकों को शामिल करें। पूर्ण अस्थिरता और बाजार भावना जैसे कारकों को पोर्टफोलियो जोखिमों को नियंत्रित करने और पिरामिड ऑर्डर खोलने के तर्क को अनुकूलित करने के लिए जोड़ा जा सकता है।
बैकटेस्टिंग की प्रामाणिकता में सुधार के लिए ट्रेडिंग लागत और फिसलन मॉडल पेश करें। वर्तमान बैकटेस्टिंग में ट्रेडिंग लागतों के प्रभाव पर विचार नहीं किया जाता है, जो वास्तविक ट्रेडिंग में एक महत्वपूर्ण कारक है जिसे गणितीय मॉडल में शामिल करने की आवश्यकता है।
समान परिसंपत्ति वर्गों में सहसंबंध विश्लेषण का विस्तार करने के लिए एकीकृत जोखिम नियंत्रण ढांचे का निर्माण करें। मौजूदा एकल परिसंपत्ति रणनीति का विस्तार कमोडिटी और क्रिप्टोकरेंसी जैसे कई समान बाजारों में करें, और रणनीति स्थिरता में सुधार के लिए सहसंबंध विश्लेषण के माध्यम से जोखिम नियंत्रण को एकीकृत करें।
उपयोगकर्ता के अनुकूलता में सुधार के लिए रणनीति की व्याख्या करने की क्षमता बढ़ाएं। रणनीति परिणामों, आउटपुट महत्व रैंकिंग के लिए प्रत्येक इनपुट चर के महत्व का विश्लेषण करने के लिए SHAP जैसे तरीकों का उपयोग करें, और रणनीति तर्क को उपयोगकर्ताओं के लिए अधिक पारदर्शी और व्याख्या करने योग्य बनाएं।
रणनीति स्थिरता, प्रामाणिकता और उपयोगिता को और अधिक अनुकूलित करने के लिए मशीन लर्निंग और बहु-कारक मॉडल जैसे एल्गोरिदम पेश करना आगे बढ़ने वाली मुख्य सुधार दिशा है।
संक्षेप में, चलती औसत चैनल ट्रेंड फॉलोअप रणनीति में तीन प्रमुख बिंदु शामिल हैंः चलती औसत के ट्रेंड ट्रैकिंग, चैनल इंडिकेटर की ट्रेंड पहचान और जोखिम नियंत्रण के लिए स्वतंत्र स्टॉप लॉस लाइनें। सख्त ट्रेंडिंग बाजारों में, रणनीति लाभ के बाद उचित मात्रा में ट्रेंड के साथ स्थिर रिटर्न प्रदान कर सकती है। लेकिन उपयोगकर्ताओं को मैक्रो मार्केट वातावरण पर ध्यान देने, मापदंडों को ठीक से अनुकूलित करने और जोखिमों का प्रबंधन करने की आवश्यकता है, ताकि रणनीति जटिल और लगातार बदलते ट्रेडिंग बाजारों के अनुकूल हो सके। कुल मिलाकर, रणनीति उपयोगकर्ताओं को अपेक्षाकृत पूर्ण और कठोर ट्रेंड ट्रैकिंग समाधान प्रदान करती है, और मालिकाना विकास और माध्यमिक विकास के लिए एक बहुत ही उपयुक्त मात्रात्मक रणनीति ढांचा है।
/*backtest start: 2023-10-23 00:00:00 end: 2023-11-22 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the GNU Affero General Public License v3.0 at https://www.gnu.org/licenses/agpl-3.0.html //@version=4 strategy(title = "HatiKO Envelopes", shorttitle = "HatiKO Envelopes", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 4, initial_capital=10, calc_on_order_fills=false) //Settings isLotSizeAvgShifts=input(true, title ="Calculate lot size with avgPrice shifts (HatiKO calculate)") lotsize_Short = input(100, defval = 100, minval = 0, maxval = 10000, title = "Lot short, %") lotsize_Long = input(100, defval = 100, minval = 0, maxval = 10000, title = "Lot long, %") //Shorts Open Config timeFrame_Short = input(defval = "Current.", options = ["Current.", "1m", "3m", "5m", "10m", "15m", "20m", "30m", "45m", "1H","2H","3H","4H","1D"], title = "Timeframe Short") ma_type_Short = input(defval = "1. SMA", options = ["1. SMA", "2. PCMA", "3. EMA", "4. WMA", "5. DEMA", "6. ZLEMA"], title = "MA Type Short") Short_Data_input = input(defval = "7.OHLC4", options = ["1.Open", "2.High", "3.Low", "4.Close", "5.HL2", "6.HLC3", "7.OHLC4", "8.OC2"], title = "Data Short") len_Short = input(3, minval = 1, title = "MA Length Short") offset_Short = input(0, minval = 0, title = "MA offset Short") //Longs Open Config timeFrame_Long = input(defval = "Current.", options = ["Current.", "1m", "3m", "5m", "10m", "15m", "20m", "30m", "45m", "1H","2H","3H","4H","1D"], title = "Timeframe Long") ma_type_Long = input(defval = "1. SMA", options = ["1. SMA", "2. PCMA", "3. EMA", "4. WMA", "5. DEMA", "6. ZLEMA"], title = "MA Type Long") Long_Data_input = input(defval = "7.OHLC4", options = ["1.Open", "2.High", "3.Low", "4.Close", "5.HL2", "6.HLC3", "7.OHLC4", "8.OC2"], title = "Data Long") len_Long = input(3, minval = 1, title = "MA Length Long") offset_Long = input(0, minval = 0, title = "MA offset Long") //Shorts Close Config isEnableShortCustomClose=input(false, title ="Mode close MA Short") timeFrame_close_Short = input(defval = "Current.", options = ["Current.", "1m", "3m", "5m", "10m", "15m", "20m", "30m", "45m", "1H","2H","3H","4H","1D"], title = "Timeframe Short Close") ma_type_close_Short = input(defval = "1. SMA", options = ["1. SMA", "2. PCMA", "3. EMA", "4. WMA", "5. DEMA", "6. ZLEMA"], title = "MA Type Close Short") Short_Data_input_close = input(defval = "7.OHLC4", options = ["1.Open", "2.High", "3.Low", "4.Close", "5.HL2", "6.HLC3", "7.OHLC4", "8.OC2"], title = "Data Short Close") len_Short_close = input(3, minval = 1, title = "MA Length Short Close") shortDeviation = input( 0.0, title = "Short Deviation %",step=0.1) offset_Short_close = input(0, minval = 0, title = "MA offset Short Close") //Longs Close Config isEnableLongCustomClose=input(false, title ="Mode close MA Long") timeFrame_close_Long = input(defval = "Current.", options = ["Current.", "1m", "3m", "5m", "10m", "15m", "20m", "30m", "45m", "1H","2H","3H","4H","1D"], title = "Timeframe Long Close") ma_type_close_Long = input(defval = "1. SMA", options = ["1. SMA", "2. PCMA", "3. EMA", "4. WMA", "5. DEMA", "6. ZLEMA"], title = "MA Type Close Long") Long_Data_input_close = input(defval = "7.OHLC4", options = ["1.Open", "2.High", "3.Low", "4.Close", "5.HL2", "6.HLC3", "7.OHLC4", "8.OC2"], title = "Data Long Close") len_Long_close = input(3, minval = 1, title = "MA Length Long Close") longDeviation = input( -0.0, title = "Long Deviation %",step=0.1) offset_Long_close = input(0, minval = 0, title = "MA offset Long Close") shift_Short4_percent = input(0.0, title = "Short Shift 4") shift_Short3_percent = input(10.0, title = "Short Shift 3") shift_Short2_percent = input(7.0, title = "Short Shift 2") shift_Short1_percent = input(4.0, title = "Short Shift 1") shift_Long1_percent = input(-4.0, title = "Long Shift 1") shift_Long2_percent = input(-7.0, title = "Long Shift 2") shift_Long3_percent = input(-10.0, title = "Long Shift 3") shift_Long4_percent = input( -0.0, title = "Long Shift 4") isEnableDoubleLotShift3_Long=input(false, title ="Shift3 Long LotSize*2") isEnableDoubleLotShift3_Short=input(false, title ="Shift3 Short LotSize*2") year_Start = input(19, defval = 19, minval = 10, maxval = 99, title = "From Year 20XX") year_End = input(99, defval = 99, minval = 10, maxval = 99, title = "To Year 20XX") month_Start = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month") month_End = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month") day_Start = input(01, defval = 01, minval = 01, maxval = 31, title = "From day") day_End = input(31, defval = 31, minval = 01, maxval = 31, title = "To day") short4_isActive = shift_Short4_percent != 0 and lotsize_Short > 0 short3_isActive = shift_Short3_percent != 0 and lotsize_Short > 0 short2_isActive = shift_Short2_percent != 0 and lotsize_Short > 0 short1_isActive = shift_Short1_percent != 0 and lotsize_Short > 0 long1_isActive = shift_Long1_percent != 0 and lotsize_Long > 0 long2_isActive = shift_Long2_percent != 0 and lotsize_Long > 0 long3_isActive = shift_Long3_percent != 0 and lotsize_Long > 0 long4_isActive = shift_Long4_percent != 0 and lotsize_Long > 0 mult = 1 / syminfo.mintick is_time_true = time > timestamp(2000+year_Start, month_Start, day_Start, 00, 00) and time < timestamp(2000+ year_End, month_End, day_End, 23, 59) //MA TFsecurity_Short = timeFrame_Short == "4H"?60*4:timeFrame_Short=="3H"?60*3:timeFrame_Short=="2H"?60*2:timeFrame_Short=="1H"?60:timeFrame_Short=="45m"?45:timeFrame_Short=="30m"?30:timeFrame_Short=="20m"?20:timeFrame_Short=="15m"?15:timeFrame_Short=="10m"?10:timeFrame_Short=="5m"?5:timeFrame_Short=="3m"?3:1 TFsecurity_Long = timeFrame_Long == "4H"?60*4:timeFrame_Long=="3H"?60*3:timeFrame_Long=="2H"?60*2:timeFrame_Long=="1H"?60:timeFrame_Long=="45m"?45:timeFrame_Long=="30m"?30:timeFrame_Long=="20m"?20:timeFrame_Long=="15m"?15:timeFrame_Long=="10m"?10:timeFrame_Long=="5m"?5:timeFrame_Long=="3m"?3:1 oc2 = (open + close) / 2 lag_Short = (len_Short - 1) / 2//floor((len_Short - 1) / 2) lag_Long = (len_Long - 1) / 2 //floor((len_Long - 1) / 2) source_Short = Short_Data_input == "1.Open" ? open : Short_Data_input == "2.High" ? high : Short_Data_input == "3.Low" ? low : Short_Data_input == "4.Close" ? close : Short_Data_input == "5.HL2" ? hl2 : Short_Data_input == "6.HLC3" ? hlc3 : Short_Data_input == "7.OHLC4" ? ohlc4 : Short_Data_input == "8.OC2" ? oc2: close source_Long = Long_Data_input == "1.Open" ? open : Long_Data_input == "2.High" ? high : Long_Data_input == "3.Low" ? low : Long_Data_input == "4.Close" ? close : Long_Data_input == "5.HL2" ? hl2 : Long_Data_input == "6.HLC3" ? hlc3 : Long_Data_input == "7.OHLC4" ? ohlc4 : Long_Data_input == "8.OC2" ? oc2: close preS_MA_Short = ma_type_Short == "1. SMA" ? sma(source_Short, len_Short) : ma_type_Short == "2. PCMA"? (highest(high, len_Short) + lowest(low, len_Short)) / 2 : ma_type_Short == "3. EMA" ? ema(source_Short, len_Short) : ma_type_Short == "4. WMA" ? wma(source_Short, len_Short) : ma_type_Short == "5. DEMA" ? (2 * ema(source_Short,len_Short) - ema(ema(source_Short,len_Short), len_Short)) : ma_type_Short == "6. ZLEMA" ? ema(source_Short + (source_Short - source_Short[lag_Short]), len_Short) : na preS_MA_Long = ma_type_Long == "1. SMA" ? sma(source_Long, len_Long) :ma_type_Long == "2. PCMA"? (highest(high, len_Long) + lowest(low, len_Long)) / 2 : ma_type_Long == "3. EMA" ? ema(source_Long, len_Long) : ma_type_Long == "4. WMA" ? wma(source_Long, len_Long) : ma_type_Long == "5. DEMA" ? (2 * ema(source_Long,len_Long) - ema(ema(source_Long,len_Long), len_Long)) : ma_type_Long == "6. ZLEMA" ? ema(source_Long + (source_Long - source_Long[lag_Long]), len_Long) : na pre_MA_Short = timeFrame_Short == "Current." ? preS_MA_Short : security(syminfo.tickerid, tostring(TFsecurity_Short), preS_MA_Short) pre_MA_Long = timeFrame_Long == "Current." ? preS_MA_Long : security(syminfo.tickerid, tostring(TFsecurity_Long), preS_MA_Long) MA_Short = (round(pre_MA_Short * mult) / mult)[offset_Short] MA_Long = (round(pre_MA_Long * mult) / mult)[offset_Long] Level_Long1 = long1_isActive ? round((MA_Long + MA_Long* shift_Long1_percent / 100) * mult) / mult : na Level_Long2 = long2_isActive ? round((MA_Long + MA_Long* shift_Long2_percent / 100) * mult) / mult : na Level_Long3 = long3_isActive ? round((MA_Long + MA_Long* shift_Long3_percent / 100) * mult) / mult : na Level_Long4 = long4_isActive ? round((MA_Long + MA_Long* shift_Long4_percent / 100) * mult) / mult : na Level_Short1 = short1_isActive ? round((MA_Short + MA_Short*shift_Short1_percent/ 100) * mult) / mult : na Level_Short2 = short2_isActive ? round((MA_Short + MA_Short*shift_Short2_percent/ 100) * mult) / mult : na Level_Short3 = short3_isActive ? round((MA_Short + MA_Short*shift_Short3_percent/ 100) * mult) / mult : na Level_Short4 = short4_isActive ? round((MA_Short + MA_Short*shift_Short4_percent/ 100) * mult) / mult : na //MA_Close lag_Short_close = (len_Short_close - 1) / 2 //floor((len_Short_close - 1) / 2) lag_Long_close = (len_Long_close - 1) / 2 //floor((len_Long_close - 1) / 2) pre_PCMA_Short_close = (highest(high, len_Short_close) + lowest(low, len_Short_close)) / 2 pre_PCMA_Long_close = (highest(high, len_Long_close) + lowest(low, len_Long_close)) / 2 source_Short_close = Short_Data_input_close == "1.Open" ? open : Short_Data_input_close == "2.High" ? high : Short_Data_input_close == "3.Low" ? low : Short_Data_input_close == "4.Close" ? close : Short_Data_input_close == "5.HL2" ? hl2 : Short_Data_input_close == "6.HLC3" ? hlc3 : Short_Data_input_close == "7.OHLC4" ? ohlc4 : Short_Data_input_close == "8.OC2" ? oc2: close source_Long_close = Long_Data_input_close == "1.Open" ? open : Long_Data_input_close == "2.High" ? high : Long_Data_input_close == "3.Low" ? low : Long_Data_input_close == "4.Close" ? close : Long_Data_input_close == "5.HL2" ? hl2 : Long_Data_input_close == "6.HLC3" ? hlc3 : Long_Data_input_close == "7.OHLC4" ? ohlc4 : Long_Data_input_close == "8.OC2" ? oc2: close preS_MA_Short_close = ma_type_close_Short == "1. SMA" ? sma(source_Short_close, len_Short_close) : ma_type_close_Short == "2. PCMA"? (highest(high, len_Short_close) + lowest(low, len_Short_close)) / 2 : ma_type_close_Short == "3. EMA" ? ema(source_Short_close, len_Short_close) : ma_type_close_Short == "4. WMA" ? wma(source_Short_close, len_Short_close) : ma_type_close_Short == "5. DEMA" ? (2 * ema(source_Short_close,len_Short_close) - ema(ema(source_Short_close,len_Short_close), len_Short_close)) : ma_type_close_Short == "6. ZLEMA" ? ema(source_Short_close + (source_Short_close - source_Short_close[lag_Short_close]), len_Short_close) : na preS_MA_Long_close = ma_type_close_Long == "1. SMA" ? sma(source_Long_close, len_Long_close) : ma_type_close_Long == "2. PCMA"? (highest(high, len_Long_close) + lowest(low, len_Long_close)) / 2 : ma_type_close_Long == "3. EMA" ? ema(source_Long_close, len_Long_close) : ma_type_close_Long == "4. WMA" ? wma(source_Long_close, len_Long_close) : ma_type_close_Long == "5. DEMA" ? (2 * ema(source_Long_close,len_Long_close) - ema(ema(source_Long_close,len_Long_close), len_Long_close)) : ma_type_close_Long == "6. ZLEMA" ? ema(source_Long_close + (source_Long_close - source_Long_close[lag_Long_close]), len_Long_close) : na TFsecurity_close_Short=timeFrame_close_Short=="4H"?60*4:timeFrame_close_Short=="3H"?60*3:timeFrame_close_Short=="2H"?60*2:timeFrame_close_Short=="1H"?60:timeFrame_close_Short=="45m"?45:timeFrame_close_Short=="30m"?30:timeFrame_close_Short=="20m"?20:timeFrame_close_Short=="15m"?15:timeFrame_close_Short=="10m"?10:timeFrame_close_Short=="5m"?5:timeFrame_close_Short=="3m"?3:1 TFsecurity_close_Long=timeFrame_close_Long=="4H"?60*4:timeFrame_close_Long=="3H"?60*3:timeFrame_close_Long=="2H"?60*2:timeFrame_close_Long=="1H"?60:timeFrame_close_Long=="45m"?45:timeFrame_close_Long=="30m"?30:timeFrame_close_Long=="20m"?20:timeFrame_close_Long=="15m"?15:timeFrame_close_Long=="10m"?10:timeFrame_close_Long=="5m"?5:timeFrame_close_Long=="3m"?3:1 pre_MA_close_Short = isEnableShortCustomClose? security(syminfo.tickerid, timeFrame_close_Short=="Current."?timeframe.period:tostring(TFsecurity_close_Short), preS_MA_Short_close) : preS_MA_Short_close pre_MA_close_Long = isEnableLongCustomClose? security(syminfo.tickerid, timeFrame_close_Long=="Current."?timeframe.period:tostring(TFsecurity_close_Long), preS_MA_Long_close) : preS_MA_Long_close MA_Short_close = (round(pre_MA_close_Short * mult) / mult)[offset_Short_close] MA_Long_close = (round(pre_MA_close_Long * mult) / mult)[offset_Long_close] countShifts_Long = 0 countShifts_Long:=long1_isActive?countShifts_Long+1:countShifts_Long countShifts_Long:=long2_isActive?countShifts_Long+1:countShifts_Long countShifts_Long:=long3_isActive?countShifts_Long+1:countShifts_Long countShifts_Long:=long4_isActive?countShifts_Long+1:countShifts_Long avgPriceForLotShiftLong_Data_input = MA_Long+ (MA_Long*((shift_Long1_percent+shift_Long2_percent+shift_Long3_percent+shift_Long4_percent)/countShifts_Long/100)) countShifts_Short = 0 countShifts_Short:=short1_isActive?countShifts_Short+1:countShifts_Short countShifts_Short:=short2_isActive?countShifts_Short+1:countShifts_Short countShifts_Short:=short3_isActive?countShifts_Short+1:countShifts_Short countShifts_Short:=short4_isActive?countShifts_Short+1:countShifts_Short avgPriceForLotShiftShort_Data_input = MA_Short + (MA_Short*((shift_Short1_percent+shift_Short2_percent+shift_Short3_percent+shift_Short4_percent)/countShifts_Short/100)) strategy.initial_capital = 50000 balance=strategy.initial_capital + strategy.netprofit lotlong = 0.0 lotshort = 0.0 lotlong := (balance / avgPriceForLotShiftLong_Data_input) * (lotsize_Long / 100) //strategy.position_size == 0 ? (strategy.equity / close) * (lotsize_Long / 100) : lotlong[1] lotshort := (balance / avgPriceForLotShiftShort_Data_input) * (lotsize_Short / 100) //strategy.position_size == 0 ? (strategy.equity / close) * (lotsize_Short / 100) : lotshort[1] lotlong:= lotlong>1000000000?1000000000:lotlong lotshort:=lotshort>1000000000?1000000000:lotshort if isLotSizeAvgShifts==false lotlong := (strategy.equity / open) * (lotsize_Long / 100) lotshort := (strategy.equity / open) * (lotsize_Short / 100) value_deviationLong=0.0 value_deviationShort=0.0 if(isEnableLongCustomClose == false ) MA_Long_close:=MA_Long else value_deviationLong := round(MA_Long_close * longDeviation /100 * mult) / mult if(isEnableShortCustomClose == false ) MA_Short_close:=MA_Short else value_deviationShort := round(MA_Short_close * shortDeviation /100 * mult) / mult if MA_Short > 0 and lotshort > 0// and strategy.position_size<=0 lotShort_Data_input = strategy.position_size < 0 ? round(abs(strategy.position_size) / lotshort) : 0.0 strategy.entry("S1", strategy.short, lotshort, limit = Level_Short1, when = (lotShort_Data_input == 0 and short1_isActive and is_time_true )) lotShort_Data_input := strategy.position_size < 0 ? round(abs(strategy.position_size) / lotshort) : 0.0 strategy.entry("S2", strategy.short, lotshort, limit = Level_Short2, when = (lotShort_Data_input <= 1 and short2_isActive and is_time_true )) lotshort3 = isEnableDoubleLotShift3_Short? lotshort*2 :lotshort lotShort_Data_input := strategy.position_size < 0 ? round(abs(strategy.position_size) / lotshort) : 0.0 maxLotsshift3=isEnableDoubleLotShift3_Short?3:2 strategy.entry("S3", strategy.short, lotshort3, limit = Level_Short3, when = (lotShort_Data_input <= maxLotsshift3 and short3_isActive and is_time_true )) lotShort_Data_input := strategy.position_size < 0 ? round(abs(strategy.position_size) / lotshort) : 0.0 maxLotsshift4=isEnableDoubleLotShift3_Short?4:3 strategy.entry("S4", strategy.short, lotshort, limit = Level_Short4, when = (lotShort_Data_input <= maxLotsshift4 and short4_isActive and is_time_true)) strategy.exit("TPS", "S1" ,limit = MA_Short_close+value_deviationShort , when = is_time_true) strategy.exit("TPS", "S2" ,limit = MA_Short_close+value_deviationShort , when = is_time_true) strategy.exit("TPS", "S3" ,limit = MA_Short_close+value_deviationShort , when = is_time_true) strategy.exit("TPS", "S4" ,limit = MA_Short_close+value_deviationShort , when = is_time_true) if MA_Long > 0 and lotlong > 0// and strategy.position_size>=0 lotLong_Data_input = strategy.position_size > 0 ? round(strategy.position_size / lotlong) : 0.0 strategy.entry("L1", strategy.long, lotlong, limit = Level_Long1, when = (lotLong_Data_input ==0 and long1_isActive and is_time_true)) lotLong_Data_input := strategy.position_size > 0 ? round(strategy.position_size / lotlong) : 0.0 strategy.entry("L2", strategy.long, lotlong, limit = Level_Long2, when = ( lotLong_Data_input <= 1 and long2_isActive and is_time_true)) lotlong3 = isEnableDoubleLotShift3_Long? lotlong*2 : lotlong lotLong_Data_input := strategy.position_size > 0 ? round(strategy.position_size / lotlong) : 0.0 maxLotsshift3=isEnableDoubleLotShift3_Long?3:2 strategy.entry("L3", strategy.long, lotlong3, limit = Level_Long3, when = (lotLong_Data_input <= maxLotsshift3 and long3_isActive and is_time_true)) maxLotsshift4=isEnableDoubleLotShift3_Long?4:3 lotLong_Data_input := strategy.position_size > 0 ? round(strategy.position_size / lotlong) : 0.0 strategy.entry("L4", strategy.long, lotlong, limit = Level_Long4, when = ( lotLong_Data_input<maxLotsshift4 and long4_isActive and is_time_true)) strategy.exit( "TPL", "L1",limit = MA_Long_close+value_deviationLong, when = is_time_true) strategy.exit( "TPL", "L2", limit = MA_Long_close+value_deviationLong, when = is_time_true) strategy.exit( "TPL", "L3", limit = MA_Long_close+value_deviationLong, when = is_time_true) strategy.exit( "TPL", "L4", limit = MA_Long_close+value_deviationLong, when = is_time_true) if (MA_Long_close < close) strategy.close("L1") strategy.close("L2") strategy.close("L3") strategy.close("L4") if (MA_Short_close > close) strategy.close("S1") strategy.close("S2") strategy.close("S3") strategy.close("S4") if time > timestamp(2000+year_End, month_End, day_End, 23, 59) strategy.close_all() strategy.cancel("L1") strategy.cancel("L2") strategy.cancel("L3") strategy.cancel("S1") strategy.cancel("S2") strategy.cancel("S3") //Lines colorlong = color.green colorshort = color.red value_long1 = long1_isActive ? Level_Long1 : na value_long2 = long2_isActive ? Level_Long2 : na value_long3 = long3_isActive ? Level_Long3 : na value_long4 = long4_isActive ? Level_Long4 : na value_short1 = short1_isActive ? Level_Short1 : na value_short2 = short2_isActive ? Level_Short2 : na value_short3 = short3_isActive ?Level_Short3 : na value_short4 = short4_isActive? Level_Short4 : na value_maShort_close= isEnableShortCustomClose ? MA_Short_close : na value_maLong_close= isEnableLongCustomClose ? MA_Long_close : na plot(value_maShort_close + value_deviationShort, offset = 1, color = color.orange, title = "MA line Short Close") plot(value_short4, offset = 1, color = colorshort, title = "Short Shift 4") plot(value_short3, offset = 1, color = colorshort, title = "Short Shift 3") plot(value_short2, offset = 1, color = colorshort, title = "Short Shift 2") plot(value_short1, offset = 1, color = colorshort, title = "Short Shift 1") plot(countShifts_Short>0 and lotsize_Short>0 ? MA_Short:na, offset = 1, color = color.purple, title = "MA line Short") plot(countShifts_Long>0 and lotsize_Long>0? MA_Long:na, offset = 1, color = color.lime, title = "MA line Long") plot(value_long1, offset = 1, color = colorlong, title = "Long Shift 1") plot(value_long2, offset = 1, color = colorlong, title = "Long Shift 2") plot(value_long3, offset = 1, color = colorlong, title = "Long Shift 3") plot(value_long4, offset = 1, color = colorlong, title = "Long Shift 4") plot(value_maLong_close + value_deviationLong, offset = 1, color = color.blue, title = "MA line Long Close")