डबल मूविंग एवरेज क्रॉसओवर रणनीति

लेखक:चाओझांग, दिनांक: 2023-12-11 15:21:58
टैगः

img

अवलोकन

डबल मूविंग एवरेज क्रॉसओवर रणनीति एक ट्रेंड-फॉलोइंग रणनीति है जो ट्रेडिंग सिग्नल के रूप में अलग-अलग अवधि के दो मूविंग एवरेज के क्रॉसओवर का उपयोग करती है। यह लंबी या छोटी स्थिति में प्रवेश करती है जब तेज एमए धीमी एमए के ऊपर या नीचे पार करता है और क्रॉसओवर के बाद ट्रेंड की दिशा निर्धारित करता है। यह अत्यधिक उतार-चढ़ाव से अनावश्यक ट्रेडिंग आवृत्ति को कम करते हुए मध्यम अवधि के रुझानों को पकड़ सकता है।

रणनीति तर्क

यह रणनीति दो चलती औसत का उपयोग करती हैः अल्पकालिक मूल्य आंदोलनों को पकड़ने के लिए एक छोटी अवधि (जैसे 15 अवधि) के साथ एक तेज एमए, और प्रमुख प्रवृत्ति दिशा की पहचान करने के लिए एक लंबी अवधि (जैसे 21 अवधि) के साथ एक धीमी एमए। दो एमए के बीच क्रॉसओवर से ट्रेडिंग सिग्नल उत्पन्न होते हैंः धीमी एमए के ऊपर तेजी से एमए क्रॉसिंग खरीद संकेत देता है, जबकि नीचे तेजी से एमए क्रॉसिंग बिक्री संकेत देता है।

एमए अवधि संयोजनों को समायोजित करके, रणनीति रुझानों को पकड़ने के लिए समय सीमा को समायोजित कर सकती है। छोटे एमए कॉम्बो अल्पकालिक दोलन को लक्षित करते हैं जबकि लंबे एमए कॉम्बो शोर को फ़िल्टर करते हैं और केवल दीर्घकालिक रुझानों पर ध्यान केंद्रित करते हैं।

रणनीति में लाभ लेने, स्टॉप लॉस और ट्रेलिंग स्टॉप लॉस सहित जोखिम प्रबंधन मॉड्यूल भी शामिल हैं। ये व्यक्तिगत ट्रेडों के अधिकतम लाभ / हानि को सीमित करने में मदद करते हैं और समग्र जोखिम को शामिल करते हैं।

लाभ

डबल एमए रणनीति के निम्नलिखित लाभ हैंः

  1. सरल तर्क और समझने/कार्यान्वयन के लिए आसान;
  2. एमए अवधि को समायोजित करके बाजार की स्थितियों के अनुकूल होने की लचीलापन;
  3. कम व्यापार संकेतों से स्थिरता;
  4. स्टॉप लॉस के माध्यम से प्रभावी जोखिम नियंत्रण;
  5. एमए, जोखिम मापदंडों आदि पर अनुकूलन की आसानी

जोखिम

कुछ जोखिमों पर भी विचार किया जाना चाहिए:

  1. सीमाबद्ध बाजारों के दौरान अत्यधिक क्रॉसओवर और व्यापारिक आवृत्ति;
  2. देरी से चल रहे एमए मूल्य पलटाव बिंदुओं को याद कर सकते हैं और समय पर नुकसान को रोकने में विफल हो सकते हैं;
  3. अनावश्यक हानि के परिणामस्वरूप झूठे ब्रेकआउट के प्रति संवेदनशीलता;
  4. एमए की देरी के कारण सामान्य मूल्य ट्रैकिंग की गलतियां।

इन कमजोरियों को फ़िल्टरिंग सिग्नल, ट्रेलिंग स्टॉप लॉस आदि जैसे अनुकूलन के माध्यम से कम किया जा सकता है।

बढ़ोतरी के अवसर

इस रणनीति को निम्नलिखित पहलुओं में बढ़ाया जा सकता हैः

  1. वॉल्यूम या अस्थिरता पर फ़िल्टर जोड़ना, ताकि whipsaws से बचा जा सके;
  2. विभिन्न उत्पादों और समय सीमाओं के अनुरूप अधिक एमओ प्रकारों और परिष्कृत अवधि/सूत्रों का परीक्षण करना।
  3. ईएमए, एलडब्ल्यूएमए जैसे एमए प्रकारों की जांच सबसे तेज़ मूल्य ट्रैकिंग के लिए;
  4. मशीन लर्निंग के साथ एमए ट्यूनिंग और स्टॉप लॉस साइजिंग को स्वचालित करना;
  5. वैकल्पिक स्टॉप लॉस तकनीकें जैसे गैप, औसत मूल्य, झूमर।

इन वृद्धि से जीत दर में महत्वपूर्ण वृद्धि, जोखिम-समायोजित रिटर्न की उम्मीद है।

निष्कर्ष

कुल मिलाकर, दोहरी चलती औसत क्रॉसओवर रणनीति सादगी, लचीलापन और नियंत्रित जोखिम प्रदान करती है। इसके कार्यान्वयन और अनुकूलन की आसानी इसे एक आदर्श प्रारंभिक मात्रा रणनीति बनाती है। आवर्ती परीक्षण और ट्यूनिंग के साथ, इसमें समय के साथ एक मजबूत प्रणाली में विकसित होने के लिए क्रेडेंशियल्स हैं।


/*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)

अधिक