
यह द्वि-समान गतिशीलता ट्रेंड ट्रैकिंग और रिवर्स ट्रेडिंग सिस्टम एक व्यापक मात्रात्मक ट्रेडिंग रणनीति है, जिसमें ट्रेंड ट्रैकिंग और रिवर्स ट्रेडिंग के तत्व शामिल हैं। यह रणनीति बाजार की प्रवृत्ति की दिशा निर्धारित करने के लिए दो अलग-अलग चक्रों ((100 और 500) की एक चलती औसत का उपयोग करती है, जबकि कई तकनीकी संकेतकों को फ़िल्टर शर्तों के रूप में एकीकृत करती है, जिसमें आरएसआई ((सापेक्ष रूप से मजबूत निर्देशांक), एडीएक्स ((औसत दिशा सूचकांक) और एटीआर ((वास्तविक लहरों का औसत) शामिल हैं। यह प्रणाली कई दिशाओं में व्यापार करने की अनुमति देती है, जो कि अधिक हो सकती है या शून्य हो सकती है, और विभिन्न बाजार स्थितियों के अनुसार अलग-अलग प्रवेश और निकास नियमों को लागू करती है। यह रणनीति विशेष रूप से क्रिप्टोकरेंसी जैसे अस्थिर बाजारों के लिए उपयुक्त है, जो मजबूत प्रवृत्ति में प्रवृत्ति का पालन करने में सक्षम हैं, जबकि चरम ओवरसोल्ड स्थितियों में शून्य अवसरों की तलाश करते हैं।
इस रणनीति का मुख्य सिद्धांत ट्रेंड पहचान और गतिशीलता की पुष्टि के आधार पर दोहरे सत्यापन तंत्र पर आधारित हैः
रुझानों की पहचानरणनीतिः 100 चक्र और 500 चक्र की चलती औसत का उपयोग करें (वैकल्पिक ईएमए या एसएमए) बाजार की प्रवृत्ति निर्धारित करने के लिए। जब एमए 100 एमए 500 से ऊपर होता है, तो इसे एक उछाल माना जाता है; इसके विपरीत, यह एक गिरावट हो सकती है।
प्रवेश की शर्तें:
खाली सिर प्रवेश की शर्त:
जोखिम प्रबंधन और बाहर निकलने की रणनीति:
इस तरह की रणनीति को प्रवृत्ति बाजार में बड़े अवसरों को पकड़ने के लिए डिज़ाइन किया गया है, जबकि ओवरसोल्ड स्थितियों में पलटाव की तलाश की जाती है।
अत्यधिक अनुकूलनीयरणनीतिः कई वैकल्पिक फ़िल्टरों (आरएसआई, एडीएक्स, एटीआर) के माध्यम से अत्यधिक अनुकूलन क्षमता प्रदान करता है, जो विभिन्न बाजार स्थितियों और व्यापारी शैलियों के अनुकूल है। उपयोगकर्ता वर्तमान बाजार की स्थिति के आधार पर इन फ़िल्टरों को लचीले ढंग से चालू या बंद कर सकते हैं।
दोतरफा लेनदेनइस रणनीति में ट्रेडिंग के दो तरीकों का संयोजन किया गया है, जो कि ऊपरी रुझानों में अधिक करने के लिए और चरम ओवरसोल्ड स्थितियों में कम करने के लिए, लाभ के अवसरों को बढ़ाने के लिए है।
बुद्धि प्रवृत्ति का न्याय करनाद्वि-समान रेखीय प्रणाली (MA100 और MA500) का उपयोग करना अधिक विश्वसनीय प्रवृत्ति निर्णय प्रदान करता है, जो एक एकल समान रेखीय प्रणाली की तुलना में झूठी दरारों को फ़िल्टर करने में अधिक सक्षम है।
गतिशील उतार-चढ़ाव के अनुकूलएटीआर फ़िल्टर के माध्यम से, रणनीति स्वचालित रूप से बाजार में उतार-चढ़ाव के परिवर्तनों के लिए अनुकूल हो सकती है, कम अस्थिरता वाले वातावरण में बार-बार व्यापार से बचती है और अनावश्यक व्यापारिक लागत को कम करती है।
पीछा करने से बचेंएअर ट्रेडिंग ने “मजबूत लिवरेज ब्लॉकिंग” तंत्र स्थापित किया है, जब एमए 100 एमए 500 से अधिक सेट प्रतिशत से अधिक हो, तो घाटे पर प्रतिबंध लगा दिया जाता है, प्रभावी रूप से मजबूत लिवरेज बाजार में प्रतिकूलता के जोखिम से बचा जाता है।
एकाधिक सत्यापन तंत्र: प्रविष्टि संकेतों को कई तकनीकी संकेतकों की संयुक्त पुष्टि की आवश्यकता होती है, जिससे झूठे संकेतों की संभावना काफी कम हो जाती है और रणनीति की स्थिरता बढ़ जाती है।
लचीला बाहर निकलने का तंत्ररणनीतिः मल्टीहेड और ब्लेकहेड के लिए अलग-अलग आउटपुट लॉजिक डिज़ाइन किए गए हैं, मल्टीहेड को MA500 के माध्यम से गतिशील स्टॉप के रूप में रखा जा सकता है, जबकि ब्लेकहेड में एक निश्चित स्टॉप लक्ष्य है, जो विभिन्न दिशाओं में व्यापार करने की विशेषता है।
पैरामीटर संवेदनशीलतारणनीति कई तकनीकी संकेतकों और पैरामीटर सेटिंग्स पर निर्भर करती है, जिनमें से कुछ मापदंडों में मामूली बदलाव से प्रतिक्रिया के परिणामों में महत्वपूर्ण अंतर हो सकता है। वास्तविक लेनदेन में, बाजार की स्थिति में बदलाव के साथ इष्टतम पैरामीटर बदल सकते हैं, और ऐतिहासिक डेटा के साथ अति-अनुरूपता का जोखिम होता है। समाधान चरणबद्ध अनुकूलन और अग्रिम परीक्षण का उपयोग करके पैरामीटर की स्थिरता की पुष्टि करना है।
पिछड़ेपन का खतरा: चलती औसत जैसे संकेतक मूल रूप से पिछड़े संकेतक हैं, जो तेजी से उतार-चढ़ाव वाले बाजारों में समय पर मोड़ को पकड़ने में असमर्थ हो सकते हैं, जिससे प्रवेश या प्रस्थान में देरी हो सकती है। उच्च अस्थिरता वाले बाजारों में उचित रूप से चलती औसत चक्र को छोटा करने या अन्य अग्रणी संकेतक जोड़ने की सिफारिश की जाती है।
रुझान परिवर्तन अवधि में खराब प्रदर्शन: चौंकाने वाले बाजार या रुझान परिवर्तन अवधि के दौरान, रणनीति लगातार घाटे के कारण लगातार झूठे संकेत दे सकती है। समाधान बाजार की स्थिति की पहचान करने के लिए एक तंत्र जोड़ना है, जो चौंकाने वाले बाजार की पहचान करने पर स्वचालित रूप से स्थिति को कम करता है या व्यापार को निलंबित करता है।
धन प्रबंधन जोखिमरणनीतिः डिफ़ॉल्ट रूप से खाते में 100% धनराशि का उपयोग करें, साथ ही एक बार पिरामिड को जमा करने की अनुमति दें, प्रतिकूल परिस्थितियों में बड़ी वापसी का सामना करना पड़ सकता है। व्यक्तिगत जोखिम सहनशीलता के आधार पर स्थिति के आकार को समायोजित करने की सिफारिश की जाती है, पूरी धनराशि का उपयोग करने से बचें।
तरलता जोखिम: कम तरलता वाले बाजारों या समय के दौरान, स्लाइड प्वाइंट में वृद्धि या अपेक्षित मूल्य पर व्यापार करने में असमर्थता का जोखिम हो सकता है। पर्याप्त तरलता वाले मुख्यधारा के व्यापारिक जोड़े और समय के दौरान संचालन की रणनीति की सिफारिश की जाती है।
ब्लैक स्वान का खतरा: निश्चित प्रतिशत हानियों को चरम बाजार स्थितियों में प्रभावी ढंग से लागू नहीं किया जा सकता है, खासकर जब कीमतें आसमान छूती हैं। अधिकतम हानि सीमा निर्धारित करने की सिफारिश की जाती है, और विकल्पों जैसे डेरिवेटिव के उपयोग के साथ चरम जोखिमों को कवर करने के लिए विचार किया जाता है।
बाजार की स्थिति वर्गीकरण: वर्तमान रणनीति विभिन्न बाजार स्थितियों के तहत एक ही पैरामीटर सेटिंग का उपयोग करती है (जैसे कि रुझान, अस्थिरता, उच्च उतार-चढ़ाव, कम उतार-चढ़ाव), बाजार की स्थिति की पहचान करने की क्षमता को जोड़ने पर विचार किया जा सकता है, और विभिन्न स्थितियों के लिए पैरामीटर के विभिन्न संयोजनों का अनुकूलन किया जा सकता है। विशिष्ट कार्यान्वयन बाजार की स्थिति को अस्थिरता दर संकेतक (जैसे कि एटीआर प्रतिशत) या रुझान की ताकत संकेतक (जैसे कि एडीएक्स थ्रेड) द्वारा विभाजित किया जा सकता है।
धन प्रबंधन का अनुकूलनवर्तमान रणनीति में एक निश्चित अनुपात के साथ खाता धन का उपयोग किया जाता है, जिसे अस्थिरता के आधार पर गतिशील स्थिति प्रबंधन में सुधार किया जा सकता है, कम अस्थिरता वाले वातावरण में स्थिति को बढ़ाया जा सकता है, उच्च अस्थिरता वाले वातावरण में स्थिति को कम किया जा सकता है, ताकि जोखिम संतुलन हो सके। एटीआर के सापेक्ष मूल्य का उपयोग करके प्रत्येक व्यापार के लिए धन के अनुपात को गतिशील रूप से समायोजित किया जा सकता है।
समय फ़िल्टर जोड़ें: कुछ बाजारों में एक निश्चित समय अवधि में बेहतर या बदतर प्रदर्शन हो सकता है, समय फ़िल्टर सुविधा जोड़ा जा सकता है, इतिहास में खराब प्रदर्शन की अवधि से बचने के लिए। यह विभिन्न समय अवधि (जैसे एशियाई, यूरोपीय, अमेरिकी ट्रेडिंग समय) के लिए रणनीति के प्रदर्शन का विश्लेषण करके किया जा सकता है।
बहु-समय फ़्रेम पुष्टि: वर्तमान रणनीति केवल एक समय सीमा पर काम करती है ( घंटे), आप उच्च समय सीमा की प्रवृत्ति की पुष्टि को जोड़ने पर विचार कर सकते हैं, जीतने की दर को बढ़ाने के लिए केवल उच्च समय सीमा की प्रवृत्ति की दिशा के अनुरूप प्रवेश करें। उदाहरण के लिए, 3 घंटे के चार्ट पर बहु-हेड सिग्नल केवल ऊपर की ओर प्रवृत्ति के दौरान निष्पादित किया जाता है।
गतिशील रुकावट और रोकएटीआर के गुणकों का उपयोग करके स्टॉप और स्टॉप पॉइंट्स को सेट किया जा सकता है, जो अस्थिरता बढ़ने पर स्वचालित रूप से स्टॉप-लॉस रेंज का विस्तार करता है।
भावनाओं का एकीकरण: अतिरिक्त फ़िल्टर के रूप में बाजार की भावना के संकेतकों को शामिल करें, जैसे कि व्यापार की मात्रा, पूंजी की दर (अस्थायी अनुबंधों के लिए) या वायदा प्रीमियम, ताकि अत्यधिक भावनात्मक स्थिति में प्रतिगामी व्यापार से बचा जा सके। ये संकेत बाजार के अति-गर्म या अति-ठंड के चेतावनी संकेत के रूप में कार्य कर सकते हैं।
मशीन लर्निंग अनुकूलन: मशीन लर्निंग एल्गोरिदम का उपयोग करके गतिशील रूप से इष्टतम पैरामीटर संयोजन का चयन करें, हाल ही में बाजार की स्थिति के आधार पर स्वचालित रूप से रणनीति पैरामीटर को समायोजित करें। यह रोलिंग विंडो के पैरामीटर अनुकूलन या जबरदस्ती सीखने के तरीकों को लागू करके किया जा सकता है।
द्वि-समान गतिशीलता ट्रेंड ट्रैकिंग और रिवर्स ट्रेडिंग सिस्टम एक अच्छी तरह से डिज़ाइन की गई मात्रात्मक ट्रेडिंग रणनीति है, जो एक समान गतिशीलता प्रणाली, गतिशीलता संकेतक और अस्थिरता फ़िल्टर के संयोजन के माध्यम से उच्च अनुकूलन और अनुकूलन क्षमता प्रदान करती है, जबकि रणनीति की सादगी को बनाए रखती है। इस रणनीति का मुख्य लाभ इसकी बहु-पुष्टि तंत्र और लचीली फ़िल्टरिंग प्रणाली है, जो इसे विभिन्न बाजार स्थितियों के अनुकूल बनाने में सक्षम बनाती है।
हालांकि, सभी ट्रेडिंग रणनीतियों की तरह, इसे पैरामीटर संवेदनशीलता, विलंबता और बाजार की स्थिति में बदलाव जैसी चुनौतियों का सामना करना पड़ता है। बाजार की स्थिति वर्गीकरण, गतिशील धन प्रबंधन, बहु-समय फ्रेम विश्लेषण और मशीन सीखने के अनुकूलन जैसे दिशाओं में सुधार के माध्यम से रणनीति की स्थिरता और अनुकूलनशीलता में और सुधार की उम्मीद है।
सबसे महत्वपूर्ण बात यह है कि व्यापारियों को इस रणनीति को लागू करने के लिए अपने सिद्धांतों और सीमाओं को अच्छी तरह से समझना चाहिए, व्यक्तिगत जोखिम वरीयताओं और बाजार के अनुभव के अनुसार उचित समायोजन करना चाहिए, और हमेशा सख्त जोखिम प्रबंधन सिद्धांतों का पालन करना चाहिए। कोई भी व्यापार रणनीति सही नहीं है, लेकिन निरंतर अनुकूलन और सावधानीपूर्वक आवेदन के साथ, यह प्रणाली व्यापारियों के टूलबॉक्स में एक शक्तिशाली हथियार बन सकती है।
/*backtest
start: 2024-05-26 00:00:00
end: 2025-05-25 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"SOL_USDT"}]
*/
//@version=6
strategy("Momentum Long + Short Strategy (BTC 3H)", overlay=true,
default_qty_type=strategy.percent_of_equity,
default_qty_value=100,
initial_capital=1000,
commission_type=strategy.commission.percent,
commission_value=0.1,
slippage=1,
pyramiding=1)
// ==============================================================================
// === LONG TRADE SETTINGS
// ==============================================================================
enableLongs = input.bool(true, "Enable Long Trades", group="LONG TRADE SETTINGS")
slPercentLong = input.float(3.0, "Long Stop Loss %", minval=0.1, group="LONG TRADE SETTINGS")
useRSIFilter = input.bool(false, "Enable RSI Filter", group="LONG FILTER SETTINGS")
useADXFilter = input.bool(false, "Enable ADX Filter", group="LONG FILTER SETTINGS")
useATRFilter = input.bool(false, "Enable ATR Filter", group="LONG FILTER SETTINGS")
useTrendFilter = input.bool(true, "Require MA100 > MA500", group="LONG FILTER SETTINGS")
smoothType = input.string("EMA", "Smoothing Type", options=["EMA", "SMA"], group="LONG FILTER SETTINGS")
smoothingLength = input.int(100, "Smoothing Length (for filters)", group="LONG FILTER SETTINGS")
rsiLengthLong = input.int(14, "RSI Length", group="RSI FILTER")
adxLength = input.int(14, "ADX Length", group="ADX FILTER")
atrLength = input.int(14, "ATR Length", group="ATR FILTER")
// ==============================================================================
// === SHORT TRADE SETTINGS
// ==============================================================================
enableShorts = input.bool(false, "Enable Short Trades", group="SHORT TRADE SETTINGS")
slPercentShort = input.float(3.0, "Short Stop Loss %", minval=0.1, group="SHORT TRADE SETTINGS")
tpPercentShort = input.float(4.0, "Short Take Profit %", minval=0.1, group="SHORT TRADE SETTINGS")
rsiLengthShort = input.int(14, "RSI Length", group="SHORT FILTER SETTINGS")
rsiThresholdShort = input.float(33, "RSI Threshold", minval=1, maxval=100, group="SHORT FILTER SETTINGS")
bbLength = input.int(20, "Bollinger Band Length", group="SHORT FILTER SETTINGS")
useATRFilterShort = input.bool(true, "Enable ATR Filter (Short)", group="SHORT FILTER SETTINGS")
useStrongUptrendBlock = input.bool(true, "Block Shorts if MA100 > MA500 by (%)", group="SHORT FILTER SETTINGS")
shortTrendGapPct = input.float(2.0, "Threshold (%) for Blocking Shorts", minval=0.1, group="SHORT FILTER SETTINGS")
// ==============================================================================
// === COMMON INDICATORS
// ==============================================================================
ma100 = smoothType == "EMA" ? ta.ema(close, 100) : ta.sma(close, 100)
ma500 = smoothType == "EMA" ? ta.ema(close, 500) : ta.sma(close, 500)
priceAboveMAs = close > ma100 and close > ma500
trendAlignment = not useTrendFilter or ma100 > ma500
plot(ma100, title="MA 100", color=color.orange)
plot(ma500, title="MA 500", color=color.blue)
// ==============================================================================
// === LONG FILTER LOGIC
// ==============================================================================
rsiLong = ta.rsi(close, rsiLengthLong)
rsiSmooth = smoothType == "EMA" ? ta.ema(rsiLong, smoothingLength) : ta.sma(rsiLong, smoothingLength)
rsiPass = not useRSIFilter or rsiLong > rsiSmooth
dmi(len) =>
up = ta.change(high)
down = -ta.change(low)
plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
trur = ta.rma(ta.tr, len)
plusDI = 100 * ta.rma(plusDM, len) / trur
minusDI = 100 * ta.rma(minusDM, len) / trur
dx = 100 * math.abs(plusDI - minusDI) / (plusDI + minusDI)
ta.rma(dx, len)
adx = dmi(adxLength)
adxSmooth = smoothType == "EMA" ? ta.ema(adx, smoothingLength) : ta.sma(adx, smoothingLength)
adxPass = not useADXFilter or adx > adxSmooth
atr = ta.atr(atrLength)
atrSmooth = smoothType == "EMA" ? ta.ema(atr, smoothingLength) : ta.sma(atr, smoothingLength)
atrPass = not useATRFilter or atr > atrSmooth
// ==============================================================================
// === SHORT FILTER LOGIC
// ==============================================================================
rsiShort = ta.rsi(close, rsiLengthShort)
bbBasis = ta.sma(close, bbLength)
bbDev = ta.stdev(close, bbLength)
bbLower = bbBasis - bbDev * 2
priceBelowBB = close < bbLower
priceBelowMAs = close < ma100 and close < ma500
rsiOversold = rsiShort < rsiThresholdShort
atrShort = ta.atr(atrLength)
atrShortSmoothed = smoothType == "EMA" ? ta.ema(atrShort, smoothingLength) : ta.sma(atrShort, smoothingLength)
atrShortPass = not useATRFilterShort or atrShort > atrShortSmoothed
emaGapTooWide = (ma100 - ma500) / ma500 * 100 > shortTrendGapPct
strongUptrendBlock = not useStrongUptrendBlock or not emaGapTooWide
// ==============================================================================
// === ENTRY CONDITIONS
// ==============================================================================
longCondition = enableLongs and priceAboveMAs and trendAlignment and rsiPass and adxPass and atrPass
shortCondition = enableShorts and priceBelowMAs and priceBelowBB and rsiOversold and atrShortPass and strongUptrendBlock
if longCondition
strategy.entry("Long", strategy.long)
if shortCondition
strategy.entry("Short", strategy.short)
// ==============================================================================
// === EXIT CONDITIONS
// ==============================================================================
longStop = strategy.position_avg_price * (1 - slPercentLong / 100)
strategy.exit("SL Long", from_entry="Long", stop=longStop)
if strategy.position_size > 0 and close < ma500
strategy.close("Long", comment="TP Below MA500")
shortStop = strategy.position_avg_price * (1 + slPercentShort / 100)
shortTP = strategy.position_avg_price * (1 - tpPercentShort / 100)
strategy.exit("SL/TP Short", from_entry="Short", stop=shortStop, limit=shortTP)