মাল্টি-টাইমফ্রেম আরএসআই মুভিং এভারেজ ক্রসওভার কৌশল

লেখক:চাওঝাং, তারিখ: ২০২৩-১১-১৬ 16:28:22
ট্যাগঃ

img

সারসংক্ষেপ

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

নীতিমালা

এই কৌশলটি প্রথমে একাধিক টাইমফ্রেমে (1-মিনিট, 5-মিনিট, 15-মিনিট ইত্যাদি) আরএসআই সূচকগুলি গণনা করে। তারপরে আরএসআই চলমান গড় লাইনগুলি পেতে প্রতিটি সময়সীমার জন্য আরএসআইয়ের 15-অবধি ভিএমএ (পরিমিত চলমান গড়) লাগে।

এর পরে, বিভিন্ন সময়সীমার সমস্ত আরএসআই চলমান গড় দুটি সংকেতে সমানভাবে একত্রিত হয় - দ্রুত লাইন এবং ধীর লাইন। দ্রুত লাইনটি 100 পিরিয়ডের ইএমএ এবং ধীর লাইনটি 150 পিরিয়ডের ইএমএ।

যখন দ্রুত লাইন ধীর লাইনের উপরে অতিক্রম করে, তখন একটি ক্রয় সংকেত উত্পন্ন হয়। যখন দ্রুত লাইন ধীর লাইনের নীচে অতিক্রম করে, তখন একটি বিক্রয় সংকেত উত্পন্ন হয়। এইভাবে মাল্টি-টাইমফ্রেম আরএসআই একত্রিত করে, ক্রসওভার সংকেতগুলি স্বল্পমেয়াদী বাজার গোলমাল ফিল্টার করার সময় কার্যকরভাবে প্রবণতা ট্র্যাক করতে পারে।

সুবিধা

  1. একাধিক সময়সীমার সংমিশ্রণ মূল্য বক্ররেখা মসৃণ করতে পারে এবং মিথ্যা ব্রেকআউট কার্যকরভাবে এড়াতে পারে।

  2. আরএসআই অতিরিক্ত ক্রয়/অতিরিক্ত বিক্রয়ের মাত্রা নির্দেশ করে, নতুন উচ্চতা/নিম্নতা অনুসরণ করা এড়ানো।

  3. একটি একক চলমান গড় সিস্টেমের তুলনায় দ্বৈত চলমান গড়গুলির একটি ভাল হোল্ডিং প্রভাব রয়েছে।

  4. এসএমএর পরিবর্তে ভিএমএ ব্যবহার করা স্বল্পমেয়াদী ওঠানামা প্রভাব হ্রাস করে।

ঝুঁকি

  1. মাল্টি-টাইমফ্রেম কৌশলগুলির জন্য ব্যাপক পরামিতি টিউনিং প্রয়োজন, ভুল সেটিংস অনুপস্থিত ভাল এন্ট্রি বা দেরী এন্ট্রি হতে পারে।

  2. মুভিং মিডিয়ার কার্ভের ফিটিং খারাপ, ট্রেন্ড টার্নিং পয়েন্টগুলোতে পারফরম্যান্স কম।

  3. আরএসআই বিপরীতমুখী হয় প্রায়শই, বিপরীতমুখী সংকেতগুলি পর্যবেক্ষণ করা উচিত।

সমাধানঃ সময়সীমার পরামিতিগুলি অপ্টিমাইজ করুন; প্রবণতা নির্ধারণের জন্য এমএসিডি-র মতো অন্যান্য সূচকের সাথে একত্রিত করুন; আরএসআই বিচ্যুতি সংকেতগুলির দিকে নজর রাখুন।

অপ্টিমাইজেশান নির্দেশাবলী

  1. প্রবণতা আরও ভালভাবে ধরা পড়ার জন্য সময়সীমা এবং পরামিতি সেটিংসের সংখ্যা অপ্টিমাইজ করুন।

  2. ঝুঁকি নিয়ন্ত্রণে স্টপ লস যোগ করার কথা বিবেচনা করুন।

  3. প্রবণতা এবং পার্থক্য সম্পর্কে আরও ভাল সিদ্ধান্ত নেওয়ার জন্য অন্যান্য সূচকগুলিকে একত্রিত করুন।

  4. সর্বোত্তম রক্ষণাবেক্ষণ প্রভাবের জন্য বিভিন্ন রক্ষণাবেক্ষণ সময়ের পরামিতি পরীক্ষা করুন।

সিদ্ধান্ত

মাল্টি-টাইমফ্রেম আরএসআই মুভিং এভারেজ ক্রসওভার কৌশলটি একটি চলমান গড় সিস্টেম ব্যবহার করে একাধিক টাইমফ্রেম থেকে আরএসআই সূচকগুলি একত্রিত করে ট্রেডিং সংকেত উত্পন্ন করে, যা একটি সাধারণ মাল্টি-টাইমফ্রেম ট্রেন্ড অনুসরণকারী কৌশল। এর শক্তি কার্যকরভাবে প্রবণতা ট্র্যাকিং এবং গোলমাল ফিল্টারিংয়ে রয়েছে, তবে পরামিতি টিউনিং এবং ঝুঁকি নিয়ন্ত্রণের দিকে মনোযোগ প্রয়োজন। আরও অপ্টিমাইজেশনের সাথে এটি একটি শক্তিশালী ট্রেন্ড অনুসরণকারী সিস্টেমে পরিণত হতে পারে।


/*backtest
start: 2023-10-16 00:00:00
end: 2023-11-15 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="RSI multitimeframe SMA crossover", shorttitle="RSI multitimeframe strategy", default_qty_type= strategy.percent_of_equity, margin_long=50, default_qty_value=150)

res1 = input(title="Res 01", type=input.resolution, defval="1")
res2 = input(title="Res 0", type=input.resolution, defval="5")
res3 = input(title="Res 1", type=input.resolution, defval="15")
res4 = input(title="Res 2", type=input.resolution, defval="15")
res5 = input(title="Res 3", type=input.resolution, defval="15")
res6 = input(title="Res 4", type=input.resolution, defval="30")
res7 = input(title="Res 5", type=input.resolution, defval="45")
res8 = input(title="Res 6", type=input.resolution, defval="60")



lengthRSI = input(15, minval=1)
lengthMA = input(15, minval=1)
lengthFMA = input(100, minval=1)
lengthFMA2 = input(150, minval=1)
Long_yes = input(defval=1, title="Long trades 0 or 1", minval=0, maxval=1)
Short_yes = input(defval=0, title="Short trades 0 or 1", minval=0, maxval=1)
src = close

// === INPUT BACKTEST RANGE ===
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12)
fromDay   = input(defval = 1,    title = "From Day",        type = input.integer, minval = 1, maxval = 31)
fromYear  = input(defval = 2020, title = "From Year",       type = input.integer, minval = 1970)
thruMonth = input(defval = 1,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12)
thruDay   = input(defval = 1,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31)
thruYear  = input(defval = 2112, title = "Thru Year",       type = input.integer, minval = 1970)

// === INPUT SHOW PLOT ===
showDate  = input(defval = true, title = "Show Date Range", type = input.bool)

// === FUNCTION EXAMPLE ===
start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false       // create function "within window of time"



// stop loss 
longLossPerc = input(title="Long Stop Loss (%)", type=input.float, minval=0.0, step=0.5, defval=10) * 
   0.01
longStopPrice = strategy.position_avg_price * (1 - longLossPerc)

shortLossPerc = input(title="Short Stop Loss (%)", type=input.float, minval=0.0, step=0.5, defval=10) * 
   0.01
shortStopPrice = strategy.position_avg_price * (1 + shortLossPerc)


rsi1 = rsi(src, lengthRSI)
MA1 = vwma(rsi1, lengthMA)






outD1 = security(syminfo.tickerid, res1, MA1)
outD2 = security(syminfo.tickerid, res2, MA1)
outD3 = security(syminfo.tickerid, res3, MA1)
outD4 = security(syminfo.tickerid, res4, MA1)
outD5 = security(syminfo.tickerid, res5, MA1)
outD6 = security(syminfo.tickerid, res6, MA1)
outD7 = security(syminfo.tickerid, res7, MA1)
outD8 = security(syminfo.tickerid, res8, MA1)




//plot_d0 = outD0
//plot_d1 = outD1
//plot_d2 = outD2
//plot_d3 = outD3
//plot_d4 = outD4
//plot_d5 = outD5
//plot_d6 = outD6

out_multi = ema(outD1+outD2+outD3+outD4+outD5+outD6+outD7+outD8, lengthFMA)
out_multi2 = ema(outD1+outD2+outD3+outD4+outD5+outD6+outD7+outD8, lengthFMA2)
//out_multi1 = outD2+outD3+outD4
//out_multi2 = outD4+outD5+outD6

//col0 = outD0 < 20 ? color.lime : outD0 > 80 ? color.red : color.blue
//col1 = outD1 < 20 ? color.lime : outD1 > 80 ? color.red : color.blue
//col2 = outD2 < 20 ? color.lime : outD2 > 80 ? color.red : color.blue
//col3 = outD3 < 20 ? color.lime : outD3 > 80 ? color.red : color.blue
//col4 = outD4 < 20 ? color.lime : outD4 > 80 ? color.red : color.blue
//col5 = outD5 < 20 ? color.lime : outD5 > 80 ? color.red : color.blue
//col6 = outD6 < 20 ? color.lime : outD6 > 80 ? color.red : color.blue


// plot(plot_d0,linewidth=2, color=col0)
// plot(plot_d1, linewidth=2, color=col1)
// plot(plot_d2,linewidth=2, color=col2)
// plot(plot_d3,linewidth=2, color=col3)
// plot(plot_d4,linewidth=2, color=col4)
// plot(plot_d5,linewidth=2, color=col5)
// plot(plot_d6,linewidth=2, color=col6)

long=(out_multi/8)
short=(out_multi2/8)

plot(long, linewidth=1, color=color.green)
plot(short, linewidth=1, color=color.red)

long1=crossover(long,short)
short1=crossunder(long,short)

h0 = hline(65, "Upper Band", color=color.red, linestyle=hline.style_solid, linewidth=2 )
h1 = hline(35, "Lower Band", color=color.green, linestyle=hline.style_solid, linewidth=2)


strategy.entry("buy", strategy.long, when=long1 and window() and Long_yes > 0) 
if strategy.position_size > 0
    strategy.exit(id="XL STP", stop=longStopPrice)
strategy.close("buy",when=short1 )

strategy.entry("sell", strategy.short, when=short1 and window() and Short_yes > 0) 
if strategy.position_size < 0
    strategy.exit(id="XS STP", stop=shortStopPrice)
strategy.close("buy",when=long1 )



আরো