এমএসিডি এবং আরএসআইকে সংহত করে স্বল্পমেয়াদী ট্রেডিং কৌশল

লেখক:চাওঝাং, তারিখ: ২০২৩-০৯-১৩ 14:59:32
ট্যাগঃ

এই কৌশলটির নাম ম্যাকডি এবং আরএসআই একীভূতকারী স্বল্পমেয়াদী ট্রেডিং কৌশল। এটি মুনাফা অর্জনের জন্য সংক্ষিপ্ত সময়সীমার উপর বাজার ওঠানামা ক্যাপচার করার জন্য এমএসিডি এবং আরএসআই সূচকগুলির সংকেতগুলিকে একত্রিত করে।

এমএসিডি হ'ল মুভিং এভারেজ কনভার্জেন্স ডিভার্জেন্স। এটি দ্রুত লাইন, ধীর লাইন এবং হিস্টোগ্রাম নিয়ে গঠিত। যখন দ্রুত লাইন ধীর লাইনের উপরে অতিক্রম করে, এটি স্বল্পমেয়াদী মূল্য গতি বাড়ানোর সংকেত দেয় এবং একটি ক্রয় সংকেত উত্পন্ন করে। যখন দ্রুত লাইন ধীর লাইনের নীচে অতিক্রম করে, এটি দুর্বল গতির সংকেত দেয় এবং একটি বিক্রয় সংকেত উত্পন্ন করে।

আরএসআই এর আক্ষরিক অর্থ আপেক্ষিক শক্তি সূচক। এটি দামের অতিরিক্ত ক্রয় এবং অতিরিক্ত বিক্রয় অবস্থার প্রতিফলন করে। ২০ এর নীচে আরএসআই অতিরিক্ত বিক্রয়, এবং ৮০ এর উপরে অতিরিক্ত ক্রয়। অতিরিক্ত ক্রয় অঞ্চলগুলি সম্ভাব্য দামের পতনের সতর্কতা, যখন অতিরিক্ত বিক্রয় অঞ্চলগুলি সম্ভাব্য বাউন্স সম্পর্কে সতর্ক করে।

এই কৌশলটির বাণিজ্যিক সংকেত দুটি দিক থেকে আসেঃ

প্রথমত, এমএসিডি লাইন ক্রসওভার এবং হিস্টোগ্রাম পরিবর্তন। যখন হিস্টোগ্রাম নেতিবাচক থেকে ইতিবাচক পরিবর্তন হয়, তখন এটি স্বল্পমেয়াদে দামের গতি বাড়িয়ে দেখায়, কেনার সুযোগগুলি নির্দেশ করে। যখন হিস্টোগ্রাম ইতিবাচক থেকে নেতিবাচক পরিবর্তিত হয়, তখন এটি ম্লান গতি দেখায় এবং বিক্রয় প্রস্তাব করে।

দ্বিতীয়ত, আরএসআই অতিরিক্ত ক্রয় / অতিরিক্ত বিক্রয় স্তর। আরএসআই সংমিশ্রণটি এমএসিডি থেকে কিছু মিথ্যা সংকেত ফিল্টার করতে সহায়তা করে। কেবলমাত্র যখন আরএসআই কম হয় তখন কেনা এবং কেবলমাত্র যখন আরএসআই বেশি হয় তখন বিক্রি করা নির্ভুলতা উন্নত করে।

এই কৌশলটির সুবিধা হ'ল আরও নির্ভুল বাণিজ্য সংকেতগুলির জন্য দুটি সূচকের শক্তি একত্রিত করা এবং সংক্ষিপ্ত মেয়াদী ওঠানামা সংবেদনশীলভাবে ক্যাপচার করা। তবে ওভারট্রেডিং রোধ করতে এমএসিডি এবং আরএসআই পরামিতিগুলির অনুকূলিতকরণের প্রয়োজন। একক বাণিজ্য ক্ষতি নিয়ন্ত্রণের জন্য স্টপ লস স্তরগুলিও যুক্তিসঙ্গত হওয়া দরকার।

সংক্ষেপে, এই কৌশলটি স্বল্পমেয়াদী ট্রেডিংয়ের জন্য উপযুক্ত, স্বল্পমেয়াদী বিপরীতমুখী থেকে লাভের সুযোগগুলি ধরতে পারে। তবে সময়মতো পরামিতিগুলি সামঞ্জস্য করার জন্য সক্রিয় ঝুঁকি ব্যবস্থাপনা এবং ঘনিষ্ঠ বাজার পর্যবেক্ষণের প্রয়োজন।


/*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)


আরো