ডাবল স্টোকাস্টিক মোমেন্টাম ইন্ডিকেটর স্ক্রিনিং কৌশল


সৃষ্টির তারিখ: 2023-10-07 16:45:25 অবশেষে সংশোধন করুন: 2023-10-07 16:45:25
অনুলিপি: 0 ক্লিকের সংখ্যা: 736
1
ফোকাস
1617
অনুসারী

ওভারভিউ

এই কৌশলটি দ্বি-র্যান্ডম গতিশীলতা সূচক (এসএমআই এবং আরএসআই) ব্যবহার করে এবং মার্টিনগেল এবং শারীরিক ফিল্টারিংয়ের সাহায্যে ট্রেডিং সিগন্যালগুলিকে ফিল্টার করে।

কৌশল নীতি

এই কৌশলটি SMI এবং RSI এর দ্বৈত এলোমেলো গতিশীলতা সূচক ব্যবহার করে ওভারহোল বিচার করে। SMI কে K-লাইন প্রকৃত মূল্যের পার্থক্য এবং সমাপ্তির দামের চলমান গড় দ্বারা গণনা করা হয়, যা বিপরীত পয়েন্টকে কার্যকরভাবে সনাক্ত করতে পারে। RSI ওভারহোলের তুলনা করে ওভারহোলের তুলনা করে। কৌশলটি SMI এর নীচে -50 এবং RSI এর নীচে 20 এর বেশি বেশি হয়; এসএমআই 50 এর উপরে এবং আরএসআই 80 এর উপরে শূন্য থাকে।

ভুয়া ব্রেকিংয়ের জন্য, কৌশলটি 10 চক্রের শারীরিক গড়ের 13 অংশকে ব্রেকিং ফিল্টার শর্ত হিসাবে ব্যবহার করে। যখন সত্তা গড়ের 13 অংশ অতিক্রম করে, তখন এটি কার্যকর বলে মনে করা হয়।

উপরন্তু, কৌশলটি একটি বিকল্প মার্টিনগেল কৌশল ব্যবহার করে, যা হ্রাসপ্রাপ্ত ব্যবসায়ের সময় অনুপাতগতভাবে ঝুঁকিপূর্ণ, পূর্ববর্তী ক্ষতির পুনরুদ্ধারের প্রত্যাশায়।

ব্যাকটেস্ট ফাংশনটি শুরু এবং শেষের সময় প্রবেশ করে কৌশলটির কার্যকারিতা পরিমাপ করে।

সামর্থ্য বিশ্লেষণ

এই কৌশলটি দ্বি-র্যান্ডম সূচক এবং ফিল্টারগুলির সমন্বিত ব্যবহার করে, যা বিপরীত দিকগুলিকে কার্যকরভাবে সনাক্ত করতে পারে, মাঝারি-সংক্ষিপ্ত প্রবণতা ক্যাপচার করতে পারে এবং মূল্যের ওঠানামা ট্র্যাক করতে পারে।

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

ঝুঁকি বিশ্লেষণ

  • এসএমআই এবং আরএসআই হ’ল পিছিয়ে পড়া সূচক, সংকেত বিলম্বিত হওয়ার ঝুঁকি রয়েছে
  • মার্টিনগেলের ক্ষয়ক্ষতির ঝুঁকি বাড়ছে
  • বড় ধরনের বাজারের অস্থিরতার সময়, ফিল্টারগুলি বৈধ সংকেতগুলি মুছে ফেলতে পারে

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

অপ্টিমাইজেশান দিক

  • এসএমআই এবং আরএসআই প্যারামিটারগুলির সংমিশ্রণটি অনুকূলিত করুন এবং সর্বোত্তম সিদ্ধান্ত গ্রহণের ফলাফলটি সন্ধান করুন
  • ফিল্টার বৈধতা সংকেত সম্ভাবনা হ্রাস করার জন্য ফিল্টার প্যারামিটারগুলি সামঞ্জস্য করুন
  • মার্টিনগেলের আমানতের সংখ্যা এবং অনুপাত অনুকূলিতকরণ
  • ট্রেন্ড ইন্ডিকেটর সহ বিপরীতমুখী অপারেশন এড়িয়ে চলুন
  • একক ক্ষতি নিয়ন্ত্রণের জন্য স্টপ লস কৌশল বাড়ানো

সারসংক্ষেপ

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

কৌশল সোর্স কোড
/*backtest
start: 2022-09-30 00:00:00
end: 2023-10-06 00:00:00
period: 2d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
// strategy(title = "CS Basic Scripts - Stochastic Special (Strategy)", shorttitle = "Stochastic Special", 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")

//Backtesting Input Range
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 = SMI < -1 * limit and close < open and body and usesmi
dn1 = SMI > 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()