चलती औसत envelop चैनल ट्रेंड ट्रैकिंग रणनीति एक ट्रेंड ट्रैकिंग रणनीति है जो चलती औसत और चैनल संकेतक पर आधारित है। यह बहु-स्तरीय चलती औसत चैनल स्थापित करके मूल्य रुझानों के बारे में निर्णय और ट्रैकिंग को सक्षम करता है। यह रणनीति विभिन्न समय अवधि के लिए चलती औसत की गणना के साथ-साथ बहु-समय फ़्रेम के एकीकरण को सक्षम करती है, जिससे कैप्चर की अधिक संभावनाएं होती हैं।
इस रणनीति के मुख्य सिद्धांतों के आधार पर चलती औसत की प्रवृत्ति ट्रैक करने के लिए और Envelop सूचक के चैनल निर्णय. रणनीति का उपयोग कर विन्यास चलती औसत अवधि, smoothing प्रकार, मूल्य स्रोत और अन्य मापदंडों के आधार पर एक आधारभूत चलती औसत का निर्माण. फिर मापदंडों की स्थापना के आधार पर प्रतिशत शिफ्ट मूल्य, ऊपर और नीचे चैनल का निर्माण. जब कीमत नीचे चैनल तोड़ने के लिए, और अधिक; जब कीमत ऊपर चैनल तोड़ने के लिए, खाली जगह बनाने. साथ ही, रणनीति में एक स्वतंत्र चलती औसत के रूप में एक स्टॉप लाइन नुकसान की शुरुआत की.
विशेष रूप से, इस रणनीति में निम्नलिखित विशेषताएं हैं:
एक ही समय में अधिक और शून्य संचालन का समर्थन करें, ऊपर और नीचे के माध्यम से प्रवृत्ति की दिशा का आकलन करें।
अधिकतम 4 कार्ड खोले जा सकते हैं, पिरामिड जमा करने के लिए, और अधिक लाभ प्राप्त करने के लिए।
एक स्वतंत्र स्टॉपलॉस के लिए एक स्वतंत्र स्टॉपलॉस और स्टॉपलॉस के लिए एक स्वतंत्र स्टॉपलॉस को कॉन्फ़िगर किया जा सकता है
विभिन्न समय अवधि ((1 मिनट से 1 दिन) के लिए चलती औसत गणना का समर्थन करें, बहु-समय फ़्रेम एकीकरण प्राप्त करें।
स्टॉक खोलने और स्टॉक चलती औसत 6 अलग-अलग चिकनी मोड विकल्पों का समर्थन करता है, जो विभिन्न किस्मों और चक्रों के लिए अनुकूलित किया जा सकता है।
अधिक सटीक तोड़ने की तलाश में चैनल समायोजन के लिए सकारात्मक और नकारात्मक विचलन इनपुट।
इस रणनीति के लिए विशिष्ट लेनदेन तर्क इस प्रकार हैः
निर्धारिती पदों के लिए चलती औसत की गणना करें, पैरामीटर के आधार पर प्रतिशत सेट करें, 4 ब्रेकलाइन प्राप्त करें।
जब कीमत नीचे चैनल लाइन को तोड़ती है, तो क्रम में अधिक स्थिति खोलें; जब कीमत ऊपर चैनल लाइन को तोड़ती है, तो क्रम में स्थिति खोलें।
एक स्वतंत्र बकाया चलती औसत की गणना करें, एक स्टॉप-लॉस लाइन के रूप में। जब कीमत फिर से नीचे गिरती है, तो मल्टीपल के लिए स्टॉप-लॉस; जब कीमत फिर से लाइन को तोड़ती है, तो खाली के लिए स्टॉप-लॉस।
अधिकतम चार कार्ड खोले जा सकते हैं, और अधिक धन के लिए एक पिरामिड के माध्यम से जमा किया जा सकता है।
इस रणनीति के सिद्धांतों से पता चलता है कि यह रणनीति एक अपेक्षाकृत कठोर और पूर्ण प्रवृत्ति प्रणाली बनाने के लिए चलती औसत की प्रवृत्ति ट्रैकिंग, चैनल निर्णय के ब्रेकआउट सिग्नल और स्वतंत्र स्टॉपलॉस लाइन सेट जैसे तत्वों को जोड़ती है।
रणनीति कोड और तार्किक विश्लेषण के अनुसार, इस चलती औसत envelop चैनल ट्रेंड ट्रैकिंग रणनीति के निम्नलिखित फायदे हैंः
बहु-समय फ्रेम एकीकरण, बड़े स्तर के रुझानों को पकड़ने की संभावना को बढ़ाता है. रणनीति 1 मिनट से 1 दिन तक की विभिन्न अवधि के लिए चलती औसत गणना का समर्थन करती है, विभिन्न अवधि का उपयोग करके पोजीशन खोलने और रोकने के लिए चलती औसत को कॉन्फ़िगर कर सकती है, बहु-समय फ्रेम के रुझान निर्णय को एकीकृत करती है, जो बड़े स्तर के रुझानों को पकड़ने के लिए अधिक अनुकूल है।
पिरामिड स्टॉकिंग विधि, अधिक मुनाफा कमाने की तलाश में। रणनीति अधिकतम 4 पत्र खोल सकती है, और जोखिम को नियंत्रित करने के आधार पर अधिक मुनाफा कमाने के लिए स्टॉकिंग विधि के माध्यम से लाभ और हानि को संतुलित करती है।
6 प्रकार के चलती औसत मोड का चयन करें, अनुकूलनशीलता। 6 प्रकार के विकल्प जैसे कि एसएमए/ईएमए/डायनामिक मूविंग एवरेज का समर्थन करने वाले स्टॉप और स्टॉप मूविंग एवरेज को अनुकूलित किया जा सकता है ताकि विभिन्न किस्मों और चक्रों के लिए अनुकूलनशीलता बढ़ सके।
चैनल लाइन समायोज्य है, तोड़ने का निर्णय सटीक है. रणनीति में प्रवेश किया जा सकता है चैनल चलती प्रतिशत पैरामीटर, चैनल चौड़ाई को समायोजित करने के लिए, ताकि विभिन्न किस्मों या बाजार की स्थिति के लिए अनुकूलित किया जा सके, तोड़ने का निर्णय की सटीकता में सुधार।
स्वतंत्र स्टॉप लॉस लाइन, जो जोखिम को नियंत्रित करने में मदद करती है। रणनीति स्वतंत्र चलती औसत की गणना को समतल लाइन के रूप में करती है, जो बहु या रिक्त विकल्पों पर स्टॉप लॉस करती है, जो ट्रेडिंग जोखिम को काफी कम कर सकती है, और पीछा इंजेक्शन से बच सकती है।
कोड संरचना स्पष्ट है और इसे दोहराने के लिए आसान है। पाइन स्क्रिप्ट का उपयोग करके लेखन की रणनीति, कोड संरचना स्पष्ट है और इसे समझने और दोहराने के लिए आसान है। उपयोगकर्ता मौजूदा ढांचे के आधार पर पैरामीटर को अनुकूलित करना जारी रख सकते हैं या अन्य तर्क जोड़ सकते हैं।
इस रणनीति के बावजूद, कुछ व्यापारिक जोखिम हैं जिनके बारे में ध्यान दिया जाना चाहिए, विशेष रूप सेः
बड़े पैमाने पर प्रवृत्ति रिवर्स जोखिम. रणनीति की मुख्य धारणा यह है कि कीमतें निरंतर आगे बढ़ेंगी, कुछ प्रवृत्ति है. लेकिन जब बड़े पैमाने पर प्रवृत्ति की वापसी होती है, तो रणनीति की कमाई पर अधिक प्रभाव पड़ता है। इस समय समय पर स्टॉप लॉस और नियंत्रण हानि की आवश्यकता होती है।
ब्रेकडाउन विफलता का जोखिम। संरेखण या अस्थिर बाजार में, कीमतों ने चैनल लाइन को तोड़ने के बाद फिर से गिरना शुरू कर दिया है। यह एक अनुवर्ती इंजेक्शन का कारण बनता है, जिसे अनुकूलन पैरामीटर के माध्यम से कम करने की आवश्यकता होती है।
अपेक्षित मूल्य प्रबंधन जोखिम. रणनीति अधिक मुनाफा कमाने के लिए 4 परतों की स्थिति स्थापित करती है, जो लाभ के समय महत्वपूर्ण है, लेकिन घाटे के समय अपेक्षित मूल्य में स्पष्ट गिरावट आती है। इसके लिए निवेशकों को पेशेवर मानसिक प्रबंधन क्षमता की आवश्यकता होती है।
सिग्नल ऑप्टिमाइज़ेशन जोखिम. रणनीति में कई मापदंडों के समायोजन का अनुकूलन शामिल है, जैसे कि चैनल चौड़ाई, चलती औसत अवधि, आदि। इसके लिए एक पेशेवर मात्रात्मक विश्लेषक की आवश्यकता होती है, जो ओवरफिट जोखिम से बचने के लिए अनुकूलन अनुभव रखता है।
विशेष परिदृश्य जोखिम. चरम परिदृश्य जैसे कि फास्ट गैप या शॉर्ट लाइन लिमिट डेज रणनीतिक तर्क को काफी नुकसान पहुंचा सकते हैं। इस समय, सिस्टम जोखिम संकेतकों पर ध्यान देने की आवश्यकता है और समय पर नुकसान को रोकना होगा।
कुल मिलाकर, यह रणनीति मुख्य रूप से बड़े पैमाने पर प्रवृत्ति पर निर्भर करती है, जो केवल उन किस्मों और बाजार की स्थितियों के लिए लागू होती है जिनमें दीर्घकालिक निरंतरता की विशेषता होती है। इसके अलावा, बहु-पैरामीटर अनुकूलन और मानसिक नियंत्रण भी रणनीति की स्थिर लाभप्रदता सुनिश्चित करने के लिए महत्वपूर्ण हैं।
इस चलती औसत envelop चैनल ट्रेंड ट्रैकिंग रणनीति के लिए, इसके बाद के प्रमुख अनुकूलन दिशाओं में शामिल हैंः
मशीन लर्निंग एल्गोरिदम के आधार पर चैनल लाइन और स्टॉप लाइन का अनुकूलन अनुकूलन। एलएसटीएम, ट्रेलर पूर्वानुमान और अन्य एल्गोरिदम का उपयोग करके चैनल लाइन और स्टॉप लाइन मॉडल को प्रशिक्षित करने के लिए, अधिक बुद्धिमान मूल्य पूर्वानुमान और जोखिम से बचने के लिए।
भावना सूचक, पोर्टफोलियो स्थिति रखने के अनुपात जैसे सहायक कारकों का अनुकूलन करने के लिए बढ़त तर्क। इस तरह के पूर्ण तरंग आयाम, बाजार की भावना जैसे संकेतक निर्णय, नियंत्रण पोर्टफोलियो जोखिम, अनुकूलन पिरामिड बढ़त तर्क शामिल कर सकते हैं।
लेन-देन लागत और स्लाइड पॉइंट मॉडल को पेश करना, रिवर्सिंग की प्रामाणिकता को बढ़ाना। वर्तमान रिवर्सिंग लेनदेन लागत के प्रभाव को ध्यान में नहीं रखता है, जो वास्तविक समय में एक महत्वपूर्ण कारक है, जिसमें गणितीय मॉडल बनाने की आवश्यकता है।
समान किस्मों के संबंध विश्लेषण का विस्तार करें, एक एकीकृत वेंटिलेशन सिस्टम का निर्माण करें। मौजूदा एकल किस्मों की रणनीति को कई समान बाजारों जैसे कि वस्तुओं, डिजिटल मुद्राओं तक विस्तारित करें, और रणनीति की स्थिरता को बढ़ाने के लिए समान किस्मों के संबंध विश्लेषण के माध्यम से एक एकीकृत वेंटिलेशन बढ़ाएं।
नीति की व्याख्याशीलता में वृद्धि, उपयोगकर्ता उपयोगिता में सुधार। SHAP जैसे तरीकों का उपयोग करके, नीति परिणामों पर प्रत्येक इनपुट चर के प्रभाव की डिग्री का विश्लेषण किया जाता है, और नीति तर्क को अधिक पारदर्शी और व्याख्या करने योग्य बनाने के लिए आउटपुट को महत्व दिया जाता है।
मशीन सीखने, मल्टी फैक्टर मॉडल और अन्य एल्गोरिदम के माध्यम से रणनीति की स्थिरता, प्रामाणिकता और उपयोग में आसानी को अनुकूलित करना जारी रखना इस रणनीति के बाद के प्रमुख सुधारों में से एक है।
कुल मिलाकर, यह चलती औसत envelop चैनल ट्रेंड ट्रैकिंग रणनीति चलती औसत की प्रवृत्ति ट्रैकिंग, चैनल संकेतकों के प्रवृत्ति निर्णय और स्वतंत्र स्टॉप-लॉस लाइन के जोखिम नियंत्रण के तीन मुख्य मुख्य तत्वों को जोड़ती है। सख्त प्रवृत्ति बाजार में, रणनीति स्थिर और कुछ सफलता प्राप्त करने के लिए प्रदान कर सकती है। लेकिन उपयोगकर्ता को बड़े पैमाने पर बाजार के वातावरण पर ध्यान देने की आवश्यकता है, और संख्यात्मक अनुकूलन और जोखिम प्रबंधन कार्य करने की आवश्यकता है ताकि रणनीति को जटिल और परिवर्तनीय व्यापार बाजारों के लिए अनुकूलित किया जा सके। कुल मिलाकर, यह रणनीति उपयोगकर्ताओं को एक अपेक्षाकृत पूर्ण और कठोर प्रवृत्ति ट्रैकिंग समाधान प्रदान करती है, जो स्व-निर्मित और द्वितीयक विकास के लिए एक बहुत ही उपयुक्त रणनीतिकरण ढांचा है।
/*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")