এই কৌশলটি MACD এবং RSI এর সংমিশ্রণের সংক্ষিপ্ত ট্রেডিং কৌশল নামে পরিচিত। এই কৌশলটি সংক্ষিপ্ত সময়ের মধ্যে বাজার পরিবর্তনের উপর ক্যাপচার করার জন্য MACD এবং RSI উভয় সূচকের সংকেত ব্যবহার করে।
MACD হল সূচকীয় মসৃণ চলমান গড়। এটি একটি দ্রুত লাইন, একটি ধীর লাইন এবং একটি স্তম্ভের পার্থক্যযুক্ত লাইন দিয়ে গঠিত। যখন দ্রুত লাইনটি ধীর লাইনটি অতিক্রম করে, স্বল্পমেয়াদী মূল্য পরিবর্তনের জন্য গতিশীল শক্তি বৃদ্ধি পায়, একটি কেনার সংকেত উত্পন্ন করে; যখন দ্রুত লাইনটি ধীর লাইনটি অতিক্রম করে, গতিশীল শক্তি হ্রাস পায়, বিক্রয় সংকেত উত্পন্ন করে।
আরএসআই একটি তুলনামূলকভাবে দুর্বল সূচক। এটি মূল্যের ওভারব্লড ওভারব্লডের চিত্রকে প্রতিফলিত করে। আরএসআই 20 এর নীচে ওভারব্লড এবং 80 এর উপরে ওভারব্লড। ওভারব্লড অঞ্চলটি দামের পতনের একটি সতর্কতা; ওভারব্লড অঞ্চলটি দামের বিপর্যয়ের একটি সতর্কতা।
এই কৌশলটির ট্রেডিং সিগন্যাল দুটি অংশ থেকে আসেঃ
প্রথমত, MACD দ্রুত এবং ধীর লাইন ক্রস এবং বিভাজক স্তম্ভ পরিবর্তন। যখন বিভাজক স্তম্ভ থেকে নেতিবাচক থেকে ধনাত্মক রূপান্তরিত হয়, দামের স্বল্পমেয়াদী বৃদ্ধির গতিশীলতা রয়েছে, কিনতে পারেন। যখন বিভাজক স্তম্ভ থেকে ধনাত্মক থেকে নেতিবাচক রূপান্তরিত হয়, গতিশীলতা হ্রাস পায়, বিক্রি করা উচিত।
দ্বিতীয়ত, আরএসআইয়ের ওভারবয় ওভারসেল। আরএসআইয়ের সাথে মিলিত হয়ে, আপনি MACD দ্বারা উত্পন্ন কিছু মিথ্যা সংকেত ফিল্টার করতে পারেন। আপনি কেবলমাত্র আরএসআই কম হওয়ার সময় কিনতে পারেন এবং আরএসআই উচ্চ হওয়ার সময় বিক্রি করতে পারেন, যা সাফল্যের হার বাড়িয়ে তুলতে পারে।
এই কৌশলটির সুবিধা হ’ল দুটি সূচকের সুবিধাগুলি সংহত করা, ট্রেডিং সিগন্যালের নির্ভুলতা বাড়ানো। স্বল্পমেয়াদী পরিবর্তনগুলি সময়মতো ধরা এবং সংবেদনশীলতা রয়েছে। তবে ম্যাকড এবং আরএসআই প্যারামিটারগুলিকে অপ্টিমাইজ করা দরকার যাতে অতিরিক্ত লেনদেন এড়ানো যায়। স্টপ লস পয়েন্টগুলিও যুক্তিসঙ্গতভাবে সেট করা দরকার, একক লেনদেনের ক্ষতি নিয়ন্ত্রণ করতে হবে।
সংক্ষেপে, এই কৌশলটি সংক্ষিপ্ত লাইন চক্রের গতিশীল ব্যবসায়ের জন্য প্রযোজ্য, যা বাজারের স্বল্প সময়ের বিপর্যয়ের ফলে লাভের সুযোগকে কাজে লাগাতে সক্ষম। তবে এটির জন্য সক্রিয় ঝুঁকি ব্যবস্থাপনার ব্যবস্থা প্রয়োজন এবং বাজারের গতিবিধির ঘনিষ্ঠভাবে পর্যবেক্ষণ করা প্রয়োজন, যাতে সময়মতো কৌশলগত পরামিতিগুলিকে সামঞ্জস্য করা যায়।
/*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)