ডাবল ওটিটি ট্রেন্ড ট্র্যাকিং কৌশলটি একটি উন্নত ওটিটি কৌশল যা ডাবল ওটিটি লাইন এবং ফ্যাক্টরগুলিকে সংযুক্ত করে যাতে বাজার পুনরুদ্ধার করার সময় মিথ্যা সংকেতগুলিকে আরও ভালভাবে মোকাবেলা করা যায়। এই কৌশলটি তুর্কি ব্যবসায়ী Anıl Özekşi দ্বারা বিকাশ করা হয়েছিল, যিনি তার ভিডিও টিউটোরিয়ালে এই কৌশলটির নকশা সম্পর্কে বিস্তারিতভাবে ব্যাখ্যা করেছেন।
ডাবল ওটিটি কৌশলটির মূল বিষয় হল প্রবণতার দিক নির্ধারণের জন্য দুটি অপ্টিমাইজড ট্রেন্ড ট্র্যাকিং লাইন ওটিটি ব্যবহার করা। এটি প্রথমে চলমান গড় এমএভিজি গণনা করে এবং তারপরে এমএভিজি মানের শতাংশের ভিত্তিতে দীর্ঘ স্টপ লাইন লংস্টপ এবং শর্ট স্টপ লাইন শর্টস্টপ পায়। দাম যখন দীর্ঘ স্টপ লাইন অতিক্রম করে তখন এটি একটি বিউড সিগন্যাল এবং যখন এটি সংক্ষিপ্ত স্টপ লাইন অতিক্রম করে তখন এটি একটি বিউড সিগন্যাল।
এই কৌশলটি নিম্নলিখিত দুটি ক্ষেত্রে উন্নত করা হয়েছে যাতে মিথ্যে সংকেত মোকাবেলা করা যায়ঃ
দুটি উল্লম্বভাবে স্থানান্তরিত ওটিটি লাইন যোগ করা হয়েছে, যথাক্রমে OTTup এবং OTTdn, যা ওটিটির সামান্য আপ এবং ডাউন স্থানান্তরিত। প্রকৃত ট্রেডিং সিগন্যালটি কেবল তখনই উত্পন্ন হয় যখন দাম এই দুটি স্থানান্তরিত লাইনটি ভেঙে দেয়।
একটি ছোট coefficient প্রবর্তন করা হয়েছে, যা দুই-ডিজিট ওটিটি লাইনকে আরও সঠিকভাবে বাজারে অভিযোজিত করার জন্য ব্যবহার করা হয়।
এই দ্বৈত ওটিটি ডিজাইনের সাহায্যে, বেশিরভাগ বাজারগুলির গোলমালটি ফিল্টার করা যায়, ভুল সংকেত তৈরি করা এড়ানো যায়। এইভাবে, প্রবণতার বিপরীত বিন্দুগুলি আরও ভালভাবে ধরা যায় এবং সময়মতো অবস্থান পরিবর্তন করা যায়। এটি দ্বৈত ওটিটি কৌশলগুলির সর্বাধিক সুবিধা।
প্রতিকারঃ
সংক্ষেপে, ডাবল ওটিটি কৌশলটি আনিল ওজেক্সির ওটিটিপি অভিজ্ঞতাকে পুরোপুরি ব্যবহার করে এবং উদ্ভাবন করে। এটি একটি নির্ভরযোগ্য, কাস্টমাইজযোগ্য প্রবণতা ট্র্যাকিং কৌশল কাঠামো হওয়ার সম্ভাবনা রয়েছে। তবে বাজারের পরিবর্তনের সাথে খাপ খাইয়ে নেওয়ার জন্য ক্রমাগত অপ্টিমাইজেশন পরীক্ষা করা দরকার।
ডাবল ওটিটি কৌশলটি ডাবল অপ্টিমাইজড ট্রেন্ড ট্র্যাকিং লাইন এবং সূক্ষ্ম সমন্বয়কারী সহযোগিতার মাধ্যমে বাজারের মিথ্যা সংকেত সমস্যার কার্যকর প্রতিক্রিয়া জানায়। এটি চলমান গড়ের ধারণাকে যুক্তিসঙ্গতভাবে ব্যবহার করে, স্টপ লস লাইনের সাহায্যে গতিশীল ট্রেন্ড ট্র্যাকিংয়ের জন্য। এই কৌশলটি সহজ এবং ব্যবহারিক, সুপরিচিত ব্যবসায়ীদের কাছ থেকে প্রাপ্ত অভিজ্ঞতা, গভীরভাবে অধ্যয়নের জন্য উপযুক্ত। তবে আমাদের অবশ্যই তার সীমাবদ্ধতা সম্পর্কে সচেতন হওয়া উচিত, অহংকার থেকে বিরত থাকা উচিত এবং সতর্কতার সাথে যাচাই করা উচিত। কেবলমাত্র ক্রমাগত অপ্টিমাইজড পরীক্ষা এটিকে নির্ভরযোগ্য ট্রেন্ড ট্র্যাকিং কৌশল হিসাবে তৈরি করতে পারে।
/*backtest
start: 2023-09-07 00:00:00
end: 2023-10-07 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © KivancOzbilgic
//created by: @Anil_Ozeksi
//developer: ANIL ÖZEKŞİ
//author: @kivancozbilgic
strategy("Twin Optimized Trend Tracker","TOTT", overlay=true)
src = input(close, title="Source")
length=input(40, "OTT Period", minval=1)
percent=input(1, "Optimization Constant", type=input.float, step=0.1, minval=0)
coeff=input(0.001, "Twin OTT Coefficient", type=input.float, step=0.001, minval=0)
showsupport = input(title="Show Support Line?", type=input.bool, defval=true)
showsignalsk = input(title="Show Signals?", type=input.bool, defval=true)
mav = input(title="Moving Average Type", defval="VAR", options=["SMA", "EMA", "WMA", "TMA", "VAR", "WWMA", "ZLEMA", "TSF"])
highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true)
Var_Func(src,length)=>
valpha=2/(length+1)
vud1=src>src[1] ? src-src[1] : 0
vdd1=src<src[1] ? src[1]-src : 0
vUD=sum(vud1,9)
vDD=sum(vdd1,9)
vCMO=nz((vUD-vDD)/(vUD+vDD))
VAR=0.0
VAR:=nz(valpha*abs(vCMO)*src)+(1-valpha*abs(vCMO))*nz(VAR[1])
VAR=Var_Func(src,length)
Wwma_Func(src,length)=>
wwalpha = 1/ length
WWMA = 0.0
WWMA := wwalpha*src + (1-wwalpha)*nz(WWMA[1])
WWMA=Wwma_Func(src,length)
Zlema_Func(src,length)=>
zxLag = length/2==round(length/2) ? length/2 : (length - 1) / 2
zxEMAData = (src + (src - src[zxLag]))
ZLEMA = ema(zxEMAData, length)
ZLEMA=Zlema_Func(src,length)
Tsf_Func(src,length)=>
lrc = linreg(src, length, 0)
lrc1 = linreg(src,length,1)
lrs = (lrc-lrc1)
TSF = linreg(src, length, 0)+lrs
TSF=Tsf_Func(src,length)
getMA(src, length) =>
ma = 0.0
if mav == "SMA"
ma := sma(src, length)
ma
if mav == "EMA"
ma := ema(src, length)
ma
if mav == "WMA"
ma := wma(src, length)
ma
if mav == "TMA"
ma := sma(sma(src, ceil(length / 2)), floor(length / 2) + 1)
ma
if mav == "VAR"
ma := VAR
ma
if mav == "WWMA"
ma := WWMA
ma
if mav == "ZLEMA"
ma := ZLEMA
ma
if mav == "TSF"
ma := TSF
ma
ma
MAvg=getMA(src, length)
fark=MAvg*percent*0.01
longStop = MAvg - fark
longStopPrev = nz(longStop[1], longStop)
longStop := MAvg > longStopPrev ? max(longStop, longStopPrev) : longStop
shortStop = MAvg + fark
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := MAvg < shortStopPrev ? min(shortStop, shortStopPrev) : shortStop
dir = 1
dir := nz(dir[1], dir)
dir := dir == -1 and MAvg > shortStopPrev ? 1 : dir == 1 and MAvg < longStopPrev ? -1 : dir
MT = dir==1 ? longStop: shortStop
OTT=MAvg>MT ? MT*(200+percent)/200 : MT*(200-percent)/200
OTTup=OTT*(1+coeff)
OTTdn=OTT*(1-coeff)
PPLOT=plot(showsupport ? MAvg : na, color=#0585E1, linewidth=2, title="Support Line")
pALLup=plot(nz(OTTup[2]), color=color.green, linewidth=2, title="OTTup", transp=0)
pALLdn=plot(nz(OTTdn[2]), color=color.red, linewidth=2, title="OTTdown", transp=0)
buySignalk = crossover(MAvg, OTTup[2])
sellSignalk = crossunder(MAvg, OTTdn[2])
K1=barssince(buySignalk)
K2=barssince(sellSignalk)
O1=barssince(buySignalk[1])
O2=barssince(sellSignalk[1])
plotshape(buySignalk and showsignalsk and O1>K2 ? min(low-abs(roc(low,1)),OTTdn-abs(roc(low,1))) : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0)
plotshape(sellSignalk and showsignalsk and O2>K1 ? max(high+abs(roc(high,1)),OTTup+abs(roc(high,1))) : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0)
mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0,display=display.none)
longFillColor = highlighting ? (O2>K1 ? color.green : na) : na
shortFillColor = highlighting ? (O1>K2 ? color.red : na) : na
fill(mPlot, PPLOT, title="UpTrend Highligter", color=longFillColor,transp=90)
fill(mPlot, PPLOT, title="DownTrend Highligter", color=shortFillColor,transp=90)
fill(pALLup, pALLdn, title="Flat Zone Highligter", color=color.blue,transp=90)
dummy0 = input(true, title = "=Backtest Inputs=")
FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromYear = input(defval = 2005, title = "From Year", minval = 2005)
ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToYear = input(defval = 9999, title = "To Year", minval = 2006)
Start = timestamp(FromYear, FromMonth, FromDay, 00, 00)
Finish = timestamp(ToYear, ToMonth, ToDay, 23, 59)
Timerange() =>
time >= Start and time <= Finish ? true : false
if buySignalk
strategy.entry("Long", strategy.long)
if sellSignalk
strategy.entry("Short", strategy.short)