यह एक दोहरी आरएसआई ट्रेंड फॉलोइंग रणनीति है जो लंबी और छोटी ट्रेडिंग संकेतों के लिए दो आरएसआई संकेतकों का उपयोग करती है, जो ट्रेंड की दिशा निर्धारित करने के लिए एक चलती औसत प्रणाली के साथ संयुक्त है। यह दोहरी आरएसआई एल्गोरिथम रणनीतियों की श्रेणी से संबंधित है। रणनीति पहले तेजी और मंदी संकेतों को निर्धारित करने के लिए आरएसआई संकेतकों का उपयोग करती है, फिर लंबी या छोटी ट्रेडों के लिए प्रवृत्ति की दिशा की पुष्टि करने के लिए चलती औसत का उपयोग करती है। यह एक विशिष्ट ट्रेंड फॉलोइंग रणनीति है।
दोहरी आरएसआई रणनीति मुख्य रूप से व्यापार संकेतों के लिए अलग-अलग समय सीमाओं के साथ दो आरएसआई संकेतकों का उपयोग करती है। यह पहले दो आरएसआई मापदंडों को सेट करता है, एक लंबी अवधि आरएसआई मुख्य संकेतक के रूप में, और एक छोटी अवधि आरएसआई सहायक फिल्टर के रूप में। जब लंबी अवधि आरएसआई ओवरसोल्ड लाइन से नीचे टूट जाता है, तो एक लंबा संकेत उत्पन्न होता है। जब छोटी अवधि आरएसआई ओवरबोल्ड लाइन से ऊपर टूट जाता है, तो एक छोटा संकेत उत्पन्न होता है। यह व्यापार के अवसरों के लिए दोहरी आरएसआई क्रॉसओवर प्रणाली बनाता है।
झूठे संकेतों को फ़िल्टर करने के लिए, रणनीति में प्रवृत्ति का पता लगाने के लिए एसएमए और ईएमए चलती औसत भी शामिल हैं। केवल जब छोटी अवधि एसएमए लंबी अवधि ईएमए से ऊपर जाती है, तो लंबे आरएसआई संकेत पर विचार किया जाता है। और केवल जब छोटी एसएमए लंबी ईएमए से नीचे जाती है, तो छोटे आरएसआई संकेत पर विचार किया जाता है। यह सुनिश्चित करता है कि आरएसआई संकेत प्रवृत्ति की दिशा के साथ संरेखित हों और प्रवृत्ति के खिलाफ व्यापार से बचें।
इसके अतिरिक्त, रणनीति स्टॉप लॉस और ले लाभ तर्क भी सेट करती है। पदों को खोलने के बाद, एक स्टॉप लॉस स्तर के साथ अलग-अलग आकार के दो ले लाभ ऑर्डर रखे जाते हैं।
दोहरी आरएसआई एल्गोरिथम रणनीति के निम्नलिखित फायदे हैंः
दोहरी समय सीमा आरएसआई संकेतक तेजी और मंदी संकेतों को अधिक सटीक रूप से निर्धारित कर सकते हैं। लंबी और छोटी अवधि आरएसआई का संयोजन कुछ झूठे संकेतों को फ़िल्टर कर सकता है और संकेत की गुणवत्ता में सुधार कर सकता है।
चलती औसत प्रणाली प्रमुख प्रवृत्ति दिशा निर्धारित करने में मदद करती है, प्रवृत्ति के खिलाफ व्यापार से बचती है, और अधिकांश शोर ट्रेडों को फ़िल्टर कर सकती है, जीत दर में सुधार करती है।
लचीला स्टॉप लॉस और टेक प्रॉफिट तंत्र विभिन्न टेक प्रॉफिट सेटिंग्स के माध्यम से उच्च रिटर्न की अनुमति देता है, और स्टॉप लॉस के माध्यम से जोखिम का प्रबंधन करता है।
व्यापारिक तर्क सरल और स्पष्ट है, समझने और अनुकूलित करने में आसान है। यह एल्गोरिथम व्यापारियों के लिए सीखने के लिए उपयुक्त है।
लाभों के बावजूद, दोहरी आरएसआई रणनीति में निम्नलिखित जोखिम भी हैं:
आरएसआई स्वयं बाजारों और रुझानों के उलटफेर में सीमित प्रभावशीलता रखता है।
यद्यपि चलती औसत छोटे शोर को फ़िल्टर करती हैं, लेकिन वे मध्यवर्ती चक्र में रुझान परिवर्तनों का पता लगाने में कम प्रभावी हैं, और रुझान मोड़ बिंदुओं को याद कर सकते हैं।
गलत स्टॉप लॉस और टेक प्रॉफिट सेटिंग्स के परिणामस्वरूप स्टॉप बहुत व्यापक या लाभ बहुत कम हो सकते हैं, जिससे रणनीति प्रदर्शन बिगड़ सकता है।
बड़ी लंबी/छोटी पोजीशन के कारण बड़े नुकसान हो सकते हैं। पोजीशन साइजिंग को नियंत्रित करने की आवश्यकता है।
इन जोखिमों से निपटने के लिए, मापदंडों को समायोजित किया जा सकता है, अधिक उन्नत प्रवृत्ति और उलट संकेतकों को पेश किया जा सकता है, स्टॉप और लाभ तर्क को अनुकूलित किया जा सकता है, और जोखिमों को कम करने के लिए स्थिति आकार को नियंत्रित किया जा सकता है।
दोहरी आरएसआई रणनीति को निम्नलिखित पहलुओं में और अनुकूलित किया जा सकता हैः
अधिकतम लंबी और छोटी आरएसआई अवधि खोजने के लिए विभिन्न पैरामीटर संयोजनों का परीक्षण करें।
बेहतर रुझान और उल्टा विश्लेषण के लिए एमएसीडी जैसे अन्य संकेतक पेश करें।
स्टॉप लॉस और ले लाभ रणनीतियों का अनुकूलन करें, अधिक लचीलापन के लिए ट्रेलिंग स्टॉप या ले लाभ को स्थानांतरित करें।
विभिन्न रुझान चक्र चरणों में लंबी/छोटी स्थितियों को समायोजित करने के लिए स्थिति आकार नियंत्रण मॉड्यूल जोड़ें।
प्रवेश और निकास की सटीकता में सुधार के लिए मशीन लर्निंग मॉडल को शामिल करें।
अनुकूलन के लिए विभिन्न उत्पादों और समय सीमाओं पर बैकटेस्ट।
संक्षेप में, दोहरी आरएसआई रणनीति एक विशिष्ट प्रवृत्ति के बाद की रणनीति है। दोहरी आरएसआई संकेतों और चलती औसत शोर फ़िल्टरिंग को जोड़ने का इसका विचार बहुत क्लासिक और व्यावहारिक है। हालांकि सुधार के लिए क्षेत्र हैं, समग्र तर्क स्पष्ट और समझने और अनुकूलित करने में आसान है। यह एल्गोरिदमिक ट्रेडिंग के शुरुआती लोगों के लिए सीखने और अभ्यास करने के लिए एक शानदार रणनीति है।
/*backtest start: 2023-11-07 00:00:00 end: 2023-11-14 00:00:00 period: 1m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("Growth Producer", overlay=true, initial_capital = 1000, currency = "USD", pyramiding = 2, commission_type=strategy.commission.percent, commission_value=0.07, default_qty_type = strategy.percent_of_equity, default_qty_value = 100) //Functions Atr(p) => atr = 0. Tr = max(high - low, max(abs(high - close[1]), abs(low - close[1]))) atr := nz(atr[1] + (Tr - atr[1])/p,Tr) /// TREND ribbon_period = input(19, "Period", step=1) leadLine1 = ema(close, ribbon_period) leadLine2 = sma(close, ribbon_period) p1 = plot(leadLine1, color= #53b987, title="EMA", transp = 50, linewidth = 1) p2 = plot(leadLine2, color= #eb4d5c, title="SMA", transp = 50, linewidth = 1) fill(p1, p2, transp = 60, color = leadLine1 > leadLine2 ? #53b987 : #eb4d5c) // Relative volatility index length = input(120,"RVI period", minval=1), src = close len = 14 stddev = stdev(src, length) upper = ema(change(src) <= 0 ? 0 : stddev, len) lower = ema(change(src) > 0 ? 0 : stddev, len) rvi = upper / (upper + lower) * 100 benchmark = input(35, "RVI benchmark", minval=10, maxval=100, step=0.1) // Plot RVI // h0 = hline(80, "Upper Band", color=#C0C0C0) // h1 = hline(20, "Lower Band", color=#C0C0C0) // fill(h0, h1, color=#996A15, title="Background") // offset = input(0, "Offset", type = input.integer, minval = -500, maxval = 500) // plot(rvi, title="RVI", color=#008000, offset = offset) /// MFI input mfi_source = hlc3 mfi_length = input(19, "MFI Length", minval=1) mfi_lower = input(15, "MFI Lower level", minval=0, maxval=50) mfi_upper = input(90, "MFI Higher level", minval=50, maxval=100) // MFI upper_s = sum(volume * (change(mfi_source) <= 0 ? 0 : mfi_source), mfi_length) lower_s = sum(volume * (change(mfi_source) >= 0 ? 0 : mfi_source), mfi_length) mf = rsi(upper_s, lower_s) // mfp = plot(mf, color=color.new(color.gray,0), linewidth=1) // top = hline(mfi_upper, color=color.new(color.gray, 100), linewidth=1, editable=false) // bottom = hline(mfi_lower, color=color.new(color.gray,100), linewidth=1, editable=false) // hline(0, color=color.new(color.black,100), editable=false) // hline(100, color=color.new(color.black,100), editable=false) // Breaches // b_color = (mf > mfi_upper) ? color.new(color.red,70) : (mf < mfi_lower) ? color.new(color.green,60) : na // bgcolor(HighlightBreaches ? b_color : na) // fill(top, bottom, color=color.gray, transp=75) // Initial inputs Act_RSI_VWAP_long = input(true, "RSI VOLUME WEIGHTED AVERAGE PRICE LONG") RSI_VWAP_length_long = input(16, "RSI-VWAP LENGTH LONG") RSI_VWAP_overSold_long = input(13, "RSI-VWAP OVERSOLD LONG", type=input.float) RSI_VWAP_overBought_long = input(68, "RSI-VWAP OVERBOUGHT LONG", type=input.float) Act_RSI_VWAP_short = input(true, "RSI VOLUME WEIGHTED AVERAGE PRICE SHORT") RSI_VWAP_length_short = input(14, "RSI-VWAP LENGTH SHORT") RSI_VWAP_overSold_short = input(7, "RSI-VWAP OVERSOLD SHORT", type=input.float) RSI_VWAP_overBought_short = input(68, "RSI-VWAP OVERBOUGHT SHORT", type=input.float) // RSI with VWAP as source RSI_VWAP_long = rsi(vwap(close), RSI_VWAP_length_long) RSI_VWAP_short = rsi(vwap(close), RSI_VWAP_length_short) // Plot Them Separately. // Plotting LONG, Put overlay=false // r=plot(RSI_VWAP_long, color = RSI_VWAP_long > RSI_VWAP_overBought_long ? color.red : RSI_VWAP_lnog < RSI_VWAP_overSold_long ? color.lime : color.blue, title="rsi", linewidth=2, style=plot.style_line) // h1=plot(RSI_VWAP_overBought_long, color = color.gray, style=plot.style_stepline) // h2=plot(RSI_VWAP_overSold_long, color = color.gray, style=plot.style_stepline) // fill(r,h1, color = RSI_VWAP_long > RSI_VWAP_overBought_long ? color.red : na, transp = 60) // fill(r,h2, color = RSI_VWAP_long < RSI_VWAP_overSold_long ? color.lime : na, transp = 60) // Plotting SHORT, Put overlay=false // r=plot(RSI_VWAP_short, color = RSI_VWAP_short > RSI_VWAP_overBought_short ? color.red : RSI_VWAP_short < RSI_VWAP_overSold_short ? color.lime : color.blue, title="rsi", linewidth=2, style=plot.style_line) // h1=plot(RSI_VWAP_overBought_short, color = color.gray, style=plot.style_stepline) // h2=plot(RSI_VWAP_overSold_short, color = color.gray, style=plot.style_stepline) // fill(r,h1, color = RSI_VWAP_short > RSI_VWAP_overBought_short ? color.red : na, transp = 60) // fill(r,h2, color = RSI_VWAP_short < RSI_VWAP_overSold_short ? color.lime : na, transp = 60) /////// STRATEGY Take Profit / Stop Loss //////// ////// LONG ////// long_tp1_inp = input(3.3, title='Long Take Profit 1 %', step=0.1)/100 long_tp1_qty = input(15, title="Long Take Profit 1 Qty", step=1) long_tp2_inp = input(12, title='Long Take Profit 2%', step=0.1)/100 long_tp2_qty = input(100, title="Long Take Profit 2 Qty", step=1) long_sl_inp = input(3.3, title='Long Stop Loss %', step=0.1)/100 long_take_level_1 = strategy.position_avg_price * (1 + long_tp1_inp) long_take_level_2 = strategy.position_avg_price * (1 + long_tp2_inp) long_stop_level = strategy.position_avg_price * (1 - long_sl_inp) ////// SHORT ////// short_tp1_inp = input(3.2, title='Short Take Profit 1 %', step=0.1)/100 short_tp1_qty = input(20, title="Short Take Profit 1 Qty", step=1) short_tp2_inp = input(5.5, title='Short Take Profit 2%', step=0.1)/100 short_tp2_qty = input(100, title="Short Take Profit 2 Qty", step=1) short_sl_inp = input(3.2, title='Short Stop Loss %', step=0.1)/100 short_take_level_1 = strategy.position_avg_price * (1 - short_tp1_inp) short_take_level_2 = strategy.position_avg_price * (1 - short_tp2_inp) short_stop_level = strategy.position_avg_price * (1 + short_sl_inp) ///Strategy_Conditions /// LONG /// entry_long =(crossover(RSI_VWAP_long, RSI_VWAP_overSold_long) and leadLine2<leadLine1) or (crossunder(mf,mfi_lower) and leadLine2<leadLine1) entry_price_long=valuewhen(entry_long,close,0) exit_long =crossunder(RSI_VWAP_long, RSI_VWAP_overBought_long) /// SHORT /// entry_short =crossunder(RSI_VWAP_short, RSI_VWAP_overBought_short) and leadLine2>leadLine1 or (crossover(mf,mfi_upper) and leadLine2>leadLine1) entry_price_short=valuewhen(entry_short,close,0) exit_short =crossover(RSI_VWAP_short, RSI_VWAP_overSold_short) ////// BACKTEST PERIOD /////// testStartYear = input(2019, "Backtest Start Year") testStartMonth = input(1, "Backtest Start Month") testStartDay = input(1, "Backtest Start Day") testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0) testStopYear = input(2020, "Backtest Stop Year") testStopMonth = input(12, "Backtest Stop Month") testStopDay = input(31, "Backtest Stop Day") testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0) testPeriod() => true if testPeriod() if strategy.position_size == 0 or strategy.position_size > 0 and rvi>benchmark strategy.entry("long", true, when = entry_long, comment="Insert Enter Long Comment") strategy.exit("TP1","long", qty_percent=long_tp1_qty, limit=long_take_level_1, stop=long_stop_level) strategy.exit("TP2","long", qty_percent=long_tp2_qty, limit=long_take_level_2, stop=long_stop_level) strategy.close("long", when=exit_long, comment = "Insert Exit Long Comment") if strategy.position_size == 0 or strategy.position_size < 0 and rvi>benchmark strategy.entry("short", false, when = entry_short, comment="Insert Enter Short Comment") strategy.exit("TP1","short", qty_percent=short_tp1_qty, limit=short_take_level_1, stop=short_stop_level) strategy.exit("TP2","short", qty_percent=short_tp2_qty, limit=short_take_level_2, stop=short_stop_level) strategy.close("short", when=exit_short, comment = "Insert Exit Short Comment") // LONG POSITION plot(strategy.position_size > 0 ? long_take_level_1 : na, style=plot.style_linebr, color=color.green, linewidth=1, title="1st Long Take Profit") plot(strategy.position_size > 0 ? long_take_level_2 : na, style=plot.style_linebr, color=color.green, linewidth=1, title="2nd Long Take Profit") plot(strategy.position_size > 0 ? long_stop_level : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Long Stop Loss") // SHORT POSITION plot(strategy.position_size < 0 ? short_take_level_1 : na, style=plot.style_linebr, color=color.green, linewidth=1, title="1st Short Take Profit") plot(strategy.position_size < 0 ? short_take_level_2 : na, style=plot.style_linebr, color=color.green, linewidth=1, title="2nd Short Take Profit") plot(strategy.position_size < 0 ? short_stop_level : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Long Stop Loss")