ট্রিপল স্ট্যাক স্টোকাস্টিক মোমেন্টাম কৌশল


সৃষ্টির তারিখ: 2024-01-26 12:15:20 অবশেষে সংশোধন করুন: 2024-01-26 12:15:20
অনুলিপি: 2 ক্লিকের সংখ্যা: 768
1
ফোকাস
1617
অনুসারী

ট্রিপল স্ট্যাক স্টোকাস্টিক মোমেন্টাম কৌশল

ওভারভিউ

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

কৌশল নীতি

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

SMI = 100 * EMA(EMA(收盘价-最高价和最低价的中点,N1),N2) / 0.5 * EMA(EMA(最高价-最低价,N1),N2)

এর মধ্যে, N1 এবং N2 হল প্যারামিটার দৈর্ঘ্য। এসএমআই সূচকটির মানের পরিসীমা 100 থেকে 100 এর মধ্যে রয়েছে, যখন এসএমআই 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')