अनुकूलनशील चलती औसत चैनल ब्रेकआउट रणनीति अनुकूलनशील चलती औसत (एएमए) और ट्रेडिंग संकेत उत्पन्न करने के लिए एक अनुकूलनशील चैनल रेंज के आधार पर एक प्रवृत्ति-अनुसरण ब्रेकआउट रणनीति है। यह वर्तमान मूल्य प्रवृत्ति दिशा और अनुकूलनशील चैनल स्तरों को निर्धारित करने के लिए समय पर प्रविष्टियों और निकास के लिए मूल्य ब्रेकआउट संकेतों का पता लगाने के लिए एएमए का उपयोग करता है।
इस रणनीति का मुख्य संकेतक अनुकूलनशील चलती औसत (एएमए) है जिसका उपयोग मूल्य प्रवृत्ति को पकड़ने के लिए किया जाता है। एएमए की गणना इस प्रकार की जाती हैः
AMA (t) = α (t-1) * P (t) + [1 - α (t-1) ] * AMA (t-1)
जहां P (t) वर्तमान मूल्य है, और α (t) 0 और 1 के बीच चिकनाई स्थिर है। α (t) को मूल्य परिवर्तनों के लिए AMA की संवेदनशीलता को नियंत्रित करने के लिए कुछ नियमों के अनुसार गतिशील रूप से समायोजित किया जाता है। विशेष रूप से, α (t) AMA और मूल्य के बीच विचलन SNRT के आनुपातिक है, जिसकी गणना इस प्रकार की जाती हैः
SNRT = (P(t) - AMA(t-1)) / AMA(t-1)
इस प्रकार, जैसे-जैसे मूल्य उतार-चढ़ाव बढ़ता है, एएमए को अधिक संवेदनशील बनाने के लिए α ((t) बढ़ेगा; जब उतार-चढ़ाव कम हो जाते हैं, एएमए को चिकनी बनाने के लिए α ((t) कम हो जाएगा।
एएमए के आधार पर, रणनीति मूल्य ब्रेकआउट संकेतों का पता लगाने के लिए एक अनुकूलनशील चैनल रेंज का निर्माण करती है। ऊपरी और निचले चैनल स्तर हैंः
ऊपरीः H ((t) = (1 + β*H ((t-1)) * AMA ((t)
निचलाः L ((t) = (1 - β*L ((t-1)) * AMA ((t)
जहां β चैनल चौड़ाई को नियंत्रित करने वाला एक समायोज्य पैरामीटर है। अंत में, रणनीति चैनल स्तरों के मूल्य ब्रेकआउट के आधार पर ट्रेड उत्पन्न करती हैः
जब मूल्य ऊपरी स्तर से ऊपर टूट जाता है तो लंबा प्रवेश करें।
जब कीमत निचले स्तर से नीचे जाती है तो शॉर्ट में प्रवेश करें।
अन्यथा, फ्लैट रहो।
इस रणनीति के लाभों में निम्नलिखित शामिल हैंः
सरल चलती औसत की तुलना में, विशेष रूप से अस्थिर बाजारों में, AMA मूल्य रुझानों को पकड़ने में अधिक लचीला है।
अनुकूलनशील चैनल अपनी चौड़ाई को गतिशील रूप से समायोजित कर सकता है, जब प्रवृत्ति अस्पष्ट हो और प्रवृत्ति उत्पन्न होने पर संकुचित हो।
मूल्य ब्रेकआउट सिग्नल उच्च जीत दरों के साथ शुरू होने वाली प्रवृत्ति को समय पर पकड़ सकते हैं।
तर्क सरल और स्पष्ट है, इसे समझने में आसान है और मात्रात्मक व्यापार के लिए स्वचालित है।
इस रणनीति के जोखिमों में निम्नलिखित शामिल हैंः
गलत AMA पैरामीटर कीमतों के रुझानों को मिस कर सकते हैं या झूठे संकेत उत्पन्न कर सकते हैं।
β जैसे अनुकूली चैनल मापदंडों को सावधानीपूर्वक ट्यून करने की आवश्यकता होती है, अन्यथा बहुत अधिक whipsaw या याद किए गए रुझान हो सकते हैं।
मूल्य ब्रेकअप झूठे ब्रेक के प्रति संवेदनशील होते हैं, अधिक फिल्टर की आवश्यकता होती है।
रणनीति में जोखिम प्रबंधन या स्टॉप लॉस तंत्र शामिल नहीं हैं।
इस रणनीति को निम्न के द्वारा अनुकूलित किया जा सकता हैः
एएमए को अधिक उत्तरदायी बनाने के लिए α गणना में सुधार करना।
झूठे संकेतों से बचने के लिए प्रारंभिक ब्रेकआउट के बाद और पुष्टि जोड़ना।
ब्रेकआउट वैधता सत्यापित करने के लिए वॉल्यूम या अस्थिरता जैसे फ़िल्टर लागू करना।
लाभ और नियंत्रण जोखिम में लॉक करने के लिए ट्रैलिंग स्टॉप लॉस को शामिल करना।
विभिन्न परिसंपत्ति वर्गों के लिए स्थिति आकार अनुकूलन।
संक्षेप में, अनुकूली चलती औसत चैनल ब्रेकआउट रणनीति एक सरल और व्यावहारिक प्रवृत्ति-अनुसरण ब्रेकआउट रणनीति है। यह मूल्य रुझानों को ट्रैक करने के लिए लचीले एएमए और ब्रेकआउट संकेतों का पता लगाने के लिए एक अनुकूली चैनल का उपयोग करता है। रणनीति के कुछ फायदे हैं लेकिन संभावित जोखिम भी हैं। पैरामीटर ट्यूनिंग, फिल्टर जोड़ने और स्टॉप में सुधार जैसे अनुकूलन के साथ, यह अधिक मजबूत हो सकता है। कुल मिलाकर, यह मात्रात्मक व्यापार के लिए एक ठोस आधार रेखा मॉडल प्रदान करता है।
/*backtest start: 2022-10-26 00:00:00 end: 2023-11-01 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 // CryptoStatistical - 2019 // AMA Strategy Channel Breakout Strategy from E. Durenard - Professional Automated Trading // https://www.amazon.com/Professional-Automated-Trading-Theory-Practice/dp/1118129857 strategy(title="[CS] AMA Strategy - Channel Break Out", shorttitle="AMA_ChannelBreakout_Strategy", initial_capital = 1000, overlay=true, pyramiding = 0, calc_on_every_tick=false, calc_on_order_fills=false, commission_type= strategy.commission.percent, commission_value = 0.08, currency=currency.USD) testStartYear = input(2019, "Backtest Start Year") testStartMonth = input(6, "Backtest Start Month") testStartDay = input(1, "Backtest Start Day") testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0) testStopYear = input(2019, "Backtest Stop Year") testStopMonth = input(12, "Backtest Stop Month") testStopDay = input(31, "Backtest Stop Day") testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0) testPeriodBackground = input(title="Color Background?", type=input.bool, defval=true) testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na bgcolor(testPeriodBackgroundColor, transp=95) testPeriod() => true price = input(title='Price Source:', type=input.source, defval=close) ama = price hb = price lb = price // Static model parameters minfactor = 0. maxfactor = 1. deviation_max = 1. deviation_min = 1. beta_hb = 1. beta_lb = 1. snr = 1. normalized_atan= 0. alpha = 0.5 // Suggested snr-factor from .5 upto 3.1 by .3 to find best parameter snrfactor = input(title='SNR Factor:', type=input.float, minval=0.6, maxval=3.3, step=0.3, defval=2.1) // Sensitivity Lookback search for the best perdiod from 5 to 20 lookback = input(title='Sensitivity Lookback:', type=input.integer, defval=5) // Suggested Beta from .5 below 4.5 by .3, usually in the range 1.2, 1.5 beta = input(title='Beta:', type=input.float, minval=0.6, maxval=4.5, step=0.3, defval=2.1) offsetlabel = input(title='Offset Label:', type=input.float, minval=0.001, maxval=0.03, step=0.001, defval=0.001) // pi/2 pi2 = 1.5707963267948966 // Zero-lag resampled moving average (Durschner nwma) f_nwma(_src, _period) => fast = _period/2 lambda = _period/fast alpha = lambda * (_period - 1)/(_period - lambda) average1 = wma(_src,_period) average2 = wma(average1,fast) nwma = (1+alpha)*average1 - alpha*average2 ama := alpha[1]*price + (1-alpha[1])*nz(ama[1]) deviation_max := alpha[1]*max((price[0] - price[1])/price[1],0) + (1-alpha[1])*nz(deviation_max[1]) deviation_min := -alpha[1]*min((price[0] - price[1])/price[1],0) + (1-alpha[1])*nz(deviation_min[1]) beta_hb := beta*deviation_max beta_lb := beta*deviation_min hb := (1 + beta_hb[1])*ama lb := (1 - beta_lb[1])*ama snr := if price > hb ((price - ama[1])/ama[1])/beta_lb else if price < lb -((price - ama[1])/ama[1])/beta_hb else 0 normalized_atan := (atan(snrfactor*snr) + pi2)/(2*pi2) alpha := f_nwma(minfactor + (maxfactor - minfactor)*normalized_atan, lookback) plot(ama, color=color.black) plot(hb, color=color.green) plot(lb, color=color.red) // Buy Condition Var bc = false // Sell Condition Var sc = false d = color.black // Buy Condition if(price > hb) bc := true d := color.green // Sell Condition if(price < lb) sc := true d := color.red if(testPeriod()) strategy.entry("Long", strategy.long, when = bc) strategy.entry("Short", strategy.short, when = sc) alertcondition(bc, title='BuyCondition', message='Buy') alertcondition(sc, title='SellCondition', message='Sell') plotshape(title='Buy', series=bc ? price * (1 - offsetlabel) : na, text='A1B', style=shape.labelup, location=location.absolute, color=d, textcolor=color.white, offset=0) plotshape(title='Sell', series=sc ? price * (1 + offsetlabel) : na, text='A1S', style=shape.labeldown, location=location.absolute, color=d, textcolor=color.white, offset=0)