ট্রিপল ওভারল্যাপিং স্টোকাস্টিক ইমপুটাম কৌশল

লেখক:চাওঝাং, তারিখঃ 2024-01-26 12:15:20
ট্যাগঃ

img

সারসংক্ষেপ

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

কৌশলগত যুক্তি

এই কৌশলটির মূল সূচক হল স্টোকাস্টিক মম্পটাম ইনডেক্স (এসএমআই) । এসএমআই নিম্নরূপ গণনা করা হয়ঃ

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) স্তরগুলি সম্ভাব্য বিপরীতমুখী সংকেত নির্দেশ করে। যখন এসএমআই তার চলমান গড় রেখার উপরে / নীচে অতিক্রম করে তখন বুলিশ এবং হ্রাস সংকেত তৈরি হয়।

কৌশলটি বিভিন্ন প্যারামিটার সেট সহ তিনটি এসএমআই সূচক ব্যবহার করে, বিশেষতঃ

  • SMI1: %K সময়কাল 10, %K ধীর গতির সময়কাল 3
  • SMI2: %K সময়কাল 20, %K ধীর গতির সময়কাল 3
  • SMI3: %K সময়কাল 5, %K ধীর গতির সময়কাল 3

ট্রেডিং সিগন্যাল তৈরি হয় যখন তিনটি এসএমআই একযোগে ওভারক্রয় বা ওভারসোল্ড শর্ত প্রদর্শন করে। এটি মিথ্যা সংকেতগুলি ফিল্টার করে এবং নির্ভরযোগ্যতা উন্নত করে।

সুবিধা

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

ঝুঁকি

  • একাধিক সূচকগুলি সংকেতগুলি বিলম্বিত করতে পারে
  • উচ্চ ট্রেডিং ফ্রিকোয়েন্সি খরচ বৃদ্ধি করে
  • ব্যাকটেস্ট ওভারফিটিং
  • বাজার ব্যবস্থার পরিবর্তনে পরামিতি ব্যর্থ হতে পারে

ঝুঁকি হ্রাসঃ

  • বিলম্ব হ্রাস করার জন্য পরামিতি অপ্টিমাইজ করুন
  • লেনদেনের খরচ কমানোর জন্য ধরে রাখার সময়সীমা সংশোধন করুন
  • স্থিতিশীলতা যাচাই করার জন্য পরিসংখ্যানগত পরীক্ষা পরিচালনা করুন
  • ডায়নামিকভাবে পরামিতিগুলিকে মানিয়ে নিন

উন্নতি

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

সিদ্ধান্ত

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


/*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')


আরো