एमएसीडी और आरएसआई को एकीकृत करने वाली अल्पकालिक ट्रेडिंग रणनीति

लेखक:चाओझांग, दिनांकः 2023-09-13 14:59:32
टैगः

इस रणनीति को अल्पकालिक ट्रेडिंग रणनीति एकीकृत एमएसीडी और आरएसआई कहा जाता है। यह लाभ के लिए कम समय सीमा पर बाजार में उतार-चढ़ाव को पकड़ने के लिए एमएसीडी और आरएसआई संकेतकों के संकेतों को जोड़ती है।

एमएसीडी का अर्थ है मूविंग एवरेज कन्वर्जेंस डिवर्जेंस. इसमें फास्ट लाइन, स्लो लाइन और हिस्टोग्राम शामिल हैं। जब फास्ट लाइन स्लो लाइन के ऊपर से गुजरती है, तो यह अल्पकालिक मूल्य गति को मजबूत करने का संकेत देती है और खरीद संकेत उत्पन्न करती है। जब फास्ट लाइन स्लो लाइन के नीचे से गुजरती है, तो यह कमजोर गति का संकेत देती है और बिक्री संकेत उत्पन्न करती है।

RSI का अर्थ Relative Strength Index होता है। यह कीमतों के ओवरबॉट और ओवरसोल्ड स्थितियों को दर्शाता है। RSI 20 से नीचे ओवरसोल्ड है, और 80 से ऊपर ओवरबोल्ड है। ओवरबोल्ड जोन संभावित मूल्य गिरावट की चेतावनी हैं, जबकि ओवरसोल्ड जोन संभावित उछाल की चेतावनी देते हैं।

इस रणनीति के व्यापार संकेत दो पहलुओं से आते हैंः

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

दूसरा, आरएसआई ओवरबॉट/ओवरसोल्ड स्तर। आरएसआई को मिलाकर एमएसीडी से कुछ झूठे संकेतों को फ़िल्टर करने में मदद मिलती है। आरएसआई कम होने पर ही खरीदना और आरएसआई अधिक होने पर ही बेचना सटीकता में सुधार करता है।

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

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


/*backtest
start: 2022-09-06 00:00:00
end: 2023-09-12 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Uraynium V3", overlay=false, pyramiding = 0, calc_on_every_tick=true, precision=1, currency="USD", default_qty_value=10, default_qty_type=strategy.cash,initial_capital=100,commission_type=strategy.commission.percent,commission_value=0.1) 
// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2019, title = "From Year", minval = 2017)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 2020, title = "To Year", minval = 2017)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
inTimeframe()  => true

overSold      = input( 20 , minval = 1, title = "RSI Oversold")
overBought    = input( 80 , minval = 1, title = "RSI Overbought")
rsiLength     = input(14, minval = 1, title = "RSI Length")
fastLength    = input(12, minval = 1, title = "MACD fast")
slowlength    = input(26, minval = 1, title = "MACD slow")
MACDLength    = input( 9, minval = 1, title = "MACD length")
stopLoss      = input(   10, minval = 1, title = "Stop Loss (price %)")
takeProfit    = input(   50, minval = 1, title = "Take Profit (price %)")
triggerPosLvl = input(    2, minval = 1 ,title ="Take Position Threshold", type=input.float)
src = close

// === CALC ===

stopLossValue        = close*(stopLoss/100)/syminfo.mintick
takeProfitValue      = close*(takeProfit/100)/syminfo.mintick

vrsi = rsi(src, rsiLength)
//avgRSI = vrsi*0.5 + vrsi[1]*0.25 + vrsi[2]*0.125 + vrsi[3]*0.0625
avgRSI = (4*vrsi + 3*vrsi + 2*vrsi[2] + vrsi[3])/10
[macdLine, signalLine, histLine] = macd(src, fastLength, slowlength, MACDLength)


MACDdelta         = signalLine - macdLine
isMACDRunLong     = signalLine > macdLine
isMACDRunShort    = macdLine < signalLine
isMACDSwitchLong  = crossover(MACDdelta, 0)
isMACDSwitchShort = crossunder(MACDdelta, 0)
isMACDCross       = crossover(MACDdelta, 0) or crossunder(MACDdelta, 0)

buySignal =  (histLine-histLine[1]) + (avgRSI - avgRSI[1])

// === ACTION ===
isPosLong    = strategy.position_size > 0
isPosShort   = strategy.position_size < 0
isNoMarginPos= strategy.position_size == 0
entryLong  = (isNoMarginPos or isPosShort) and ( buySignal >  triggerPosLvl )
entryShort = (isNoMarginPos or isPosLong ) and ( buySignal < -triggerPosLvl ) 

if inTimeframe()
    strategy.entry("Long" , strategy.long,  comment="Entry Long",  when=entryLong )
    strategy.entry("Short", strategy.short, comment="Entry Short", when=entryShort)
    strategy.entry("Long" , strategy.long,  comment="Switch Long", when=entryLong)
    strategy.entry("Short", strategy.short, comment="Switch Short",when=entryShort)
    strategy.exit("Stop (long SL/TP)",  loss=stopLossValue, profit=takeProfitValue, when=entryLong )  
    strategy.exit("Stop (short SL/TP)", loss=stopLossValue, profit=takeProfitValue, when=entryShort)  
    strategy.close("Long" , when=entryShort)
    strategy.close("Short", when=entryLong)    

// === DRAW ===
posColor = isNoMarginPos ?  color.black : isPosLong ? color.green : color.red
plot(100, color=posColor,style=plot.style_area, transp=90, histbase=0)
        
plot(buySignal+overBought, color=color.green)
plot(50+macdLine/4, color=color.yellow)
plot(50+signalLine/4, color=color.orange)
histColor = histLine[1]-histLine > 0 ? color.red : color.green
plot(overSold+histLine/2, color=histColor, style=plot.style_histogram, histbase=overSold, transp=50, linewidth=2)

rsicolor = avgRSI>overBought ? color.red : avgRSI<overSold ? color.green : color.blue
plot(avgRSI,color=rsicolor, linewidth=2)
//plot(vrsi,color=color.purple, linewidth=2)
hline(overBought, color=color.red)
hline(overSold, color=color.green)
hline(50, color=color.gray)


अधिक