डबल आरएसआई मात्रात्मक व्यापार रणनीति


निर्माण तिथि: 2023-11-15 17:31:24 अंत में संशोधित करें: 2023-11-15 17:31:24
कॉपी: 0 क्लिक्स: 690
1
ध्यान केंद्रित करना
1617
समर्थक

डबल आरएसआई मात्रात्मक व्यापार रणनीति

अवलोकन

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

सिद्धांत विश्लेषण

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

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

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

श्रेष्ठता विश्लेषण

दोहरे आरएसआई की मात्रा की रणनीति के निम्नलिखित फायदे हैंः

  1. दोहरे समय अवधि आरएसआई संकेतक अधिक सटीक रूप से एक बहुभाषी संकेत का आकलन कर सकते हैं। लंबी और छोटी अवधि के आरएसआई क्रॉस-कॉम्बिनेशन, कुछ झूठे संकेतों को फ़िल्टर कर सकते हैं और संकेत की गुणवत्ता में सुधार कर सकते हैं।

  2. सम-रेखा प्रणाली एक बड़ी प्रवृत्ति की दिशा का आकलन करने में मदद करती है, जो प्रवृत्ति के खिलाफ व्यापार करने से बचती है, जो अधिकांश शोर ट्रेडों को फ़िल्टर कर सकती है और जीत की दर को बढ़ा सकती है।

  3. लचीला स्टॉप लॉस तंत्र, जो विभिन्न स्टॉप सेटिंग्स के माध्यम से उच्च रिटर्न प्राप्त कर सकता है, या जोखिम को नियंत्रित करने के लिए स्टॉप लॉस कर सकता है।

  4. रणनीतिक व्यापार तर्क सरल और स्पष्ट है, समझने और अनुकूलित करने में आसान है, जो कि मात्रात्मक व्यापारियों के लिए उपयुक्त है।

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

हालांकि द्विआधारी आरएसआई के कुछ फायदे हैं, लेकिन इसके साथ निम्नलिखित जोखिम भी हैं:

  1. RSI अपने आप में अस्थिरता और रुझान में बदलाव के लिए प्रभावी नहीं है, और रणनीति इन बाजारों में व्यापार करने के लिए खराब हो सकती है।

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

  3. स्टॉप लॉस को गलत तरीके से सेट करने से स्टॉप लॉस बहुत चौड़ा हो सकता है या स्टॉप लॉस बहुत छोटा हो सकता है, जिससे रणनीति की प्रभावशीलता कम हो जाती है।

  4. बड़े पैमाने पर डीकोडिंग से नुकसान बढ़ सकता है और स्थिति को नियंत्रित करने की आवश्यकता है।

उपरोक्त जोखिमों के लिए, आरएसआई मापदंडों को समायोजित करके जोखिम को कम किया जा सकता है, अधिक उन्नत रुझान और उलट संकेतकों को पेश किया जा सकता है, स्टॉप-स्टॉप लॉजिक को अनुकूलित किया जा सकता है, और स्थिति को नियंत्रित किया जा सकता है।

अनुकूलन दिशा

दोहरे आरएसआई को निम्न दिशाओं में अनुकूलित किया जा सकता हैः

  1. विभिन्न पैरामीटर संयोजनों को आज़माएं, आरएसआई चक्र पैरामीटर को अनुकूलित करें, और सबसे अच्छा दीर्घकालिक आरएसआई सूचक संयोजन ढूंढें।

  2. विभिन्न औसत-रेखा संकेतकों का परीक्षण करें और MACD जैसे संकेतकों को प्रवृत्ति का आकलन करने और पलटने की संभावनाओं को पेश करें।

  3. स्टॉप लॉस रणनीति को अनुकूलित करें, स्टॉप लॉस को ट्रैक करने या स्टॉप लॉस को स्थानांतरित करने के लिए स्टॉप लॉस को अधिक लचीला बनाएं।

  4. स्थिति नियंत्रण मॉड्यूल को जोड़ना, बड़े आवधिक रुझानों के विभिन्न चरणों में नियंत्रण करने के लिए अधिक शून्य स्थिति बनाना।

  5. एंट्री और एग्जिट की सटीकता बढ़ाने के लिए मशीन लर्निंग मॉडल को जोड़ना।

  6. रिटर्न्सिंग और ऑप्टिमाइज़ेशन के लिए, सबसे अच्छा व्यापार प्रकार और समय चक्र ढूंढें।

संक्षेप

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

रणनीति स्रोत कोड
/*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")