Strategi Pelacak Tren Twin Optimized

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

Gambaran umum

Twin Optimized Trend Tracker Strategy adalah versi yang ditingkatkan dari strategi OTT yang menggabungkan dua jalur OTT dan koefisien untuk lebih baik menangani sinyal palsu selama pasar sampingan.

Prinsip-prinsip

Inti dari strategi Twin OTT adalah untuk menentukan arah tren menggunakan dua garis pelacakan tren yang dioptimalkan - OTT. Pertama-tama menghitung rata-rata bergerak MAvg, kemudian memperoleh garis stop loss panjang longStop dan garis stop loss pendek shortStop berdasarkan persentase dari nilai MAvg. Ketika harga melintasi di atas garis longStop, itu adalah sinyal panjang, dan ketika melintasi di bawah garis shortStop, itu adalah sinyal pendek.

Untuk menangani sinyal palsu selama pasar sisi, strategi meningkatkan dua aspek berikut:

  1. Dua garis OTT yang dipindahkan secara vertikal, OTTup dan OTTdn, ditambahkan. Mereka adalah sedikit pergeseran ke atas dan ke bawah dari OTT asli. Hanya ketika harga menembus dua garis yang dipindahkan ini, sinyal perdagangan yang valid dihasilkan.

  2. Sebuah koefisien kecil diperkenalkan untuk menyempurnakan dua jalur OTT yang dipindahkan untuk akurasi yang lebih baik.

Dengan desain OTT kembar ini, sebagian besar kebisingan dari pasar sisi dapat disaring untuk menghindari sinyal yang salah. Ini membantu menangkap titik balik tren dan beralih posisi secara tepat waktu. Ini adalah keuntungan terbesar dari strategi OTT kembar.

Keuntungan

  • Desain jalur OTT kembar dapat secara efektif menyaring sinyal palsu dan meningkatkan stabilitas strategi
  • Koefisien koefisien tambahan membantu jalur OTT merespon pasar dengan lebih baik
  • Penulis Anıl Özekşi menjelaskan logika strategi dengan jelas dalam tutorial video, yang mudah dimengerti
  • Ini menggabungkan beberapa indikator teknis seperti EMA, garis stop loss untuk menentukan tren pasar
  • Penulis Anıl Özekşi adalah seorang pedagang Turki yang terkenal, menambah kredibilitas

Risiko

  • Indikator OTT itu sendiri cenderung untuk whipsaw dan tes pullback.
  • Dengan fluktuasi yang keras, garis stop loss dapat sering diaktifkan, menyebabkan overtrading.
  • Koefisien perlu diuji dengan cermat untuk nilai optimal, jika tidak, itu merusak efektivitasnya.
  • Tutorialnya dalam bahasa Turki. Hambatan bahasa dapat menyebabkan kesalahpahaman logika.
  • Tidak cukup backtesting, dibutuhkan lebih banyak periode dan pasar untuk memverifikasi strategi.

Tindakan balas:

  • Tambahkan buffer antara garis stop loss dan OTT kembar untuk mencegah sensitivitas yang berlebihan
  • Mengoptimalkan pengaturan koefisien sesuai dengan hasil backtest
  • Menerjemahkan tutorial untuk memastikan pemahaman yang benar dari logika
  • Melakukan backtest di lebih banyak periode sejarah untuk memverifikasi keandalan

Arahan Optimasi

  • Membuat parameter seperti panjang periode input disesuaikan
  • Cobalah jenis rata-rata bergerak lainnya yang lebih sesuai dengan prinsip OTT
  • Mengoptimalkan koefisien untuk instrumen perdagangan yang berbeda secara terpisah
  • Tambahkan filter untuk menghindari sinyal yang salah selama sesi perdagangan kecil
  • Buat garis stop loss dinamis berdasarkan volatilitas
  • Memperkenalkan pembelajaran mesin untuk mengoptimalkan parameter secara otomatis

Ringkasnya, strategi Twin OTT sepenuhnya memanfaatkan pengalaman OTT Anıl Özekşi dan membuat inovasi. Ini memiliki potensi untuk menjadi kerangka pelacakan tren yang andal dan dapat disesuaikan.

Kesimpulan

Strategi OTT Kembar secara efektif menangani sinyal palsu selama pasar sisi menggunakan garis pelacakan tren yang dioptimalkan ganda dan koefisien penyetelan halus. Ini menggunakan konsep rata-rata bergerak dan garis stop loss dinamis untuk melacak tren. Strategi ringkas dan praktis ini berasal dari pengalaman langsung trader terkenal, sehingga layak penelitian dan aplikasi yang mendalam. Tapi kita juga harus menyadari keterbatasannya dan menghindari kepuasan. Hanya melalui optimasi terus menerus dan pengujian yang ketat dapat menjadi strategi pelacakan tren yang kuat.


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