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