Strategi Pengesan Trend Twin Optimized

Penulis:ChaoZhang, Tarikh: 2023-10-08 15:10:31
Tag:

Ringkasan

Strategi Pelacak Trend Twin Optimized adalah versi yang dipertingkatkan dari strategi OTT yang menggabungkan dua garis OTT dan pekali untuk menangani isyarat palsu dengan lebih baik semasa pasaran sampingan.

Prinsip-prinsip

Inti dari strategi Twin OTT adalah untuk menentukan arah trend menggunakan dua garis pengesanan trend yang dioptimumkan - OTT. Ia mula-mula mengira purata bergerak MAvg, kemudian mendapat garis stop loss panjang longStop dan garis stop loss pendek shortStop berdasarkan peratusan nilai MAvg. Apabila harga melintasi di atas garis longStop, ia adalah isyarat panjang, dan apabila ia melintasi di bawah garis shortStop, ia adalah isyarat pendek.

Untuk menangani isyarat palsu semasa pasaran sampingan, strategi ini meningkatkan dua aspek berikut:

  1. Dua garis OTT yang dipindahkan secara menegak, OTTup dan OTTdn, ditambahkan. Mereka adalah pergeseran sedikit ke atas dan ke bawah dari OTT asal. Hanya apabila harga memecahkan dua garis yang dipindahkan ini, isyarat perdagangan yang sah dihasilkan.

  2. Gabungan pekali kecil diperkenalkan untuk menyelaraskan kedua-dua talian OTT yang dipindahkan untuk ketepatan yang lebih baik.

Dengan reka bentuk OTT kembar ini, kebanyakan bunyi bising dari pasaran sampingan dapat disaring untuk mengelakkan isyarat yang salah.

Kelebihan

  • Reka bentuk jalur OTT kembar dapat menapis isyarat palsu dengan berkesan dan meningkatkan kestabilan strategi
  • Gabungan pekali tambahan membantu talian OTT bertindak balas dengan lebih baik kepada pasaran
  • Penulis Anıl Özekşi menerangkan logik strategi dengan jelas dalam tutorial videonya, yang mudah difahami
  • Ia menggabungkan pelbagai penunjuk teknikal seperti EMA, garis stop loss untuk menentukan trend pasaran
  • Penulis Anıl Özekşi adalah seorang peniaga Turki yang terkenal, menambah kredibiliti

Risiko

  • Penunjuk OTT itu sendiri cenderung untuk ujian whipsaw dan pullback. Reka bentuk OTT kembar mengurangkan masalah ini.
  • Dengan turun naik yang ganas, garis stop loss boleh diaktifkan dengan kerap, menyebabkan overtrading.
  • Gabungan pengukur perlu diuji dengan teliti untuk nilai optimum, jika tidak, ia menjejaskan keberkesanan.
  • Tutorial adalah dalam bahasa Turki. Hambatan bahasa boleh menyebabkan salah faham logik.
  • Tidak mencukupi backtest. lebih banyak tempoh dan pasaran diperlukan untuk mengesahkan strategi.

Tindakan balas:

  • Tambah penyangga antara garis stop loss dan OTT kembar untuk mengelakkan keterlaluan sensitiviti
  • Mengoptimumkan tetapan coef mengikut hasil backtest
  • Menerjemahkan tutorial untuk memastikan pemahaman yang betul tentang logik
  • Melakukan backtest di lebih banyak tempoh sejarah untuk mengesahkan kebolehpercayaan

Arahan pengoptimuman

  • Buat parameter seperti panjang tempoh input yang boleh diselaraskan
  • Cuba jenis purata bergerak lain yang lebih sesuai dengan prinsip OTT
  • Mengoptimumkan koefisien untuk instrumen dagangan yang berbeza secara berasingan
  • Tambah penapis untuk mengelakkan isyarat yang salah semasa sesi dagangan kecil
  • Buat garis stop loss dinamik berdasarkan turun naik
  • Memperkenalkan pembelajaran mesin untuk mengoptimumkan parameter secara automatik

Ringkasnya, strategi Twin OTT sepenuhnya menggunakan pengalaman OTT Anıl Özekşi dan membuat inovasi. Ia berpotensi menjadi kerangka pengesanan trend yang boleh dipercayai dan disesuaikan. Tetapi pengoptimuman dan pengujian berterusan masih diperlukan untuk menyesuaikan diri dengan pasaran yang berubah.

Kesimpulan

Strategi Twin OTT secara berkesan mengendalikan isyarat palsu semasa pasaran sampingan menggunakan garis penjejakan trend yang dioptimumkan berganda dan pekali penyesuaian halus. Ia menggunakan konsep purata bergerak dan garis stop loss dinamik untuk mengesan trend. Strategi ringkas dan praktikal ini berasal dari pengalaman tangan pertama seorang peniaga terkenal, menjadikannya bernilai penyelidikan dan aplikasi yang mendalam. Tetapi kita juga harus menyedari keterbatasan dan mengelakkan rasa puas hati. Hanya melalui pengoptimuman berterusan dan ujian yang ketat ia boleh menjadi strategi penjejakan trend yang mantap.


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

Lebih lanjut