प्रवृत्ति फ़िल्टर पर आधारित त्वरित QQE क्रॉसओवर ट्रेडिंग रणनीति

लेखक:चाओझांग, दिनांकः 2024-01-25 11:34:58
टैगः

img

अवलोकन

ट्रेंड फिल्टर पर आधारित फास्ट क्यूक्यूई क्रॉसओवर ट्रेडिंग रणनीति एक ट्रेंड फॉलो ट्रेडिंग रणनीति है जो ट्रेंड दिशा फिल्टरिंग के लिए मूविंग एवरेज के साथ फास्ट क्यूक्यूई क्रॉस का उपयोग करती है। क्यूक्यूई या क्वालिटेटिव क्वांटिटेटिव एस्टीमेशन सापेक्ष शक्ति सूचकांक पर आधारित है, लेकिन एक अतिरिक्त परिवर्तन के रूप में एक चिकनाई तकनीक का उपयोग करता है। तीन क्रॉस का चयन किया जा सकता है (सभी डिफ़ॉल्ट रूप से चयनित):

  • आरएसआई सिग्नल क्रॉसिंग शून्य (XZERO)
  • आरएसआई सिग्नल क्रॉसिंग फास्ट आरएसआईट्र लाइन (एक्सक्यूक्यूई)
  • आरएसआई सिग्नल आरएसआई थ्रेशहोल्ड चैनल से बाहर निकलता है (खरीद/बेच)

(BUY/SELL) अलर्ट को चलती औसत के आधार पर फ़िल्टर किया जा सकता हैः

  • BUY अलर्ट के लिए क्लोज को तेज MA और तेज MA (EMA8) > मध्यम MA (EMA20) > धीमी MA (SMA50) से ऊपर होना चाहिए।
  • SELL अलर्ट के लिए बंद करना तेज एमए और तेज एमए (EMA8) < मध्यम एमए (EMA20) < धीमी एमए (SMA50) से नीचे होना चाहिए।

और/या दिशात्मक फ़िल्टरः

  • BUY अलर्ट के लिए क्लोज को धीमी एमए (एसएमए50) से ऊपर होना चाहिए और दिशात्मक एमए (ईएमए20) हरा होना चाहिए।
  • SELL अलर्ट के लिए बंद करना धीमी एमए (एसएमए50) से नीचे होना चाहिए और दिशात्मक एमए (ईएमए20) लाल होना चाहिए।

XZERO और XQQE फ़िल्टरिंग में शामिल नहीं हैं, उनका उपयोग लंबित BUY/SELL अलर्ट, विशेष रूप से XZERO को इंगित करने के लिए किया जाता है।

इस रणनीति को किसी भी मुद्रा जोड़ी और अधिकांश चार्ट समय सीमा पर काम करना चाहिए।

रणनीतिक सिद्धांत

इस रणनीति का मुख्य विचार तेजी से QQE संकेतक के दिशात्मक क्रॉसओवर का उपयोग ट्रेडिंग संकेतों के रूप में करना और प्रवृत्ति दिशा को पकड़ने के लिए चलती औसत के संयोजन के माध्यम से शोर ट्रेडिंग संकेतों को फ़िल्टर करना है।

विशेष रूप से, रणनीति निम्नलिखित संकेतकों और संकेतों का उपयोग करती हैः

त्वरित QQE संकेतक: यह एक आरएसआई आधारित संकेतक है जिसमें इसे अधिक संवेदनशील और तेज़ बनाने के लिए अतिरिक्त चिकनाई है। संकेतक में तीन पंक्तियाँ शामिल हैंः मध्य रेखा आरएसआई का घातीय चलती औसत है, ऊपरी रेखा मध्य रेखा + तेज एटीआर * एक कारक है, और निचली रेखा मध्य रेखा है - तेज एटीआर * एक कारक है। जब आरएसआई ऊपरी रेखा से ऊपर जाता है, तो यह एक बिक्री संकेत है। जब आरएसआई निचली रेखा से नीचे जाता है, तो यह एक खरीद संकेत है।

शून्य रेखा पार: यह संकेत उत्पन्न करता है जब आरएसआई की मध्य रेखा शून्य रेखा को पार करती है। ऊपर की ओर क्रॉसओवर खरीद संकेत है और नीचे की ओर क्रॉसओवर बिक्री संकेत है। ये संकेत रुझान परिवर्तनों का अग्रदूत इंगित करते हैं।

चैनल ब्रेकआउट: यह संकेत उत्पन्न करता है जब आरएसआई की मध्य रेखा निर्धारित सीमा चैनल में प्रवेश करती है। ऊपरी चैनल को तोड़ना बिक्री संकेत है और निचले चैनल को तोड़ना खरीद संकेत है। ये मजबूत प्रवृत्ति संकेत हैं।

चलती औसत संयोजन: तेज (8 अवधि), मध्यम (20 अवधि) और धीमी (50 अवधि) चलती औसत का संयोजन करें। जब तीन रेखाओं को इस प्रकार व्यवस्थित किया जाता हैः तेज > मध्यम > धीमा, यह एक ऊपर की प्रवृत्ति है। जब तेजी से < मध्यम < धीमा, यह एक नीचे की प्रवृत्ति है। समग्र प्रवृत्ति की दिशा निर्धारित करने के लिए संयोजन का उपयोग किया जाता है।

रुझान दिशा फ़िल्टर: एक खरीद संकेत तभी उत्पन्न होता है जब बंद मूल्य धीमी गति से चलती औसत से ऊपर हो और मध्यम गतिशील औसत (20 अवधि) ऊपर की ओर हो (अवधि की उच्चतम कीमत > सबसे कम मूल्य) । एक बिक्री संकेत तभी उत्पन्न होता है जब बंद मूल्य धीमी गति से चलती औसत से नीचे हो और मध्यम गतिशील औसत (20 अवधि) नीचे की ओर हो। इससे कुछ उलट नकली संकेत फ़िल्टर हो सकते हैं।

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

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

रणनीति के फायदे

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

रणनीति के जोखिम

इस रणनीति के साथ कुछ संभावित जोखिम भी हैंः

  • तेज संकेतकों में झूठे संकेत उत्पन्न होते हैं जिन्हें चलती औसत द्वारा पूरी तरह से फ़िल्टर नहीं किया जा सकता है, गलत दिशा का पता लगाने का जोखिम मौजूद है
  • जब बड़े चक्र के रुझान में उलटफेर होता है, तो रिवर्स ट्रेड सिग्नल बनते हैं जो जोखिम पैदा करते हैं।
  • धन प्रबंधन कारकों, अत्यधिक व्यापार और हानि के जोखिमों पर कोई विचार नहीं किया गया है
  • कोई स्टॉप लॉस नहीं है, घाटे के विस्तार का जोखिम बड़ा है
  • बैकटेस्ट डेटा फिटिंग जोखिम, वास्तविक प्रदर्शन अभी सत्यापित किया जाना बाकी है

प्रति-उपक्रमों और समाधानों में निम्नलिखित शामिल हैंः

  • चलती औसत मापदंडों को समायोजित करें, रुझानों को निर्धारित करने के लिए अधिक चक्र लंबाई का उपयोग करें
  • कॉम्बो फ़िल्टरिंग के लिए एमएसीडी, पूर्वाग्रह आदि जैसे अन्य संकेतक जोड़ें
  • एकल व्यापार हानि के आकार को नियंत्रित करने के लिए स्टॉप लॉस रणनीतियाँ जोड़ें
  • वास्तविक धन परीक्षण, मापदंडों का अनुकूलन

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

इस रणनीति को और अधिक अनुकूलित करने की गुंजाइश हैः

  1. इष्टतम पैरामीटर संयोजन खोजने के लिए QQE संकेतक के तेज और धीमी लाइन मापदंडों का अनुकूलन करें
  2. इष्टतम फ़िल्टरिंग प्रदर्शन खोजने के लिए अधिक चलती औसत कॉम्बो का परीक्षण करें
  3. सहायक संकेत फ़िल्टरिंग के लिए MACD जैसे अन्य संकेतक जोड़ें
  4. स्थिति आकार अनुकूलित करने के लिए धन प्रबंधन रणनीतियों को लागू करें
  5. प्रति ट्रेड डाउनसाइड जोखिम को नियंत्रित करने के लिए स्टॉप लॉस रणनीति सेट करें
  6. विभिन्न उत्पादों के आधार पर मापदंडों का अनुकूलन करें
  7. अल्पकालिक उलटफेर से गुमराह होने से बचने के लिए और भी अधिक समय सीमा पर प्रवृत्ति निर्धारित करें

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

निष्कर्ष

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

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


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

//@version=2
//
// Title:   [STRATEGY][UL]QQE Cross v1.1
// Author:  JustUncleL
// Date:    22-Oct-2016
// Version: v1.1
//
// Description:
//  A trend following trading Strategy that uses fast QQE crosses with Moving Averages
//  for trend direction filtering. QQE or Qualitative Quantitative Estimation is based 
//  on the relative strength index, but uses a smoothing technique as an additional 
//  transformation. Three crosses can be selected (all selected by default): 
//    - RSI signal crossing ZERO (XZERO)
//    - RSI signal crossing Fast RSIatr line (XQQE)
//    - RSI signal exiting the RSI Threshhold Channel (BUY/SELL)
//  The (BUY/SELL) alerts can be optionally filtered by the Moving averages:
//    - For BUY alert the Close must be above the fast MA and 
//        fast MA (EMA8) > medium MA (EMA20) > slow MA (SMA50).
//    - For SELL alert the Close must be below the fast MA and
//        fast MA (EMA8) < medium MA (EMA20) < slow MA (SMA50).
//  and/or directional filter:
//    - For BUY alert the Close must be above the slow MA (SMA50) and the
//      directional MA (EMA20) must be green.
//    - For SELL alert the Close must be below the slow MA (SMA50) and the
//      directional MA (EMA20) must be red.
//. The XZERO and XQQE are not included in the filtering, they are used to indicate
//  pending BUY/SELL alerts, particularly the XZERO. 
//
//  This Strategy should work on any currency pair and most chart timeframes.
//  *** USE AT YOUR OWN RISK ***
//  
// 
//
// Mofidifications:
//  1.1 - Added Target Profit option, cleaned up the risk management code.
//        Changed Trade Close to EMA20 direction change instead of opposite BUY/SELL
//        signal, which will be earlier, this means stop loss setting should not be
//        required when an AutoTrader is available.
//        Modified code to prevent potential repaint issues.
//  1.0 - original
//
// References:
//  Some Code borrowed from:
//  - "Scalp Jockey - MTF MA Cross Visual Strategizer by JayRogers"
//  - "QQE MT4 by glaz"
//  - "Strategy Code Example by JayRogers"  
//  Inspiration from:
//  - http://www.forexstrategiesresources.com/binary-options-strategies-ii/189-aurora-binary-trading/
//  - http://www.forexstrategiesresources.com/metatrader-4-trading-systems-v/652-qqe-smoothed-trading/
//  - http://dewinforex.com/forex-indicators/qqe-indicator-not-quite-grail-but-accurately-defines-trend-and-flat.html
//

strategy(title='[STRATEGY][UL]QQE Cross v1.1', pyramiding=0, overlay=true )


// - INPUTS START
// Fast MA - type, source, length
type1   = input(defval="EMA", title="Fast MA Type: SMA, EMA, WMA, VWMA, SMMA, DEMA, TEMA, HullMA, ZEMA ( case sensitive )")
len1    = input(defval=8, title="Fast - Length", minval=1)
// Medium Fast MA - type, source, length
type2   = input(defval="EMA", title="Medium Fast MA Type: SMA, EMA, WMA, VWMA, SMMA, DEMA, TEMA, HullMA, ZEMA ( case sensitive )")
len2    = input(defval=20, title="Medium Fast - Length", minval=1)
// Slow MA - type, source, length
type3   = input(defval="SMA", title="Slow MA Type: SMA, EMA, WMA, VWMA, SMMA, DEMA, TEMA, HullMA, LSMA, ZEMA ( case sensitive )")
len3    = input(defval=50, title="Slow Length", minval=1)
//
// QQE rsi Length, Smoothing, fast ATR factor, source
RSILen  = input(6,title='RSI Length')
SF      = input(3,title='RSI Smoothing Factor')
QQE     = input(2.618,title='Fast QQE Factor')
threshhold = input(10, title="RSI Threshhold")
//
sQQEx   = input(false,title="Show QQE Signal crosses")
sQQEz   = input(false,title="Show QQE Zero crosses")
//
filter  = input(false,title="Use Moving Average Filter")
dfilter = input(true, title="Use Trend Directional Filter" )
RSIsrc  = input(close,title="Source")
srcclose= RSIsrc

// - INPUTS END

// - FUNCTIONS

// Returns MA input selection variant, default to SMA if blank or typo.
variant(type, src, len) =>
    v1 = sma(src, len)                                                  // Simple
    v2 = ema(src, len)                                                  // Exponential
    v3 = wma(src, len)                                                  // Weighted
    v4 = vwma(src, len)                                                 // Volume Weighted
    v5 = na(v5[1]) ? sma(src, len) : (v5[1] * (len - 1) + src) / len    // Smoothed
    v6 = 2 * v2 - ema(v2, len)                                          // Double Exponential
    v7 = 3 * (v2 - ema(v2, len)) + ema(ema(v2, len), len)               // Triple Exponential
    v8 = wma(2 * wma(src, len / 2) - wma(src, len), round(sqrt(len)))   // Hull
    ema1 = ema(src, len)
    ema2 = ema(ema1, len)
    v10 = ema1+(ema1-ema2)                                              // Zero Lag Exponential
    // return variant, defaults to SMA if input invalid.
    type=="EMA"?v2 : type=="WMA"?v3 : type=="VWMA"?v4 : type=="SMMA"?v5 : type=="DEMA"?v6 : type=="TEMA"?v7 : type=="HullMA"?v8 : type=="ZEMA"?v10 : v1

// - FUNCTIONS END

// - Fast ATR QQE
//
Wilders_Period = RSILen * 2 - 1
//
Rsi = rsi(RSIsrc,RSILen)
RSIndex = ema(Rsi, SF)
AtrRsi = abs(RSIndex[1] - RSIndex)
MaAtrRsi = ema(AtrRsi, Wilders_Period)
DeltaFastAtrRsi = ema(MaAtrRsi,Wilders_Period) * QQE
//
newshortband=  RSIndex + DeltaFastAtrRsi
newlongband= RSIndex - DeltaFastAtrRsi
longband=RSIndex[1] > longband[1] and RSIndex > longband[1] ? max(longband[1],newlongband) : newlongband
shortband=RSIndex[1] < shortband[1] and  RSIndex < shortband[1] ? min(shortband[1],newshortband) : newshortband
trend=cross(RSIndex, shortband[1])? 1 : cross(longband[1], RSIndex) ? -1 : nz(trend[1],1)
FastAtrRsiTL = trend==1 ? longband : shortband


// - SERIES VARIABLES
// MA's
ma_fast    = variant(type1, srcclose, len1)
ma_medium  = variant(type2, srcclose, len2)
ma_slow    = variant(type3, srcclose, len3)
// Get Direction From Medium Moving Average
direction = rising(ma_medium,3) ? 1 : falling(ma_medium,3) ? -1 : 0
//
// Find all the QQE Crosses
QQExshort = sQQEx and crossover(FastAtrRsiTL, RSIndex)
QQExlong  = sQQEx and crossunder(FastAtrRsiTL, RSIndex)
// Zero cross
QQEzlong = sQQEz and crossover(RSIndex,50)
QQEzshort  = sQQEz and crossunder(RSIndex,50)
//  
// Thresh Hold channel Crosses give the BUY/SELL alerts.
QQEclong = RSIndex>(50+threshhold) ? na(QQEclong[1]) ? 1 : QQEclong[1]+1 : 0
QQEcshort = RSIndex<(50-threshhold) ? na(QQEcshort[1]) ? 1 : QQEcshort[1]+1 : 0

//
// Check Filtering.
QQEflong = (not filter or (srcclose>ma_fast and ma_medium>ma_slow and ma_fast>ma_medium)) and 
  (not dfilter or (direction>0 and srcclose>ma_slow))
QQEfshort = (not filter or (srcclose<ma_fast and ma_medium<ma_slow and ma_fast<ma_medium)) and
  (not dfilter or (direction<0 and srcclose<ma_slow))
//
// Get final BUY / SELL alert determination
buy = QQEclong>0 and QQEflong ? na(buy[1]) ? 1 : buy[1]+1 : 0
sell= QQEcshort>0 and QQEfshort ? na(sell[1]) ? 1 : sell[1]+1 : 0

// - SERIES VARIABLES END

// - PLOTTING
// Ma's
plot(ma_fast, title="MA Fast", color=olive, linewidth=2, transp=20)
plot(ma_medium, title="MA Medium Fast", color=direction<0?red:green, linewidth=3, transp=0)
plot(ma_slow, title="MA Slow", color=blue, linewidth=2, transp=20)
// QQE crosses
plotshape(QQExlong and buy!=1, title="QQE Cross Over", style=shape.triangleup, location=location.belowbar, text="XQQE", color=blue, transp=20, size=size.tiny)
plotshape(QQExshort and sell!=1, title="QQE Cross Under", style=shape.triangledown, location=location.abovebar, text="XQQE", color=black, transp=20, size=size.tiny)
// Signal crosses zero line
plotshape(QQEzlong and buy!=1 and not QQExlong, title="QQE Zero Cross Over", style=shape.triangleup, location=location.belowbar, text="XZERO", color=aqua, transp=20, size=size.tiny)
plotshape(QQEzshort and sell!=1 and not QQExshort, title="QQE Zero Cross Under", style=shape.triangledown, location=location.abovebar, text="XZERO", color=fuchsia, transp=20, size=size.tiny)

// - PLOTTING END

// Create alert for cross, shunt back 1 if source is not 'open', this should prevent repaint issue.
//shunt = RSIsrc == open ? 0 : 1
shunt = 0
c_alert = (buy[shunt]==1 or sell[shunt]==1)
//alertcondition(c_alert, title="QQECROSS Alert", message="QQECROSS Alert")
// show only when alert condition is met and bar closed.
plotshape(c_alert,title= "Alert Indicator Closed", location=location.bottom, color=sell[shunt]==1?red:green, transp=0, style=shape.circle)


//  Strategy: (Thanks to JayRogers)
// === STRATEGY RELATED INPUTS ===
//tradeInvert     = input(defval = false, title = "Invert Trade Direction?")
// the risk management inputs
inpTakeProfit   = input(defval = 0, title = "Take Profit Points", minval = 0)
inpStopLoss     = input(defval = 0, title = "Stop Loss Points", minval = 0)
inpTrailStop    = input(defval = 100, title = "Trailing Stop Loss Points", minval = 0)
inpTrailOffset  = input(defval = 0, title = "Trailing Stop Loss Offset Points", minval = 0)

// === RISK MANAGEMENT VALUE PREP ===
// if an input is less than 1, assuming not wanted so we assign 'na' value to disable it.
useTakeProfit   = inpTakeProfit  >= 1 ? inpTakeProfit  : na
useStopLoss     = inpStopLoss    >= 1 ? inpStopLoss    : na
useTrailStop    = inpTrailStop   >= 1 ? inpTrailStop   : na
useTrailOffset  = inpTrailOffset >= 1 ? inpTrailOffset : na

// === STRATEGY - LONG POSITION EXECUTION ===
strategy.entry(id = "Buy", long = true, when = buy[shunt]==1 )// use function or simple condition to decide when to get in
strategy.close(id = "Buy", when = direction[shunt]!=direction[shunt+1])// ...and when to get out

// === STRATEGY - SHORT POSITION EXECUTION ===
strategy.entry(id = "Sell", long = false, when = sell[shunt]==1)
strategy.close(id = "Sell", when = direction[shunt]!=direction[shunt+1])

// === STRATEGY RISK MANAGEMENT EXECUTION ===
// finally, make use of all the earlier values we got prepped
strategy.exit("Exit Buy", from_entry = "Buy", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)
strategy.exit("Exit Sell", from_entry = "Sell", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)

//eof

अधिक