डबल मूविंग एवरेज क्रॉसओवर रणनीति विभिन्न अवधियों के मूविंग एवरेज की गणना करके मूल्य प्रवृत्ति की दिशा का आकलन करती है, और प्रवृत्ति का अनुपालन करती है। यह लंबी अवधि के एमए को पार करते समय लंबी अवधि के एमए को पार करती है, और लंबी अवधि के एमए को पार करते समय छोटी अवधि के एमए को पार करती है। यह एक विशिष्ट प्रवृत्ति अनुसरण रणनीति है।
यह रणनीति 9, 21 और 50 अवधि के घातीय चलती औसत (ईएमए) पर आधारित है। 9 अवधि ईएमए अल्पकालिक प्रवृत्ति का प्रतिनिधित्व करता है, 21 अवधि ईएमए मध्यमकालिक प्रवृत्ति का प्रतिनिधित्व करता है, और 50 अवधि ईएमए दीर्घकालिक प्रवृत्ति का प्रतिनिधित्व करता है।
जब 9 पीरियड ईएमए 21 पीरियड ईएमए के ऊपर पार करता है, तो यह अल्पकालिक में एक अपट्रेंड का संकेत देता है, इस प्रकार लंबा होता है। जब 9 पीरियड ईएमए 21 पीरियड ईएमए से नीचे पार करता है, तो यह अल्पकालिक में एक डाउनट्रेंड का संकेत देता है, इस प्रकार छोटा होता है। क्रॉसओवर))) फ़ंक्शन का उपयोग यहां एमए के बीच क्रॉसओवर निर्धारित करने के लिए किया जाता है।
लॉन्ग/शॉर्ट एंट्री, टेक प्रॉफिट और स्टॉप लॉस के लिए लॉजिक कॉन्फ़िगर किया गया है. एंट्री की शर्त एमए का क्रॉसओवर है. लॉन्ग टेक प्रॉफिट एंट्री प्राइस है * (1 + इनपुट टेक प्रॉफिट रेश्यो), शॉर्ट टेक प्रॉफिट एंट्री प्राइस है * (1 - इनपुट टेक प्रॉफिट रेश्यो). लॉन्ग स्टॉप लॉस एंट्री प्राइस है * (1 - इनपुट स्टॉप लॉस रेश्यो), शॉर्ट स्टॉप लॉस एंट्री प्राइस है * (1 + इनपुट स्टॉप लॉस रेश्यो).
कुछ फ़िल्टर भी जोड़े जाते हैं, जैसे साइडवेज से बचने के लिए ट्रेंड फ़िल्टर, और रणनीति इक्विटी बहुत कम होने पर ट्रेडिंग से बचने के लिए इक्विटी फ़िल्टर। ये फ़िल्टर कुछ झूठे संकेतों से बचने में मदद कर सकते हैं।
संक्षेप में, यह रणनीति उचित लाभ लेने और स्टॉप लॉस तर्क के साथ मूल्य प्रवृत्ति दिशा निर्धारित करने के लिए दोहरे ईएमए क्रॉसओवर का उपयोग करती है, जो मध्यम से दीर्घकालिक रुझानों को पकड़ सकती है। लेकिन एकल कारक रणनीति के रूप में, संकेत पर्याप्त रूप से स्थिर नहीं हो सकते हैं और आगे अनुकूलित किए जा सकते हैं।
प्रवृत्ति दिशा निर्धारित करने के लिए दोहरे एमए क्रॉसओवर का उपयोग करना, तर्क सरल और समझने में आसान है।
विभिन्न अवधियों के ईएमए को अपनाने से अल्पकालिक और दीर्घकालिक रुझानों का आकलन किया जा सकता है।
लाभ लेने और हानि रोकने का तर्क लाभ में ताले लगाता है और जोखिम को नियंत्रित करता है।
फिल्टर कुछ गलत संकेतों से कुछ हद तक बचने में मदद करते हैं।
मापदंडों को स्वतंत्र रूप से कॉन्फ़िगर किया जा सकता है, अवधि को विभिन्न बाजार वातावरणों के लिए अनुकूलित किया जा सकता है।
एकल कारक रणनीति के रूप में, ट्रेडिंग सिग्नल पर्याप्त रूप से स्थिर नहीं हो सकते हैं। मूल्य समेकन के दौरान विप्सॉव हो सकते हैं।
जब क्रॉसओवर होता है, तो कीमत पहले से ही एक खिंचाव के ऊपर/नीचे चल सकती है, जिसमें उच्च खरीद और कम बेचने का जोखिम होता है।
व्यापारिक लागतों पर विचार नहीं किया जाता है, वास्तविक लाभ कम हो सकता है।
कोई स्टॉप लॉस नहीं है, चरम बाजार स्थितियों में असीमित नुकसान का जोखिम है।
समाधान:
अधिक स्थिर संकेतों के लिए एमए अवधि का अनुकूलन करें।
फ़िल्टर सिग्नल के लिए अन्य संकेतकों को जोड़ें।
लागत प्रभाव को कम करने के लिए व्यापार का आकार बढ़ाएं।
अधिकतम हानि को सीमित करने के लिए उचित स्टॉप लॉस सेट करें।
इस रणनीति को निम्नलिखित पहलुओं में अनुकूलित किया जा सकता हैः
सर्वोत्तम संयोजन खोजने के लिए एमए अवधि का अनुकूलन करें, या गतिशील रूप से सर्वोत्तम अवधि का चयन करने के लिए अनुकूलन अनुकूलन का उपयोग करें।
सिग्नल को फ़िल्टर करने और गुणवत्ता में सुधार करने के लिए एमएसीडी, केडी आदि जैसे अन्य तकनीकी संकेतक जोड़ें, या सिग्नल को स्कोर करने और झूठे को फ़िल्टर करने के लिए मशीन लर्निंग का उपयोग करें।
वॉल्यूम विश्लेषण शामिल करें. यदि वॉल्यूम एमए क्रॉसओवर पर अपर्याप्त है तो संकेत न लें.
क्रॉसओवर होने से पहले कीमतों में उतार-चढ़ाव की जाँच करें।
गतिशील स्टॉप-लॉस तंत्र जैसे ट्रेलिंग स्टॉप-लॉस, चैंडिलर एक्जिट आदि का निर्माण करें, ताकि स्टॉप-लॉस दूरी को कम किया जा सके लेकिन इसे प्रभावी रखा जा सके।
अधिक उचित लाभ/नुकसान अनुपात प्राप्त करने के लिए, स्थिर/गतिशील/लाभयुक्त जैसे पद आकार को अनुकूलित करना।
व्यापार लागत, फिसलने पर व्यापक रूप से विचार करें। लाइव ट्रेडिंग में लाभप्रदता सुनिश्चित करने के लिए लाभ / स्टॉप लॉस अनुपात का अनुकूलन करें।
इस रणनीति की समग्र संरचना ध्वनि है, ट्रेंड की दिशा निर्धारित करने के लिए दोहरे ईएमए क्रॉसओवर के सरल तर्क के साथ, रुझानों को पकड़ने के लिए लाभ और स्टॉप लॉस तर्क के साथ। एक एकल कारक रणनीति के रूप में, इसे अधिक मजबूत बनाने के लिए मापदंडों, सिग्नल फिल्टर आदि पर और अनुकूलित किया जा सकता है। उचित स्टॉप लॉस और स्थिति आकार के साथ, जोखिमों को और कम किया जा सकता है। कुल मिलाकर, यह रणनीति ढांचे के बाद एक ठोस प्रवृत्ति प्रदान करता है, जो अनुकूलन और समायोजन के बाद लगातार लाभ प्राप्त कर सकता है।
/*backtest start: 2023-10-16 00:00:00 end: 2023-11-15 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © TradingMentalist //@version=4 strategy("Initial template",initial_capital=1000, overlay=true, pyramiding=0, commission_type=strategy.commission.percent, commission_value=0.04, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, currency = currency.USD) ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////inputs //turn on/off longs/shorts / extraneous conditions longinc=input(true, title="include longs?") lConSw2=input(true, title="condition two?") lConSw3=input(true, title="condition three?") shotinc=input(true, title="include shorts?") sConSw2=input(true, title="condition two?") sConSw3=input(true, title="condition three?") //turn on/off / adjust trade filters (average range/average equity) sidein2 = input(200, step=10, title='lookback for average range (bars)') sidein = input(1, title='filter trades if range is less than (%)')/100 equityIn = input(40, title='filter trades if equity is below ema()') sidewayssw = input(true, title='sideways filter?') equitysw = input(true, title='equity filter?') longtpin = input(1,step=0.1, title='long TP %')/100 longslin = input(0.4,step=0.1, title='long SL %')/100 shorttpin = input(1,step=0.1, title='short TP %')/100 shortslin = input(0.4,step=0.1, title='short SL %')/100 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////filters //(leave as is) side1 = (close[1] + close[sidein2]) / 2 side2 = close[1] - close[sidein2] side3 = side2 / side1 notsideways = side3 > sidein equityMa = equitysw ? ema(strategy.equity, equityIn) : 0 equityCon = strategy.equity >= equityMa ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////indicators ma1 = ema(close, 9) ma2 = ema(close, 21) ma3 = ema(close, 50) plot(ma1, color=color.new(#E8B6B0,50)) plot(ma2, color=color.new(#B0E8BE,50)) plot(ma3, color=color.new(#00EEFF,50)) ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////conditions //adjust conditions //------------------------------------------- longCondition1 = crossover(ma2,ma3) longCondition2 = close[5] > close[10] longCondition3 = close[1] > close[2] shortCondition1 = crossover(ma3,ma2) shortCondition2 = close[5] < close[10] shortCondition3 = close[1] < close[2] closelong = shortCondition1 closeshort = longCondition1 //------------------------------------------- //(leave as is) longCondition1in = longCondition1 longCondition2in = lConSw2 ? longCondition2 : true longCondition3in = lConSw3 ? longCondition3 : true shortCondition1in = shortCondition1 shortCondition2in = sConSw2 ? shortCondition2: true shortCondition3in = sConSw3 ? shortCondition3: true longConditions = longCondition1in and longCondition2in and longCondition3in shortConditions = shortCondition1in and shortCondition2in and shortCondition3in ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////execution //(leave as is) long = sidewayssw ? notsideways and equityCon and longConditions : equityCon and longConditions short = sidewayssw ? notsideways and equityCon and shortConditions : equityCon and shortConditions ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////risk //(leave as is) longtplevel = strategy.position_avg_price * (1 + longtpin) longsllevel = strategy.position_avg_price * (1 - longslin) shorttplevel = strategy.position_avg_price * (1 - shorttpin) shortsllevel = strategy.position_avg_price * (1 + shortslin) ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////timeframe //adjust timeframe //------------------------------------------- startyear = 2000 startmonth = 1 startday = 1 stopyear = 9999 stopmonth = 12 stopday = 31 //------------------------------------------- //(leave as is) startperiod = timestamp(startyear,startmonth,startday,0,0) periodstop = timestamp(stopyear,stopmonth,stopday,0,0) timeframe() => time >= startperiod and time <= periodstop ? true : false ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////orders //comments are empty characters for clear chart if timeframe() if longinc if strategy.position_size == 0 or strategy.position_size > 0 strategy.entry(id="long", long=true, when=long, comment=" ") strategy.exit("stop","long", limit=longtplevel, stop=longsllevel,comment=" ") strategy.close(id="long", when=closelong, comment = " ") if shotinc if strategy.position_size == 0 or strategy.position_size < 0 strategy.entry(id="short", long=false, when=short, comment = " ") strategy.exit("stop","short", limit=shorttplevel, stop=shortsllevel,comment = " ") strategy.close(id="short", when=closeshort, comment = " ")