ओपन क्लोज क्रॉस मूविंग एवरेज ट्रेंड फॉलोइंग स्ट्रेटेजी ओपन और क्लोज प्राइस के मूविंग एवरेज के आधार पर ट्रेंड फॉलोइंग स्ट्रेटेजी है। यह ओपन और क्लोज प्राइस के मूविंग एवरेज की गणना करके मौजूदा मार्केट ट्रेंड को निर्धारित करती है; जब क्लोजिंग प्राइस मूविंग एवरेज ओपन प्राइस मूविंग एवरेज से ऊपर जाता है तो यह लॉन्ग हो जाती है, और जब क्लोजिंग प्राइस मूविंग एवरेज ओपन प्राइस मूविंग एवरेज से नीचे जाता है तो शॉर्ट हो जाती है। यह रणनीति मुनाफे में लॉक करने और जोखिमों को प्रभावी ढंग से नियंत्रित करने के लिए ट्रेलिंग स्टॉप भी सेट करती है।
इस रणनीति का मूल तर्क वर्तमान प्रवृत्ति को निर्धारित करने के लिए खुली और बंद कीमतों के बीच संबंध पर आधारित है। उद्घाटन मूल्य वर्तमान बाजार आपूर्ति-मांग संबंध और व्यापार मनोविज्ञान को दर्शाता है, जबकि समापन मूल्य दिन के अंतिम कारोबार परिणाम को दर्शाता है। सामान्य तौर पर, यदि समापन मूल्य उद्घाटन मूल्य से अधिक है, तो यह इंगित करता है कि दिन के लिए बाजार प्रवृत्ति ऊपर की ओर है और भावना अधिक तेजी से है। यदि समापन मूल्य उद्घाटन मूल्य से कम है, तो यह इंगित करता है कि दिन के लिए बाजार प्रवृत्ति नीचे की ओर है और भावना अधिक मंदी है।
यह रणनीति वर्तमान रुझान की दिशा का न्याय करने के लिए खुली और बंद कीमतों के चलती औसत की गणना करके इस तर्क का उपयोग करती है। विशेष रूप से इसके व्यापार नियम हैंः
जब समापन मूल्य चलती औसत खोलने की कीमत चलती औसत से ऊपर पार हो जाती है तो लंबा हो जाता है। यह संकेत देता है कि तेजी की भावना मजबूत हो रही है और एक लंबी स्थिति शुरू की जा सकती है।
जब बंद होने की कीमत चलती औसत खोलने की कीमत चलती औसत से नीचे पार हो जाती है तो शॉर्ट करें। इससे पता चलता है कि मंदी की भावना बढ़ रही है और एक छोटी स्थिति शुरू की जा सकती है।
रिवर्स सिग्नल आने पर स्टॉप लॉस के साथ मौजूदा पोजीशन बंद करें।
रणनीति लाभ में लॉक करने के लिए ट्रेलिंग स्टॉप भी सेट करती है। एक स्थिति में प्रवेश करने के बाद, यह गतिशील रूप से प्रवेश मूल्य और वर्तमान मूल्य के बीच बिंदु अंतर की गणना करता है। जब मूल्य आंदोलन सेट स्टॉप लॉस बिंदु सीमा से अधिक हो जाता है, तो आंशिक लाभ में लॉक करने के लिए स्टॉप लॉस लाइन ऊपर की ओर बढ़ेगी।
संक्षेप में, यह रणनीति अवधि की अवधि की गतिशील औसत लंबाई पर रुझानों का आकलन करती है; एक समय में केवल एक दिशात्मक स्थिति रखती है; एटीआर स्टॉप के बिना रिवर्स सिग्नल के साथ मौजूदा पदों से सीधे बाहर निकलती है; और लाभ में लॉक करने के लिए ट्रेलिंग स्टॉप सेटिंग्स हैं।
इस रणनीति के निम्नलिखित मुख्य लाभ हैंः
सरल और स्पष्ट नियमखुले-करीबी संबंध के आधार पर प्रवृत्ति का आकलन करना समझने में आसान है और इसके लिए मापदंडों का अनुकूलन करना आसान है।
लचीला एमए विकल्प. चुनने और अनुकूलित करने के लिए दर्जनों एमए प्रकार हैं।
समायोज्य संकल्पअधिक संवेदनशीलता और संकेतों की समयबद्धता के लिए चार्ट के 3-4 गुना तक रिज़ॉल्यूशन सेट किया जा सकता है।
हानि रोकने का तंत्रट्रेलिंग स्टॉप प्रभावी रूप से प्रति व्यापार हानि और ड्रॉडाउन को नियंत्रित करता है।
अनुकूलन योग्य रखरखाव अवधिरखरखाव अवधि और अस्थिरता को एमए मापदंडों को समायोजित करके नियंत्रित किया जा सकता है।
लचीले ढंग से विन्यस्त जोखिम-लाभस्टॉप लॉस पॉइंट्स और ऑफसेट फाइन ट्यून जोखिम-इनाम वरीयता।
इस रणनीति के मुख्य जोखिम निम्नलिखित क्षेत्रों में निहित हैंः
अनुपलब्ध रुझानबाहर निकलने के संकेत कीमतों में बदलाव के लिए देरी कर सकते हैं, जिसके परिणामस्वरूप नुकसान हो सकता है। एमए अवधि को छोटा करने से इसे कम किया जा सकता है।
उच्च अस्थिरता के लिए उपयुक्त नहींअस्थिर परिस्थितियों में बार-बार विप्सॉउ उच्च कमीशन लागत पैदा करता है। स्टॉप लॉस पॉइंट्स का विस्तार या एमए अवधि का विस्तार यहां मदद कर सकता है।
एकल संकेतक पर निर्भरता. केवल एक सूचक सेट पर निर्णय का आधार इसे विफलता के जोखिम के लिए उजागर करता है. अन्य संकेतकों जैसे एमएसीडी को जोड़ना तर्क का पूरक हो सकता है.
अति-अनुकूलन जोखिम. एमए पैरामीटर और स्टॉप लॉस सेटिंग्स को आसानी से ओवरफिट किया जा सकता है। नमूना के बाहर प्रदर्शन बिगड़ सकता है। पैरामीटर चयन में सावधानी बरतनी चाहिए।
रणनीति को निम्नलिखित क्षेत्रों से अनुकूलित और बढ़ाया जा सकता हैः
पूरक संकेतकोंअस्थिरता और गति संकेतक मजबूती और स्थिरता बढ़ा सकते हैं।
सशर्त गतिशील मापदंडबेहतर अनुकूलन क्षमता के लिए एमए अवधि को रुझान या साइडवेज बाजार व्यवस्था का पता लगाने के आधार पर समायोजित किया जा सकता है।
गतिशील जोखिम नियंत्रणस्टॉप लॉस पॉइंट्स और ऑफसेट को हाल ही में महसूस किए गए अस्थिरता स्तरों पर कैलिब्रेट किया जा सकता है।
स्टॉप लॉस लॉजिक में सुधारअधिक उन्नत स्टॉप लॉस तंत्र जैसे एटीआर स्टॉप सरल ट्रेलिंग स्टॉप की जगह ले सकते हैं।
ओपन क्लोज क्रॉस मूविंग एवरेज ट्रेंड फॉलोइंग स्ट्रेटेजी ओपन क्लोज रिलेशन और मूविंग एवरेज पर आधारित एक ठेठ ट्रेंड ट्रेडिंग स्ट्रेटेजी है। इसके सरल नियम, लचीलापन और नियंत्रित जोखिम जैसे फायदे भी लापता उलटफेरों और व्हिपसाओं के नुकसान के साथ आते हैं। सुधार क्षेत्रों में अधिक संकेतक, गतिशील मापदंड और बेहतर ट्रेंड कैचिंग और विभिन्न बाजार स्थितियों के लिए उन्नत जोखिम प्रबंधन शामिल हैं।
/*backtest start: 2023-01-08 00:00:00 end: 2024-01-14 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title = "Open Close Cross Strategy (PineScript=v4)", shorttitle = "OCC Strategy", overlay = true ) // Revision: 1 // Author: @JayRogers // // Description: // - Strategy based around Open-Close Crossovers. // Setup: // - I have generally found that setting the strategy resolution to 3-4x that of the chart you are viewing // tends to yield the best results, regardless of which MA option you may choose (if any) // - Don't aim for perfection. Just aim to get a reasonably snug fit with the O-C band, with good runs of // green and red. // - Option to either use basic open and close series data, or pick your poison with a wide array of MA types. // - Optional trailing stop for damage mitigation if desired (can be toggled on/off) // - Positions get taken automagically following a crossover - which is why it's better to set the resolution // of the script greater than that of your chart, so that the trades get taken sooner rather than later. // - If you make use of the trailing stops, be sure to take your time tweaking the values. Cutting it too fine // will cost you profits but keep you safer, while letting them loose could lead to more drawdown than you // can handle. // === INPUTS === useRes = input(defval=true, title="Use Alternate Resolution? ( recommended )") stratRes = input(defval="120", title="Set Resolution ( should not be lower than chart )", type=input.resolution) useMA = input(defval=true, title="Use MA? ( otherwise use simple Open/Close data )") basisType = input(defval="DEMA", title="MA Type: SMA, EMA, DEMA, TEMA, WMA, VWMA, SMMA, HullMA, LSMA, ALMA ( case sensitive )", type=input.string) basisLen = input(defval=14, title="MA Period", minval=1) offsetSigma = input(defval=6, title="Offset for LSMA / Sigma for ALMA", minval=0) offsetALMA = input(defval=0.85, title="Offset for ALMA", minval=0, step=0.01) useStop = input(defval=true, title="Use Trailing Stop?") slPoints = input(defval=200, title="Stop Loss Trail Points", minval=1) slOffset = input(defval=400, title="Stop Loss Trail Offset", minval=1) // === /INPUTS === // === BASE FUNCTIONS === // Returns MA input selection variant, default to SMA if blank or typo. variant(type, src, len, offSig, offALMA) => v1 = sma(src, len) // Simple v2 = ema(src, len) // Exponential v3 = 2 * v2 - ema(v2, len) // Double Exponential v4 = 3 * (v2 - ema(v2, len)) + ema(ema(v2, len), len) // Triple Exponential v5 = wma(src, len) // Weighted v6 = vwma(src, len) // Volume Weighted sma_1 = sma(src, len) // Smoothed v7 = na(v5[1]) ? sma_1 : (v5[1] * (len - 1) + src) / len v8 = wma(2 * wma(src, len / 2) - wma(src, len), round(sqrt(len))) // Hull v9 = linreg(src, len, offSig) // Least Squares v10 = alma(src, len, offALMA, offSig) // Arnaud Legoux type == "EMA" ? v2 : type == "DEMA" ? v3 : type == "TEMA" ? v4 : type == "WMA" ? v5 : type == "VWMA" ? v6 : type == "SMMA" ? v7 : type == "HullMA" ? v8 : type == "LSMA" ? v9 : type == "ALMA" ? v10 : v1 // security wrapper for repeat calls reso(exp, use, res) => security_1 = security(syminfo.tickerid, res, exp) use ? security_1 : exp // === /BASE FUNCTIONS === // === SERIES SETUP === // open/close variant__1 = variant(basisType, close, basisLen, offsetSigma, offsetALMA) reso__1 = reso(variant__1, useRes, stratRes) reso__2 = reso(close, useRes, stratRes) closeSeries = useMA ? reso__1 : reso__2 variant__2 = variant(basisType, open, basisLen, offsetSigma, offsetALMA) reso__3 = reso(variant__2, useRes, stratRes) reso__4 = reso(open, useRes, stratRes) openSeries = useMA ? reso__3 : reso__4 trendState = bool(na) trendState := closeSeries > openSeries ? true : closeSeries < openSeries ? false : trendState[1] // === /SERIES === // === PLOTTING === barcolor(color=closeSeries > openSeries ? #006600 : #990000, title="Bar Colours") // channel outline closePlot = plot(closeSeries, title="Close Line", color=#009900, linewidth=2, style=plot.style_line, transp=90) openPlot = plot(openSeries, title="Open Line", color=#CC0000, linewidth=2, style=plot.style_line, transp=90) // channel fill closePlotU = plot(trendState ? closeSeries : na, transp=100, editable=false) openPlotU = plot(trendState ? openSeries : na, transp=100, editable=false) closePlotD = plot(trendState ? na : closeSeries, transp=100, editable=false) openPlotD = plot(trendState ? na : openSeries, transp=100, editable=false) fill(openPlotU, closePlotU, title="Up Trend Fill", color=#009900, transp=40) fill(openPlotD, closePlotD, title="Down Trend Fill", color=#CC0000, transp=40) // === /PLOTTING === // === STRATEGY === // conditions longCond = crossover(closeSeries, openSeries) shortCond = crossunder(closeSeries, openSeries) // entries and base exit strategy.entry("long", strategy.long, when=longCond) strategy.entry("short", strategy.short, when=shortCond) // if we're using the trailing stop if useStop strategy.exit("XL", from_entry="long", trail_points=slPoints, trail_offset=slOffset) strategy.exit("XS", from_entry="short", trail_points=slPoints, trail_offset=slOffset) // not sure needed, but just incase.. strategy.exit("XL", from_entry="long", when=shortCond) strategy.exit("XS", from_entry="short", when=longCond) // === /STRATEGY ===