यह रणनीति लंबी अवधि की ट्रेंड-फॉलो करने वाली मात्रात्मक रणनीति के लिए चलती औसत और ट्रेडिंग वॉल्यूम के तकनीकी संकेतकों के आधार पर तैयार की गई है। जब समापन मूल्य 20 दिनों की चलती औसत रेखा से ऊपर होता है और दिन की खरीद मात्रा पिछले n दिनों में बिक्री मात्रा और औसत ट्रेडिंग वॉल्यूम से अधिक होती है, तो बाजार को तेजी की स्थिति में माना जाता है और इसे खरीदने का समय होता है। जब समापन मूल्य निचले रेल से नीचे टूट जाता है और दिन की बिक्री मात्रा पिछले n दिनों में खरीद मात्रा और औसत ट्रेडिंग वॉल्यूम से अधिक होती है, तो बाजार को मंदी की स्थिति में माना जाता है और इसे बेचने का समय होता है।
रणनीति मुख्य रूप से दो आंकलन संकेतकों पर आधारित हैः
दोहरी चलती औसत रेखाएं: 20-दिवसीय रेखा और 60-दिवसीय रेखा की गणना करें। जब 20-दिवसीय रेखा 60-दिवसीय रेखा से ऊपर जाती है, तो बाजार को एक अपट्रेंड में माना जाता है। जब 20-दिवसीय रेखा 60-दिवसीय रेखा से नीचे जाती है, तो बाजार को एक डाउनट्रेंड में माना जाता है।
ट्रेडिंग वॉल्यूमः दैनिक खरीद व बिक्री वॉल्यूम की गणना करें। यदि खरीद वॉल्यूम बिक्री वॉल्यूम से अधिक है और पिछले n दिनों में औसत ट्रेडिंग वॉल्यूम से अधिक है, तो यह निर्धारित किया जाता है कि बाजार तेजी से बढ़ रहा है। यदि बिक्री वॉल्यूम खरीद वॉल्यूम से अधिक है और पिछले n दिनों में औसत ट्रेडिंग वॉल्यूम से अधिक है, तो यह निर्धारित किया जाता है कि बाजार मंदी है।
विशिष्ट व्यापारिक रणनीति और तर्क इस प्रकार है:
लॉन्गः जब समापन मूल्य 20 दिन की चलती औसत रेखा से ऊपर हो और दिन की खरीद मात्रा पिछले n दिनों में बिक्री मात्रा और औसत ट्रेडिंग मात्रा से अधिक हो, तो बाजार को तेजी माना जाता है। अस्थिरता के आधार पर बोलिंगर बैंड की गणना करें, यदि समापन मूल्य बोलिंगर बैंड की मध्य रेखा और निचली रेल के बीच है, तो लंबा जाएं।
शॉर्टः जब समापन मूल्य निचली रेल से नीचे टूट जाता है और दिन की बिक्री मात्रा पिछले n दिनों में खरीद मात्रा और औसत व्यापार मात्रा से अधिक होती है, तो बाजार को मंदी माना जाता है। अस्थिरता के आधार पर बोलिंगर बैंड की गणना करें, यदि समापन मूल्य बोलिंगर बैंड की निचली रेल से नीचे है, तो शॉर्ट जाएं।
लाभ लेने और स्टॉप लॉस: लाभ में लॉक करने या नुकसान को कम करने के लिए उचित लाभ लेने और स्टॉप लॉस स्तर निर्धारित करें। उदाहरण के लिए, जब कीमत प्रवेश मूल्य से 5% ऊपर बढ़ जाती है, तो लाभ लें; जब हानि 10% तक पहुंचती है, तो हानि रोकें; या जब कीमत हाल ही में एक नई उच्च को हिट करती है और फिर कुछ हद तक वापस खींचती है, तो लाभ लें।
इस रणनीति के निम्नलिखित फायदे हैंः
दोहरी चलती औसत रेखाओं और ट्रेडिंग वॉल्यूम संकेतकों का संयोजन एकल तकनीकी संकेतकों के निर्णय के अंधे धब्बों से बचाता है।
विभिन्न मापदंडों के साथ बोलिंगर बैंड का उपयोग अधिक सटीक प्रवेश मूल्य निर्धारित करता है।
लाभ लेने और स्टॉप लॉस रणनीति उचित है, जो लाभ को लॉक करने और जोखिमों को नियंत्रित करने में मदद करती है।
स्थिर रिटर्न के साथ अच्छा बैकटेस्टिंग परिणाम, जो वास्तव में मात्रात्मक व्यापार पर लागू किया जा सकता है।
इस रणनीति में कुछ जोखिम भी हैं:
दोहरी चलती औसत रणनीतियों में झूठे संकेत उत्पन्न होते हैं और उन्हें वॉल्यूम संकेतकों द्वारा फ़िल्टर करने की आवश्यकता होती है।
गलत बोलिंगर बैंड्स पैरामीटर सेटिंग्स से अत्यधिक बार-बार या कम प्रविष्टियां हो सकती हैं।
गलत निश्चित लाभ लेने और स्टॉप लॉस बिंदु रणनीति रिटर्न को प्रभावित कर सकते हैं।
बैकटेस्टिंग के लिए बड़ी मात्रा में ऐतिहासिक डेटा की आवश्यकता होती है और लाइव ट्रेडिंग में अप्रत्याशित नुकसान हो सकते हैं।
इस रणनीति को निम्नलिखित पहलुओं में अनुकूलित किया जा सकता हैः
इष्टतम चलती औसत संयोजन खोजने के लिए चलती औसत प्रणाली के मापदंडों का अनुकूलन करें।
अधिक सटीक प्रविष्टि के लिए बोलिंगर बैंड्स मापदंडों का अनुकूलन करें।
उचित जोखिम-लाभ अनुपात निर्धारित करने के लिए बाजार की स्थितियों के अनुसार लाभ लेने और स्टॉप लॉस बिंदुओं को गतिशील रूप से समायोजित करें।
रणनीति की सटीकता में सुधार के लिए अन्य तकनीकी संकेतकों जैसे एमएसीडी, केडी आदि का आकलन बढ़ाएं।
रणनीतियों को अधिक मजबूत बनाने के लिए स्वचालित रूप से इष्टतम मापदंडों को खोजने के लिए मशीन लर्निंग विधियों का उपयोग करें।
कुल मिलाकर, यह एक बहुत ही व्यावहारिक मात्रात्मक ट्रेडिंग रणनीति है जिसमें अच्छा बैकटेस्टिंग प्रदर्शन है। इसे लागू करना आसान है, नियंत्रित जोखिमों के साथ, और लाइव ट्रेडिंग के लिए उपयुक्त एक स्थिर रणनीति है, जो मात्रात्मक व्यापारियों के लिए सीखने लायक है। बेशक, रणनीति अनुकूलन के लिए अभी भी बहुत जगह है, और मैं इसे बेहतर बनाने के लिए अधिक मात्रात्मक ट्रेडिंग विशेषज्ञों का इंतजार कर रहा हूं।
/*backtest start: 2023-12-21 00:00:00 end: 2023-12-28 00:00:00 period: 1m basePeriod: 1m 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/ // © KAIST291 //@version=4 strategy("prototype",initial_capital=0.01,commission_type=strategy.commission.percent,commission_value=0.1, format=format.volume, precision=0,overlay=true) // SETTING // length1=input(1) length3=input(3) length7=input(7) length14=input(14) length20=input(20) length60=input(60) length120=input(120) ma1= sma(close,length1) ma3= sma(close,length3) ma7= sma(close,length7) ma14=sma(close,length14) ma20=sma(close,length20) ma60=sma(close,length60) ma120=sma(close,length120) rsi=rsi(close,14) // BUYING VOLUME AND SELLING VOLUME // BV = iff( (high==low), 0, volume*(close-low)/(high-low)) SV = iff( (high==low), 0, volume*(high-close)/(high-low)) vol = iff(volume > 0, volume, 1) dailyLength = input(title = "Daily MA length", type = input.integer, defval = 50, minval = 1, maxval = 100) weeklyLength = input(title = "Weekly MA length", type = input.integer, defval = 10, minval = 1, maxval = 100) //----------------------------------------------------------- Davgvol = sma(volume, dailyLength) Wavgvol = sma(volume, weeklyLength) //----------------------------------------------------------- length = input(20, minval=1) src = input(close, title="Source") mult = input(2.0, minval=0.001, maxval=50, title="StdDev") mult2= input(1.5, minval=0.001, maxval=50, title="exp") mult3= input(1.0, minval=0.001, maxval=50, title="exp1") basis = sma(src, length) dev = mult * stdev(src, length) upper = basis + dev lower = basis - dev dev2= mult2 * stdev(src, length) Supper= basis + dev2 Slower= basis - dev2 dev3= mult3 * stdev(src, length) upper1= basis + dev3 lower1= basis - dev3 offset = input(0, "Offset", type = input.integer, minval = -500, maxval = 500) plot(basis, "Basis", color=#FF6D00, offset = offset) p1 = plot(upper, "Upper", color=#2962FF, offset = offset) p2 = plot(lower, "Lower", color=#2962FF, offset = offset) fill(p1, p2, title = "Background", color=color.rgb(33, 150, 243, 95)) //---------------------------------------------------- exit=(close-strategy.position_avg_price / strategy.position_avg_price*100) bull=(close>Supper and BV>SV and BV>Davgvol) bull2=(close>ma20 and BV>SV and BV>Davgvol) bux =(close<Supper and close>Slower and volume<Wavgvol) bear=(close<Slower and close<lower and SV>BV and SV>Wavgvol) hi=highest(exit,10) imInATrade = strategy.position_size != 0 highestPriceAfterEntry = valuewhen(imInATrade, high, 0) // STRATEGY LONG // if (bull and close>ma3 and ma20>ma60 and rsi<70) strategy.entry("Long",strategy.long,0.1) if (strategy.position_avg_price*1.05<close) strategy.close("Long",0.1) else if (highestPriceAfterEntry*0.999<close and close>strategy.position_avg_price*1.002) strategy.close("Long",0.1) else if (highestPriceAfterEntry*0.997<close and close>strategy.position_avg_price*1.002) strategy.close("Long",0.1) else if (highestPriceAfterEntry*0.995<close and close>strategy.position_avg_price*1.002) strategy.close("Long",0.1) else if (strategy.openprofit < strategy.position_avg_price*0.9-close) strategy.close("Long",0.1) ////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////