
ডায়নামিক কম্পন কৌশল হল একটি পরিমাণগত ট্রেডিং কৌশল যা র্যান্ডম ডায়নামিক সূচক এবং অপেক্ষাকৃত দুর্বল সূচকগুলির সমন্বয় করে। এই কৌশলটি র্যান্ডম ডায়নামিক সূচকগুলি ব্যবহার করে বাজারের ওভার-বিক্রয় অঞ্চলগুলি নির্ধারণ করে, দ্রুত আরএসআই সূচক ফিল্টার সংকেতগুলির সাথে মিলিত হয়, তারপরে সত্তা ফিল্টারিংয়ের মাধ্যমে আরও নির্ভরযোগ্য ট্রেডিং সংকেত নির্বাচন করা হয়।
এলোমেলো গতিশীলতা সূচক (SMI) একটি প্রযুক্তিগত সূচক যা সাধারণত পরিমাণগত লেনদেনের জন্য ব্যবহৃত হয়। এটি গতিশীলতা সূচক এবং কম্পন সূচকগুলির সুবিধাগুলি একত্রিত করে।
বিশেষ করে, এসএমআই এর গণনা সূত্র হলঃ
SMI = (Close - (HH + LL)/2)/(0.5*(HH - LL)) * 100
এর মধ্যে, HH হল গত N দিনের সর্বোচ্চ মূল্য, LL হল গত N দিনের সর্বনিম্ন মূল্য।
এইভাবে, এসএমআই গতিশীলতার প্রবণতা বিচার এবং ঝড়ের বিপরীত বিচারকে একত্রিত করে। যখন এসএমআই 80 এর উপরে থাকে তখন এটি ওভারবাইট হয় এবং যখন এটি 20 এর নীচে থাকে তখন এটি ওভারসোল হয়। কৌশলটি ওভারবাইট ওভারসোল অঞ্চলে একটি লেনদেনের সংকেত দেয়।
তুলনামূলকভাবে দুর্বল সূচক (আরএসআই) একটি সাধারণ ওভারব্রিড ওভারসোল সূচক। এই কৌশলটি স্বল্পমেয়াদে ওভারব্রিড ওভারসোলের অবস্থা বিচার করতে 7 এর একটি দ্রুত আরএসআই ব্যবহার করে।
যখন দ্রুত আরএসআই ২০ এর নীচে থাকে তখন এটি ওভারসোল্ড হয় এবং ৮০ এর উপরে ওভারসোল্ড হয়। কৌশলটি ওভারসোল্ড ওভারসোল্ড অঞ্চলে ট্রেডিং সিগন্যাল দেয়।
এই কৌশলটিতে একটি এন্ট্রি ফিল্টারও যুক্ত করা হয়েছে, যা কে-লাইন এন্ট্রিগুলির আকার গণনা করে আংশিক সংকেতগুলি ফিল্টার করে। কেবলমাত্র যখন কে-লাইন এন্ট্রিগুলি একটি নির্দিষ্ট থ্রেশহোল্ড অতিক্রম করে তখনই একটি লেনদেনের সংকেত দেওয়া হয়।
এটি কিছু ভুয়া সংকেত ফিল্টার করতে পারে এবং সংকেতের নির্ভরযোগ্যতা বাড়ায়।
এই কৌশলটি র্যান্ডম ডায়নামিক সূচক, দ্রুত আরএসআই সূচক এবং সত্ত্বা ফিল্টার তিনটি অংশের সমন্বয় করে। একাধিক সূচক একত্রিত করে, সংকেতের নির্ভুলতা বাড়ানো এবং কৌশলটির স্থায়িত্ব বাড়ানো যায়।
এলোমেলো গতিশীলতা সূচক এবং দ্রুত আরএসআই সূচক উভয়ই বাজারের ওভার-বিক্রয় ওভার-বিক্রয় অবস্থা সঠিকভাবে নির্ধারণ করতে পারে, কৌশলটি ওভার-বিক্রয় ওভার-বিক্রয় অঞ্চলে অবস্থান স্থাপন করে, নিম্ন-বিক্রয় ও উচ্চ-বিক্রয় ট্রেডিং নীতি অনুসরণ করে।
এই কৌশলটি মার্কেটে ট্রেডিংয়ের সুযোগকে সর্বাধিক করে তোলার জন্য মাল্টি-হেড এবং শূন্য-হেড উভমুখী ট্রেডিংয়ের জন্য ব্যবহার করা যেতে পারে।
শারীরিক ফিল্টার যুক্ত করা হয়েছে, যা বেশিরভাগ শব্দকে ফিল্টার করে এবং কম্পনের সময় আটকে যাওয়া থেকে রক্ষা করে।
দ্বি-মুখী ট্রেডিংয়ের কৌশল, একাধিক শূন্য মাথা ঘন ঘন স্যুইচ করা একটি সম্ভাব্য ঝুঁকিপূর্ণ পয়েন্ট। যথাযথভাবে অপ্টিমাইজড পজিশনিং লজিক এই ঝুঁকি কমাতে পারে।
সূচক যখন সংকেত দেয়, তখন খুব অল্প সময়ের মধ্যে প্রচুর পরিমাণে ট্রেডারদের জড়ো করা হতে পারে, যার ফলে বাজারটি বিপরীত হওয়ার ঝুঁকি রয়েছে। সূচক প্যারামিটারগুলি অপ্টিমাইজ করে এই ঝুঁকি হ্রাস করা যেতে পারে।
চরম পরিস্থিতিতে, সমস্ত মডেল ব্যর্থ হতে পারে। এই ধরনের ঝুঁকি নিয়ন্ত্রণের জন্য একটি যুক্তিসঙ্গত স্টপ লস সেটআপ প্রয়োজন।
বিভিন্ন প্যারামিটার সমন্বয় পরীক্ষা করে, যেমন এসএমআই চক্র, আরএসআই চক্র, প্রকৃত ফিল্টার থ্রেশহোল্ড ইত্যাদি, সর্বোত্তম প্যারামিটারগুলি খুঁজে বের করে কৌশলটির রিটার্ন হার বাড়ানো যায়।
এটিআর বা অস্থিরতার উপর ভিত্তি করে একটি গতিশীল স্টপ-অফ ব্যবস্থা স্থাপন করে, যা স্বতন্ত্র শেয়ার এবং সামগ্রিক ঝুঁকিকে আরও ভালভাবে নিয়ন্ত্রণ করতে পারে।
মেশিন লার্নিং অ্যালগরিদমের প্রবর্তন, যা মডেলের মাধ্যমে সূচকের মানের ভবিষ্যতের গতিপথের পূর্বাভাস দেয়। এটি সূচকের টার্নিং পয়েন্টগুলিকে অগ্রিমভাবে নির্ধারণ করতে পারে, কৌশলটির অগ্রগতিশীলতা বাড়ায়।
সংক্ষেপে বলা যায়, এই কৌশলটি র্যান্ডম গতিশীল সূচক, দ্রুত আরএসআই সূচক এবং প্রকৃত ফিল্টারকে সংহত করে, একটি সম্পূর্ণ ওভারবয় ওভারসেল বিচার ব্যবস্থার একটি সম্পূর্ণ সেট উপলব্ধ করে। একাধিক সূচক সমন্বয় সংকেত নির্ভুলতা উন্নত করে, দ্বি-মুখী লেনদেন এবং ঝুঁকি নিয়ন্ত্রণ ব্যবস্থা কৌশলটিকে আরও ভারসাম্যপূর্ণ করে তোলে। প্যারামিটার এবং মডেলের ক্রমাগত অপ্টিমাইজেশনের মাধ্যমে এই কৌশলটি আরও ভাল রিটার্নের প্রত্যাশা করে।
/*backtest
start: 2023-12-22 00:00:00
end: 2024-01-21 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//Noro
//2018
//@version=2
strategy(title = "Noro's Stochastic Strategy v1.1", shorttitle = "Stochastic str 1.1", overlay = false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)
//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
usemar = input(false, defval = false, title = "Use Martingale")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
usesmi = input(true, defval = true, title = "Use SMI Strategy")
usersi = input(true, defval = true, title = "Use RSI Strategy")
usebod = input(true, defval = true, title = "Use Body-Filter")
a = input(5, "SMI Percent K Length")
b = input(3, "SMI Percent D Length")
limit = input(50, defval = 50, minval = 1, maxval = 100, title = "SMI Limit")
fromyear = input(2017, defval = 2017, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")
//Fast RSI
fastup = rma(max(change(close), 0), 7)
fastdown = rma(-min(change(close), 0), 7)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))
//Stochastic Momentum Index
ll = lowest (low, a)
hh = highest (high, a)
diff = hh - ll
rdiff = close - (hh+ll)/2
avgrel = ema(ema(rdiff,b),b)
avgdiff = ema(ema(diff,b),b)
SMI = avgdiff != 0 ? (avgrel/(avgdiff/2)*100) : 0
SMIsignal = ema(SMI,b)
//Lines
plot(SMI, color = blue, linewidth = 3, title = "Stochastic Momentum Index")
plot(SMIsignal, color = red, linewidth = 3, title = "SMI Signal Line")
plot(limit, color = black, title = "Over Bought")
plot(-1 * limit, color = black, title = "Over Sold")
plot(0, color = blue, title = "Zero Line")
//Body Filter
nbody = abs(close - open)
abody = sma(nbody, 10)
body = nbody > abody / 3 or usebod == false
//Signals
up1 = SMIsignal < -1 * limit and close < open and body and usesmi
dn1 = SMIsignal > limit and close > open and body and usesmi
up2 = fastrsi < 20 and close < open and body and usersi
dn2 = fastrsi > 80 and close > open and body and usersi
exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body
//Trading
profit = exit ? ((strategy.position_size > 0 and close > strategy.position_avg_price) or (strategy.position_size < 0 and close < strategy.position_avg_price)) ? 1 : -1 : profit[1]
mult = usemar ? exit ? profit == -1 ? mult[1] * 2 : 1 : mult[1] : 1
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 * mult : lot[1]
if up1 or up2
if strategy.position_size < 0
strategy.close_all()
strategy.entry("long", strategy.long, needlong == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if dn1 or dn2
if strategy.position_size > 0
strategy.close_all()
strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if time > timestamp(toyear, tomonth, today, 23, 59) or exit
strategy.close_all()