
एक समान रूप से अनुकूलित चैनल मूल्य तोड़ने की रणनीति एक लंबी लाइन तोड़ने की रणनीति है जो खरीद और बिक्री संकेतों का न्याय करने के लिए समान रूप से अनुकूलित चलती औसत (एएमए) और अनुकूलित चैनल रेंज पर आधारित है। यह रणनीति एएमए का उपयोग करती है जो वर्तमान कीमतों की प्रवृत्ति की दिशा की गणना करती है और गतिशील समायोजन के साथ चैनल रेंज को खोजने के लिए मूल्य तोड़ने के संकेत देती है ताकि उचित समय पर खरीदारी और बिक्री की जा सके।
इस रणनीति का केंद्रीय संकेतक औसत अनुकूलित चलती औसत (एएमए) है। मूल्य रुझानों को पकड़ने के लिए एएमए की गणना करने के लिए सूत्र हैः
AMA(t) = α(t-1) * P(t) + [1 - α(t-1)] * AMA(t-1)
इसमें, P (t) वर्तमान मूल्य है, α (t) एक चिकनी स्थिरता है, जिसका मूल्य 0 और 1 के बीच है। α (t) को कुछ नियमों द्वारा गतिशील रूप से समायोजित किया जाता है, ताकि मूल्य परिवर्तन के लिए AMA की संवेदनशीलता को नियंत्रित किया जा सके। विशेष रूप से, α (t) का मूल्य एएमए और मूल्य में विचलन की चौड़ाई के लिए एसएनआरटी के अनुपात में है। एसएनआरटी की गणना करने के लिए सूत्र निम्नानुसार हैः
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 पैरामीटर को गलत तरीके से सेट करने से कीमतों में गलत रुझान हो सकता है या झूठे संकेत मिल सकते हैं।
स्व-अनुकूली चैनल पैरामीटर जैसे कि β को सावधानीपूर्वक सेट करने की आवश्यकता है, अन्यथा बहुत अधिक लेनदेन या चूक की प्रवृत्ति होगी।
मूल्य ब्रेकआउट संकेतों को झूठे ब्रेकआउट द्वारा धोखा दिया जा सकता है, और उन्हें अधिक संकेतकों के साथ फ़िल्टर किया जाना चाहिए।
इस रणनीति में धन प्रबंधन और रोकथाम के लिए कोई विचार नहीं किया गया है, जिससे नुकसान का खतरा है।
इस रणनीति को निम्नलिखित पहलुओं से अनुकूलित किया जा सकता हैः
एएमए की α गणना को अनुकूलित करें ताकि यह मूल्य परिवर्तनों के प्रति अधिक संवेदनशील हो सके।
गलत संकेतों को रोकने के लिए एक और पुष्टि के लिए एक चैनल को तोड़ने के बाद।
ट्रेड वॉल्यूम या अस्थिरता के संकेतकों के साथ फ़िल्टरिंग, ब्रेकआउट की प्रभावशीलता सुनिश्चित करने के लिए।
लाभ को लॉक करने और जोखिम को नियंत्रित करने के लिए ट्रैक किए गए स्टॉप-लॉस तंत्र को जोड़ना।
विभिन्न परिसंपत्तियों के लिए उचित स्थिति प्रबंधन को निर्धारित करने के लिए धन प्रबंधन का अनुकूलन करना।
स्व-अनुकूली चैनल मूल्य तोड़ने की रणनीति समग्र रूप से एक सरल और व्यावहारिक प्रवृत्ति ट्रैकिंग तोड़ने की रणनीति है। यह कीमतों की प्रवृत्ति को ट्रैक करने के लिए लचीले अनुप्रयोगों के माध्यम से चलती औसत को अनुकूलित करता है, और स्व-अनुकूली चैनल तोड़ने के संकेतों की सहायता करता है। इस रणनीति के कुछ फायदे हैं, लेकिन संभावित जोखिम भी हैं। इस रणनीति को पैरामीटर अनुकूलन, फ़िल्टरिंग शर्तों को बढ़ाने और रोकथाम तंत्र में सुधार आदि के माध्यम से अधिक स्थिर और विश्वसनीय बनाया जा सकता है। कुल मिलाकर, यह रणनीति एक अच्छा आधारभूत मॉडल प्रदान करती है।
/*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)