दोहरी ईएमए क्रॉसओवर ऑसिलेशन ट्रैकिंग रणनीति

लेखक:चाओझांग, दिनांकः 2024-01-03 11:38:51
टैगः

img

अवलोकन

ड्यूल ईएमए क्रॉसओवर ऑसिलेशन ट्रैकिंग रणनीति एक रणनीति है जो ईएमए संकेतक का उपयोग करके रुझानों की पहचान करती है और अस्थिर बाजार स्थितियों के दौरान ऑसिलेशन को ट्रैक करती है। इस रणनीति में ट्रेंड ट्रैकिंग और ऑसिलेशन कैप्चर दोनों की अवधारणाएं शामिल हैं। इसका उद्देश्य मजबूत रुझानों के दौरान दीर्घकालिक ट्रैकिंग और ऑसिलेशन के दौरान अल्पकालिक ट्रेडिंग करके बेहतर रिटर्न प्राप्त करना है।

रणनीति तर्क

यह रणनीति रुझानों का आकलन करने के लिए एक संकेतक के रूप में 20 अवधि के ईएमए का उपयोग करती है। जब कीमत ईएमए से ऊपर जाती है, तो यह एक ऊपर की प्रवृत्ति का संकेत देती है, और जब कीमत नीचे जाती है, तो यह एक नीचे की प्रवृत्ति का संकेत देती है।

जब कीमत ईएमए से ऊपर जाती है, तो पिछले 20 अवधियों में उच्चतम मूल्य को लाभ लेने के रूप में और क्रॉसओवर के बाद सबसे कम कम मूल्य को स्टॉप लॉस के रूप में उपयोग करके लंबी स्थिति दर्ज की जाती है। जब कीमत ईएमए से नीचे जाती है, तो पिछले 20 अवधियों में सबसे कम मूल्य को लाभ लेने के रूप में और क्रॉसओवर के बाद सबसे उच्च मूल्य को स्टॉप लॉस के रूप में उपयोग करके एक छोटी स्थिति दर्ज की जाती है।

साथ ही, रणनीति यह भी जांचती है कि क्या ADX 30 से ऊपर है। ट्रेड केवल तब किए जाते हैं जब प्रवृत्ति पर्याप्त मजबूत होती है, अर्थात जब ADX 30 से अधिक होता है। इससे बाजार के उतार-चढ़ाव के दौरान स्टॉप आउट से बचा जाता है।

खुले ट्रेडों के दौरान, अधिक लाभ प्राप्त करने के लिए बाजार की स्थितियों के आधार पर ट्रेलिंग स्टॉप को समायोजित करना जारी रखता है।

लाभ विश्लेषण

यह रणनीति ट्रेंड ट्रैकिंग और ऑसिलेशन ट्रेडिंग दोनों के फायदे को जोड़ती है। यह ट्रेंडिंग बाजारों के दौरान उच्च रिटर्न और ऑसिलेशन के दौरान अधिक सुसंगत रिटर्न का उत्पादन कर सकती है। अनुकूलन क्षमता मजबूत है।

ईएमए का प्रयोग पैरामीटरों को सरल रखता है, अत्यधिक अनुकूलन के जोखिम को कम करता है और स्थिरता सुनिश्चित करता है।

जोखिम विश्लेषण

इस रणनीति का मुख्य जोखिम तीव्र उतार-चढ़ाव के दौरान अधिक बार रुकने की संभावना है। यह वह जगह है जहां एडीएक्स खेल में आता है। एडीएक्स कम होने पर व्यापार को अक्षम करके, स्पष्ट प्रवृत्ति की अनुपस्थिति में नुकसान से बचा जा सकता है।

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

अनुकूलन दिशाएँ

इस रणनीति के लिए संभावित अनुकूलन में शामिल हैंः

  1. इष्टतम संयोजन खोजने के लिए अधिक ईएमए अवधि का परीक्षण करना।

  2. ADX अवधि और सीमा मान सहित ADX मापदंडों का अनुकूलन।

  3. लाभ लेने और स्टॉप लॉस एल्गोरिदम में सुधार करना, उदाहरण के लिए गतिशील स्टॉप की शुरूआत करके।

  4. मल्टी-इंडिकेटर पुष्टिकरण प्रणाली बनाने के लिए केडीजे और एमएसीडी जैसे अतिरिक्त संकेतकों को मिलाकर।

सारांश

संक्षेप में, डबल ईएमए क्रॉसओवर ऑसिलेशन ट्रैकिंग रणनीति एक अत्यधिक व्यावहारिक रणनीति है। यह ट्रेंड ट्रेडिंग रणनीतियों और ऑसिलेशन रणनीतियों दोनों की ताकतों को जोड़ती है। इसका उपयोग दीर्घकालिक ट्रैकिंग और अल्पकालिक ट्रेडिंग दोनों के लिए किया जा सकता है। पैरामीटर अनुकूलन और पुष्टिकरण संकेतकों को जोड़ने के माध्यम से प्रदर्शन में और सुधार हासिल किया जा सकता है। यह बाजार की स्थिति के बारे में कुछ हद तक विश्लेषणात्मक क्षमताओं वाले निवेशकों के लिए उपयुक्त है।


/*backtest
start: 2023-12-26 00:00:00
end: 2024-01-02 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("Linda Raschke's Holy Grail", shorttitle="RHG", default_qty_type = strategy.percent_of_equity, default_qty_value = 100, overlay = true)
adxlen = input(14, title="ADX period")
adxMin = input(30)
dilen = adxlen
f_highest(_src, _length)=>
    _adjusted_length = _length < 1 ? 1 : _length
    _value = _src
    for _i = 0 to (_adjusted_length-1)
        _value := _src[_i] >= _value ? _src[_i] : _value
    _return = _value

f_lowest(_src, _length)=>
    _adjusted_length = _length < 1 ? 1 : _length
    _value = _src
    for _i = 0 to (_adjusted_length-1)
        _value := _src[_i] <= _value ? _src[_i] : _value
    _return = _value

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)

emaLength = input(20)
curEma = ema(close, emaLength)
highPeriod = input(20)
d = na

takeProfitLong = highest(high, highPeriod) 
stopLossLong = f_lowest(low, barssince(low >= curEma))

if strategy.position_size == 0
    if adx(dilen, adxlen) <= adxMin or high < curEma 
        strategy.cancel("Long")
    if adx(dilen, adxlen) > adxMin and low < curEma and high > curEma and curEma > curEma[highPeriod / 2] and curEma > curEma[highPeriod] and takeProfitLong > high
        strategy.order("Long", strategy.long, stop = high)
        strategy.exit("Exit", "Long", limit = takeProfitLong, stop = stopLossLong)
        d := high

takeProfitShort = lowest(low, highPeriod) 
stopLossShort = f_highest(high, barssince(high <= curEma))

if strategy.position_size == 0
    if adx(dilen, adxlen) <= adxMin or low > curEma 
        strategy.cancel("Short")
    if adx(dilen, adxlen) > adxMin and high > curEma and low < curEma and curEma < curEma[highPeriod / 2] and curEma < curEma[highPeriod] and takeProfitShort < low
        strategy.order("Short", strategy.short, stop = low)
        strategy.exit("Exit", "Short", limit = takeProfitShort, stop = stopLossShort)
        d := low


strategy.close("Exit")

plot(d == high ? stopLossLong : d == low ? stopLossShort : na, style = circles, linewidth = 4, color = red)
plot(d == high ? takeProfitLong : d == low ? takeProfitShort : na, style = circles, linewidth = 4, color = green)
plot(d, style = circles, linewidth = 4, color = yellow)
plot(curEma, color = black, linewidth = 2)  

// === Backtesting Dates ===
testPeriodSwitch = input(false, "Custom Backtesting Dates")
testStartYear = input(2018, "Backtest Start Year")
testStartMonth = input(3, "Backtest Start Month")
testStartDay = input(6, "Backtest Start Day")
testStartHour = input(08, "Backtest Start Hour")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,testStartHour,0)
testStopYear = input(2018, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(14, "Backtest Stop Day")
testStopHour = input(14, "Backtest Stop Hour")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,testStopHour,0)
testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false
isPeriod = testPeriodSwitch == true ? testPeriod() : true
// === /END
if not isPeriod
    strategy.cancel_all()
    strategy.close_all()


अधिक