ট্রিপল ওভারল্যাপিং স্টোকাস্টিক মোমেন্টাম কৌশল একটি সাধারণ স্বল্পমেয়াদী ট্রেডিং কৌশল। এটি বিভিন্ন প্যারামিটার সেটিং সহ তিনটি স্টোকাস্টিক মোমেন্টাম সূচক (এসএমআই) সূচক গণনা করে এবং যখন তিনটি একই সাথে ওভারকোপড বা ওভারসোল্ড শর্ত প্রদর্শন করে তখন ট্রেডিং সংকেত তৈরি করে। মাল্টি-টাইমফ্রেম বিশ্লেষণকে একত্রিত করে, এই কৌশলটি কার্যকরভাবে বাজার গোলমাল ফিল্টার করতে এবং সংকেতের গুণমান উন্নত করতে পারে।
এই কৌশলটির মূল সূচক হল স্টোকাস্টিক মম্পটাম ইনডেক্স (এসএমআই) । এসএমআই নিম্নরূপ গণনা করা হয়ঃ
SMI = 100 * EMA(EMA(Close - Midpoint of High-Low Range, N1), N2) / 0.5 * EMA(EMA(High - Low, N1), N2)
যেখানে N1 এবং N2 হল পরামিতি দৈর্ঘ্য। এসএমআই -100 এবং 100 এর মধ্যে oscillates। 0 এর উপরে মানগুলি নির্দেশ করে যে বন্ধটি দৈনিক পরিসরের উপরের অর্ধেকের মধ্যে রয়েছে, যখন 0 এর নীচে মানগুলি নির্দেশ করে যে বন্ধটি নিম্নার্ধে রয়েছে।
ঐতিহ্যবাহী স্টোকাস্টিক দোলকের মতো, ওভারকুপ (যেমন 40) / ওভারসোল্ড (যেমন -40) স্তরগুলি সম্ভাব্য বিপরীতমুখী সংকেত নির্দেশ করে। যখন এসএমআই তার চলমান গড় রেখার উপরে / নীচে অতিক্রম করে তখন বুলিশ এবং হ্রাস সংকেত তৈরি হয়।
কৌশলটি বিভিন্ন প্যারামিটার সেট সহ তিনটি এসএমআই সূচক ব্যবহার করে, বিশেষতঃ
ট্রেডিং সিগন্যাল তৈরি হয় যখন তিনটি এসএমআই একযোগে ওভারক্রয় বা ওভারসোল্ড শর্ত প্রদর্শন করে। এটি মিথ্যা সংকেতগুলি ফিল্টার করে এবং নির্ভরযোগ্যতা উন্নত করে।
ঝুঁকি হ্রাসঃ
ট্রিপল ওভারল্যাপিং স্টোকাস্টিক মোমেন্টাম কৌশলটি অনন্য পরামিতিগুলির সাথে তিনটি এসএমআই সূচককে ওভারলে করে একাধিক সময়সীমার মধ্যে শক্তিশালী সংকেত উত্পাদনকে একত্রিত করে। একক দোলকের তুলনায়, এই মাল্টি-সূচক পদ্ধতিটি আরও গোলমাল ফিল্টার করে এবং ধারাবাহিকতা উন্নত করে। পরামিতি অপ্টিমাইজেশন, পরিসংখ্যানগত বৈধতা, সহায়ক সূচক ইত্যাদির মাধ্যমে কৌশল দৃঢ়তা বাড়ানোর জন্য আরও পরিমার্জন করা যেতে পারে।
/*backtest start: 2023-12-26 00:00:00 end: 2024-01-25 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy("Stochastic Momentum multi strategy", "Stochastic Momentum Index multi strategy", overlay=false) q = input(10, title="%K Length") r = input(3, title="%K Smoothing Length") s = input(3, title="%K Double Smoothing Length") nsig = input(10, title="Signal Length") matype = input("ema", title="Signal MA Type") // possible: ema, sma, wma, trima, hma, dema, tema, zlema overbought = input(40, title="Overbought Level", type=float) oversold = input(-40, title="Oversold Level", type=float) trima(src, length) => sma(sma(src,length),length) hma(src, length) => wma(2*wma(src, length/2)-wma(src, length), round(sqrt(length))) dema(src, length) => 2*ema(src,length) - ema(ema(src,length),length) tema(src, length) => (3*ema(src,length) - 3*ema(ema(src,length),length)) + ema(ema(ema(src,length),length),length) zlema(src, length) => ema(src,length) + (ema(src,length) - ema(ema(src,length),length)) smi = 100 * ema(ema(close-0.5*(highest(q)+lowest(q)),r),s) / (0.5 * ema(ema(highest(q)-lowest(q),r),s)) sig = matype=="ema" ? ema(smi,nsig) : matype=="sma" ? sma(smi,nsig) : matype=="wma" ? wma(smi,nsig) : matype=="trima" ? trima(smi,nsig) : matype=="hma" ? hma(smi,nsig) : matype=="dema" ? dema(smi,nsig) : matype=="tema" ? tema(smi,nsig) : matype=="zlema" ? zlema(smi,nsig) : ema(smi,nsig) p_smi = plot(smi, title="SMI", color=aqua) p_sig = plot(sig, title="Signal", color=red) // plotchar(crossover(smi, sig), title= "low", location=location.bottom, color=green, char="▲", size= size.tiny) // plotchar(crossunder(smi, sig), title= "high", location=location.top, color=red, char="▼", size= size.tiny) /////////////////////////////2 q2 = input(20, title="%K Length 2") r2 = input(3, title="%K Smoothing Length 2") s2 = input(3, title="%K Double Smoothing Length 2") nsig2 = input(10, title="Signal Length 2") matype2 = input("ema", title="Signal MA Type 2") // possible: ema, sma, wma, trima, hma, dema, tema, zlema overbought2 = input(40, title="Overbought Level 2", type=float) oversold2 = input(-40, title="Oversold Level 2", type=float) trima2(src2, length2) => sma(sma(src2,length2),length2) hma2(src2, length2) => wma(2*wma(src2, length2/2)-wma(src2, length2), round(sqrt(length2))) dema2(src2, length2) => 2*ema(src2,length2) - ema(ema(src2,length2),length2) tema2(src2, length2) => (3*ema(src2,length2) - 3*ema(ema(src2,length2),length2)) + ema(ema(ema(src2,length2),length2),length2) zlema2(src2, length2) => ema(src2,length2) + (ema(src2,length2) - ema(ema(src2,length2),length2)) smi2 = 100 * ema(ema(close-0.5*(highest(q2)+lowest(q2)),r2),s2) / (0.5 * ema(ema(highest(q2)-lowest(q2),r2),s2)) sig2 = matype2=="ema" ? ema(smi2,nsig2) : matype2=="sma 2" ? sma(smi2,nsig2) : matype2=="wma 2" ? wma(smi2,nsig2) : matype2=="trima 2" ? trima2(smi2,nsig2) : matype2=="hma 2" ? hma2(smi2,nsig2) : matype=="dema 2" ? dema2(smi2,nsig2) : matype2=="tema 2" ? tema2(smi2,nsig2) : matype2=="zlema 2" ? zlema2(smi2,nsig2) : ema(smi2,nsig2) p_smi2 = plot(smi2, title="SMI 2", color=aqua) p_sig2 = plot(sig2, title="Signal2", color=red) // plotchar(crossover(smi2, sig2), title= "low2", location=location.bottom, color=green, char="▲", size= size.tiny) // plotchar(crossunder(smi2, sig2), title= "high2", location=location.top, color=red, char="▼", size= size.tiny) /////////////////////////////3 q3 = input(5, title="%K Length 3") r3 = input(3, title="%K Smoothing Length 3") s3 = input(3, title="%K Double Smoothing Length 3") nsig3 = input(10, title="Signal Length 3") matype3 = input("ema", title="Signal MA Type 3") // possible: ema, sma, wma, trima, hma, dema, tema, zlema overbought3 = input(40, title="Overbought Level 3", type=float) oversold3 = input(-40, title="Oversold Level 3", type=float) trima3(src3, length3) => sma(sma(src3,length3),length3) hma3(src3, length3) => wma(2*wma(src3, length3/2)-wma(src3, length3), round(sqrt(length3))) dema3(src3, length3) => 2*ema(src3,length3) - ema(ema(src3,length3),length3) tema3(src3, length3) => (3*ema(src3,length3) - 3*ema(ema(src3,length3),length3)) + ema(ema(ema(src3,length3),length3),length3) zlema3(src3, length3) => ema(src3,length3) + (ema(src3,length3) - ema(ema(src3,length3),length3)) smi3 = 100 * ema(ema(close-0.5*(highest(q3)+lowest(q3)),r3),s3) / (0.5 * ema(ema(highest(q3)-lowest(q3),r3),s3)) sig3 = matype3=="ema" ? ema(smi3,nsig3) : matype3=="sma 3" ? sma(smi3,nsig3) : matype3=="wma 3" ? wma(smi3,nsig3) : matype3=="trima 3" ? trima3(smi3,nsig3) : matype3=="hma 3" ? hma3(smi3,nsig3) : matype=="dema 3" ? dema3(smi3,nsig3) : matype3=="tema 3" ? tema3(smi3,nsig3) : matype3=="zlema 3" ? zlema3(smi3,nsig3) : ema(smi3,nsig3) p_smi3 = plot(smi3, title="SMI 3", color=aqua) p_sig3 = plot(sig3, title="Signal3", color=red) // plotchar(crossover(smi3, sig3) and crossover(smi2, sig2) and crossover(smi, sig), title= "low3", location=location.bottom, color=green, char="▲", size= size.tiny) // plotchar(crossunder(smi3, sig3) and crossunder(smi2, sig2) and crossunder(smi, sig), title= "high3", location=location.top, color=red, char="▼", size= size.tiny) plotchar (((smi3 < sig3) and (smi2 < sig2) and (smi < sig)), title= "low3", location=location.bottom, color=green, char="▲", size= size.tiny) plotchar (((smi3 > sig3) and (smi2 > sig2) and (smi > sig)), title= "high3", location=location.top, color=red, char="▼", size= size.tiny) // === BACKTEST RANGE === FromMonth = input(defval = 8, title = "From Month", minval = 1, maxval = 12) FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) FromYear = input(defval = 2018, title = "From Year", minval = 2014) ToMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12) ToDay = input(defval = 31, title = "To Day", minval = 1, maxval = 31) ToYear = input(defval = 2018, title = "To Year", minval = 2014) longCondition = ((smi3 < sig3) and (smi2 < sig2) and (smi < sig)) shortCondition = ((smi3 > sig3) and (smi2 > sig2) and (smi > sig)) // buy = longCondition == 1 and longCondition[1] == 1 ? longCondition : na buy = longCondition == 1 ? longCondition : na sell = shortCondition == 1? shortCondition : na // === ALERTS === strategy.entry("L", strategy.long, when=buy) strategy.entry("S", strategy.short, when=sell) alertcondition(((smi3 < sig3) and (smi2 < sig2) and (smi < sig)), title='Low Fib.', message='Low Fib. Buy') alertcondition(((smi3 > sig3) and (smi2 > sig2) and (smi > sig)), title='High Fib.', message='High Fib. Low')