
इस रणनीति में चलती औसत के क्रॉसिंग और गतिशीलता का एक संयोजन है, जिससे ट्रेंड पर प्रभावी ट्रैकिंग और समय पर रिवर्स किया जा सकता है। रणनीति पहले तेजी से चलती औसत और धीमी गति से चलती औसत का उपयोग करती है ताकि गोल्डफ़ॉर्क ओवर और डेडफ़ॉर्क डाउन सिग्नल बनाया जा सके। फिर कुछ मापदंडों के साथ चलती औसत को जोड़कर, जब गोल्डफ़ॉर्क ओवर होता है, तो तेजी से चलती औसत पर गतिशीलता का संकेत एक बार फिर से बढ़ जाता है, तो इसे ट्रेंड के रूप में जारी रखा जाता है, ओवर को बनाए रखा जाता है; जब गतिशीलता का संकेत गिरता है, तो इसे ट्रेंड रिवर्स और फ्लैट स्थिति माना जाता है। जब डेडफ़ॉर्क खाली होता है, तो ट्रेंड ट्रैक करने के लिए समान सिद्धांतों का उपयोग किया जाता है। साथ ही, रणनीति को एडीएक्स सूचक में बदल दिया जाता है, जो गैर-प्रवृत्ति की स्थिति में गलत संकेतों को पार करने के लिए उपयोग किया जाता है।
इस रणनीति का मुख्य तर्क एक ट्रेंड सिग्नल पर आधारित है जो एक चलती औसत के साथ क्रॉस-फॉर्मेशन पर आधारित है, और गतिशीलता संकेतक ट्रेंड रिवर्स को निर्धारित करते हैं। इसके प्रमुख भागों के लिए कोड तर्क इस प्रकार हैः
त्वरित चलती औसत मूल्य 1 और धीमी चलती औसत मूल्य 2 की गणना करें। जिसमें मूल्य 1 5 चक्र HMA है, मूल्य 2 7 चक्र HMA है।
जब price1 ऊपर price2 पार करता है तो एक मल्टी सिग्नल उत्पन्न होता है, और जब price1 नीचे price2 पार करता है तो एक रिक्त सिग्नल उत्पन्न होता है। यह चलती औसत पर आधारित एक सामान्य उपयोग है।
यदि गतिशीलता संकेतक rc1 तेजी से चलती औसत price1 के साथ फिर से बढ़ता है, तो यह प्रवृत्ति के रूप में माना जाता है, और बहुसंकेत ट्रिगर के बाद, यह प्रवृत्ति जारी है।
जब गतिशीलता संकेतक roc1 गिर जाता है, तो यह माना जाता है कि प्रवृत्ति उलट जाती है, और ब्लीचिंग निष्पादित की जाती है। शून्य संकेतों के लिए प्रसंस्करण तर्क समान है।
एडीएक्स थ्रेशोल्ड को गैर-रुझान स्थितियों में गलत संकेतों को फ़िल्टर करने के लिए पेश किया गया था, केवल जब एडीएक्स थ्रेशोल्ड से अधिक होता है, तो वास्तविक ओवर-कॉम सिग्नल उत्पन्न होता है।
सरल चलती औसत रणनीति की तुलना में, इस रणनीति का सबसे बड़ा लाभ यह है कि गतिशीलता संकेतक की शुरूआत से रुझान में बदलाव का पता लगाया जा सकता है, जिससे रुझान और उलटफेर को अधिक समय पर और सटीक रूप से ट्रैक किया जा सकता है। विशिष्ट लाभ इस प्रकार हैंः
मूविंग एवरेज स्वयं मूल्य परिवर्तनों के प्रति प्रतिक्रिया में देरी करता है, जबकि गतिशीलता संकेतक समय पर स्टॉप-लॉस या रिवर्स-ऑप स्थिति को पकड़ने के लिए एक पलटाव सिग्नल को जल्दी से पकड़ सकते हैं।
गतिशीलता संकेतकों के आधार पर निर्धारित उलटा संकेत अधिक विश्वसनीय है, जो प्रवृत्ति व्यापार में अनावश्यक बार-बार पोजीशन खोलने को कम करता है।
ADX सूचकांक के उपयोग से गैर-ट्रेंडिंग बाजारों में गलत संकेतों से बचा जाता है और रणनीति को ट्रेंडिंग चरणों पर अधिक ध्यान केंद्रित करने की अनुमति मिलती है, जिससे लाभ की संभावना बढ़ जाती है।
रणनीति तर्क स्पष्ट और सरल है, इसे समझने और ट्रैक करने में आसान है, और यह एल्गोरिथम ट्रेडिंग के शुरुआती लोगों के लिए उपयुक्त है।
संकेतक पैरामीटर अनुकूलन के लिए एक बड़ा स्थान है, आप विभिन्न बाजारों के लिए अनुकूलन प्राप्त कर सकते हैं जैसे कि चलती औसत चक्र, गतिशीलता पैरामीटर आदि को समायोजित करके।
इस रणनीति के मुख्य जोखिम निम्नलिखित हैं:
मूविंग एवरेज स्वयं मूल्य परिवर्तनों के प्रति प्रतिक्रिया में देरी करता है, जिससे संकेतों में देरी हो सकती है और सबसे अच्छा प्रवेश समय छूट सकता है।
झूठी तोड़फोड़ के कारण अनावश्यक रूप से खोला या बंद किया जाता है, और संकेतकों के पैरामीटर को और अनुकूलित करने या अतिरिक्त फ़िल्टरिंग शर्तों को पेश करने की आवश्यकता होती है।
ट्रेंड रिवर्स निर्णय गतिशीलता सूचकांक पर निर्भर करता है, जब बाजार में भारी बदलाव होता है, तो गतिशीलता सूचकांक का प्रभाव छूट सकता है।
एडीएक्स सूचकांक ट्रेंड और समेकन को सही ढंग से नहीं पहचान सकता है, और थ्रेशोल्ड को बहुत अधिक या बहुत कम सेट करने से समस्याएं हो सकती हैं।
इस रणनीति में लेन-देन की लागत को ध्यान में नहीं रखा गया है, और वास्तविक उपयोग में जोखिम को नियंत्रित करने के लिए स्टॉप लॉस सेट करने पर ध्यान दिया जाना चाहिए।
इस रणनीति को और अधिक अनुकूलित किया जा सकता हैः
अन्य प्रकार के चलती औसत को आज़माएं, या चलती औसत के पैरामीटर को समायोजित करें, और सूचक को चिकना करने के लिए अनुकूलित करें
गतिशीलता संकेतक की लंबाई के पैरामीटर को अनुकूलित किया गया है ताकि यह मूल्य परिवर्तन के प्रति अधिक संवेदनशील हो सके।
गतिशीलता सूचकांक के उलट होने पर मूल्य फ़िल्टर सेट करने का प्रयास करें, ताकि अल्पकालिक छोटे उतार-चढ़ाव से गुमराह न हों।
ADX के उपयोग को और बढ़ाएं, जैसे कि ADX के विभिन्न स्तरों के लिए अलग-अलग पैरामीटर का उपयोग करना।
ट्रेड वॉल्यूम इंडिकेटर जैसे सहायक शर्तों को पेश करना, सिग्नल की गुणवत्ता में सुधार करना, फ़िल्टर झूठी दरारें।
एकल हानि को नियंत्रित करने के लिए एक स्टॉप लॉस तंत्र जोड़ें। वास्तविक बाजार के लिए प्रमोशन स्तर का आकलन करें और उचित स्टॉप लॉस सेट करें।
इस रणनीति में चलती औसत सूचक और गतिशीलता सूचक के लाभों को एकीकृत किया गया है, जिससे प्रवृत्ति पर नज़र रखने और उलट पकड़ने को संभव बनाया गया है। यह रणनीति बाजार के विभिन्न चरणों के लिए अधिक लचीले ढंग से प्रतिक्रिया दे सकती है, जबकि प्रवृत्ति व्यापार को बनाए रखती है। पैरामीटर अनुकूलन और सहायक शर्तों की शुरूआत के माध्यम से, रणनीति की प्रभावशीलता को और बढ़ाने के लिए जगह है। कुल मिलाकर, रणनीति का तर्क स्पष्ट, सरल और विश्वसनीय है। यह एल्गोरिथ्म ट्रेडिंग के शुरुआती लोगों के सीखने और उपयोग के लिए बहुत उपयुक्त है।
/*backtest
start: 2023-09-23 00:00:00
end: 2023-10-23 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
//study(title="MA Crossover Strategy", overlay = true)
strategy("MA Crossover Strategy with MA Turning Point Exits", overlay=true)
src = input(open, title="Source")
price = request.security(syminfo.tickerid, timeframe.period, src)
ma1 = input(5, title="1st MA Length")
type1 = input("HMA", "1st MA Type", options=["SMA", "EMA", "HMA"])
ma2 = input(7, title="2nd MA Length")
type2 = input("HMA", "2nd MA Type", options=["SMA", "EMA", "HMA"])
adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
adxthreshold = input(20, title="ADX threshold")
dirmov(len) =>
up = change(high)
down = -change(low)
plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
truerange = rma(tr, len)
plus = fixnan(100 * rma(plusDM, len) / truerange)
minus = fixnan(100 * rma(minusDM, len) / truerange)
[plus, minus]
adx(dilen, adxlen) =>
[plus, minus] = dirmov(dilen)
sum = plus + minus
adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
sig = adx(dilen, adxlen)
//study("Average Directional Index", shorttitle="ADX", format=format.price, precision=2, resolution="")
//plot(sig, color=color.red, title="ADX")
f_hma(_src, _length)=>
_return = wma((2*wma(_src, _length/2))-wma(_src, _length), round(sqrt(_length)))
price1 = if (type1 == "SMA")
sma(price, ma1)
else
if (type1 == "EMA")
ema(price, ma1)
else
f_hma(price, ma1)
price2 = if (type2 == "SMA")
sma(price, ma2)
else
if (type2 == "EMA")
ema(price, ma2)
else
f_hma(price, ma2)
//plot(series=price, style=line, title="Price", color=black, linewidth=1, transp=0)
plot(series=price1, style=line, title="1st MA", color=blue, linewidth=2, transp=0)
plot(series=price2, style=line, title="2nd MA", color=green, linewidth=2, transp=0)
//longCondition = price1> price2
longCondition = price1> price2 and sig > adxthreshold
if (longCondition)
strategy.entry("Long", strategy.long)
shortCondition = price1 < price2 and sig > adxthreshold
if (shortCondition)
strategy.entry("Short", strategy.short)
lookback1 = input(1, "Lookback 1")
roc1 = roc(price1, lookback1)
ma1up = false
ma1down = false
ma2up = false
ma2down = false
ma1up := nz(ma1up[1])
ma1down := nz(ma1down[1])
ma2up := nz(ma2up[1])
ma2down := nz(ma2down[1])
trendStrength1 = input(2, title="Minimum slope magnitude * 100", type=float) * 0.01
if crossover(roc1, trendStrength1)
ma1up := true
ma1down := false
if crossunder(roc1, -trendStrength1)
ma1up := false
ma1down := true
shortexitCondition = ma1up and ma1down[1] and sig > adxthreshold
if (shortexitCondition)
strategy.close("Short")
longexitCondition = ma1down and ma1up[1] and sig > adxthreshold
if (longexitCondition)
strategy.close("Long")