
एक द्वि-समानता तोड़ने की रणनीति एक प्रवृत्ति ट्रैकिंग रणनीति है जो दो अलग-अलग चक्रों पर आधारित है, जो एक खरीद और बिक्री संकेत के रूप में एक चलती औसत को पार करती है। यह रणनीति एक त्वरित औसत और एक धीमी औसत के क्रॉसिंग बिंदु को ट्रेडिंग प्रवेश बिंदु के रूप में उपयोग करती है, और क्रॉसिंग के बाद प्रवृत्ति की दिशा का निर्धारण करती है और इसके अनुरूप ओवरहेड या खाली पदों की स्थापना करती है। यह मध्य-स्तरीय प्रवृत्ति को पकड़ने के साथ-साथ अनावश्यक उतार-चढ़ाव के कारण अत्यधिक ट्रेडिंग आवृत्ति की समस्या को भी कम कर सकती है।
यह रणनीति दो चलती औसत का उपयोग करती हैः एक तेज एमए और एक धीमी एमए। तेज एमए चक्र आमतौर पर एक छोटी अवधि के लिए सेट किया जाता है (जैसे कि 15 अवधि), अल्पकालिक मूल्य परिवर्तन को पकड़ने के लिए; धीमी एमए चक्र आमतौर पर एक लंबी अवधि के लिए सेट किया जाता है (जैसे कि 21 अवधि), मुख्य प्रवृत्ति दिशा का आकलन करने के लिए। रणनीति के ट्रेडिंग सिग्नल दो एमए के क्रॉसिंग से आते हैंः जब तेज एमए धीमी एमए से गुजरता है तो एक खरीद संकेत; जब तेज एमए नीचे धीमी एमए से गुजरता है तो एक बिक्री संकेत।
विभिन्न एमए चक्र संयोजनों को सेट करके, रणनीति को ट्रेंड कैप्चर करने के लिए समय की लंबाई को समायोजित किया जा सकता है। छोटे एमए संयोजन अल्पकालिक छोटे चक्रों के लिए मूल्य परिवर्तन के अवसरों को पकड़ सकते हैं; लंबे एमए संयोजन केवल लंबी लाइन स्तर के रुझानों को पकड़ने के लिए झटके को फ़िल्टर कर सकते हैं।
इस रणनीति में एक जोखिम प्रबंधन मॉड्यूल भी शामिल है: स्टॉप, स्टॉप लॉस और मूव स्टॉप लॉस। यह एक एकल व्यापार पर अधिकतम नुकसान को सीमित कर सकता है और समग्र लाभ की रक्षा करने में मदद कर सकता है।
इस रणनीति के निम्नलिखित फायदे हैं:
हालांकि, इस रणनीति के कुछ जोखिम भी हैं, जो मुख्य रूप से निम्नलिखित पर केंद्रित हैंः
इन जोखिमों को सुधार और अनुकूलित किया जा सकता है, जैसे कि एमए पैरामीटर को समायोजित करना, फ़िल्टरिंग शर्तों को जोड़ना और स्टॉप लॉजिक को अनुकूलित करना।
द्वि-समान-रेखा रणनीतियों को निम्नलिखित पहलुओं से अनुकूलित किया जा सकता हैः
इन अनुकूलन और सुधारों के माध्यम से, रणनीति की सफलता दर, रिटर्न दर और जोखिम के लिए रिटर्न दर में काफी सुधार किया जा सकता है।
एक समग्र रूप से, द्वि-समान-रेखा तोड़ने की रणनीति एक ट्रेंड ट्रैकिंग रणनीति है जिसे आसानी से लागू और अनुकूलित किया जा सकता है। इसकी सरलता, लचीलापन और जोखिम-नियंत्रण के फायदे हैं, जो इसे एक प्रवेश रणनीति के रूप में अच्छी तरह से अनुकूलित करते हैं। निरंतर परीक्षण और अनुकूलन के माध्यम से, इस रणनीति में निरंतर सुधार किया जा सकता है और इसमें एक गुणात्मक रणनीति बनने की क्षमता है।
/*backtest
start: 2022-12-10 00:00:00
end: 2023-06-16 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy(title = "Silent Trader Strategy", shorttitle = "Silent Trader", overlay = true, pyramiding = 0, default_qty_type = strategy.cash, default_qty_value = 1000, commission_value = 0.0675, initial_capital = 1000, currency = currency.USD, calc_on_order_fills = true, calc_on_every_tick = true)
maFastSource = input(defval = ohlc4, title = "Fast MA Source")
maFastLength = input(defval = 15, title = "Fast MA Period", minval = 1)
maSlowSource = input(defval = ohlc4, title = "Slow MA Source")
maSlowLength = input(defval = 21, title = "Slow MA Period", minval = 1)
tradeInvert = input(defval = false, title = "Invert Trade Direction?")
inpTakeProfit = input(defval = 100, title = "Take Profit percentage(0.1%)", minval = 0)
inpStopLoss = input(defval = 100, title = "Stop Loss", minval = 0)
inpTrailStop = input(defval = 0, title = "Trailing Stop Loss", minval = 0)
inpTrailOffset = input(defval = 0, title = "Trailing Stop Loss Offset", minval = 0)
useTakeProfit = inpTakeProfit >= 1 ? inpTakeProfit : na
useStopLoss = inpStopLoss >= 1 ? inpStopLoss : na
useTrailStop = inpTrailStop >= 1 ? inpTrailStop : na
useTrailOffset = inpTrailOffset >= 1 ? inpTrailOffset : na
useTimeLimit = input(defval = true, title = "Use Start Time Limiter?")
startYear = input(defval = 2018, title = "Start From Year", minval = 0, step = 1)
startMonth = input(defval = 05, title = "Start From Month", minval = 0,step = 1)
startDay = input(defval = 01, title = "Start From Day", minval = 0,step = 1)
startHour = input(defval = 00, title = "Start From Hour", minval = 0,step = 1)
startMinute = input(defval = 00, title = "Start From Minute", minval = 0,step = 1)
startTimeOk() =>
inputTime = timestamp(syminfo.timezone, startYear, startMonth, startDay, startHour, startMinute)
timeOk = time > inputTime ? true : false
r = (useTimeLimit and timeOk) or not useTimeLimit
maFast = ema(maFastSource, maFastLength)
maSlow = sma(maSlowSource, maSlowLength)
fast = plot(maFast, title = "Fast MA", color = #26A69A, linewidth = 1, style = line, transp = 50)
slow = plot(maSlow, title = "Slow MA", color = #EF5350, linewidth = 1, style = line, transp = 50)
aboveBelow = maFast >= maSlow ? true : false
tradeDirection = tradeInvert ? aboveBelow ? false : true : aboveBelow ? true : false
if( startTimeOk() )
enterLong = not tradeDirection[1] and tradeDirection
exitLong = tradeDirection[1] and not tradeDirection
strategy.entry( id = "Long", long = true, when = enterLong )
//strategy.close( id = "Long", when = exitLong )
enterShort = tradeDirection[1] and not tradeDirection
exitShort = not tradeDirection[1] and tradeDirection
strategy.entry( id = "Short", long = false, when = enterShort )
//strategy.close( id = "Short", when = exitShort )
strategy.exit("Exit Long", from_entry = "Long", profit = close * useTakeProfit / 1000 / syminfo.mintick, loss = close * useStopLoss / 1000 / syminfo.mintick, trail_points = close * useTrailStop / 1000 / syminfo.mintick, trail_offset = close * useTrailOffset / 1000 / syminfo.mintick)
strategy.exit("Exit Short", from_entry = "Short", profit = close * useTakeProfit / 1000 / syminfo.mintick, loss = close * useStopLoss / 1000 / syminfo.mintick, trail_points = close * useTrailStop / 1000 / syminfo.mintick, trail_offset = close * useTrailOffset / 1000 / syminfo.mintick)