Strategi pengoptimalan pelacakan tren dinamis


Tanggal Pembuatan: 2024-01-12 11:20:04 Akhirnya memodifikasi: 2024-01-12 11:20:04
menyalin: 2 Jumlah klik: 551
1
fokus pada
1617
Pengikut

Strategi pengoptimalan pelacakan tren dinamis

Ringkasan

Strategi ini secara dinamis memetakan garis dukungan dengan menghitung indikator CMO dan tingkat perubahan. Strategi ini juga menghasilkan sinyal perdagangan ketika harga menembus garis dukungan. Strategi ini juga mengunci lebih banyak keuntungan dengan mengoptimalkan area stop loss di dekat garis dukungan.

Prinsip Strategi

  1. Perhitungan indikator CMO untuk menentukan tren harga
  2. Perhitungan perubahan Var, yang mencerminkan tren perubahan harga
  3. Menggambar garis dukungan berdasarkan perubahan
  4. Perhitungan garis stop yang dioptimalkan untuk longStop dan shortStop
  5. Sinyal perdagangan dihasilkan ketika harga melewati garis dukungan

Analisis Keunggulan

  1. Menggunakan Indeks CMO untuk Mengetahui Tren Harga dan Menghindari False Breakthroughs
  2. Garis dukungan dapat menentukan arah tren dengan jelas
  3. Stop loss yang dioptimalkan dapat mengunci lebih banyak keuntungan
  4. Sinyal transaksi sederhana dan jelas, mudah dipertanggungjawabkan

Analisis risiko

  1. Indeks CMO Terlambat, Mungkin Melewatkan Titik Peralihan Harga
  2. Garis dukungan yang terobosan dapat membentuk sinyal palsu
  3. Optimisasi jangkauan stop loss yang tidak tepat dapat menyebabkan kerugian yang lebih besar

Solusi untuk Mengatasi Risiko:

  1. Menyesuaikan parameter CMO untuk mengurangi keterlambatan
  2. Kombinasi dengan indikator lain untuk memfilter sinyal palsu
  3. Uji coba untuk menentukan rasio pengoptimalan stop loss yang tepat

Arah optimasi

  1. Lebih banyak kombinasi indikator, filter sinyal palsu
  2. AI mengoptimalkan stop loss otomatis
  3. Mengatur volume transaksi secara otomatis

Meringkaskan

Strategi ini bekerja dengan baik secara keseluruhan, menggunakan garis dukungan untuk menentukan arah tren. Namun, ada risiko sinyal palsu yang dapat dioptimalkan dengan kombinasi beberapa indikator.

Kode Sumber Strategi
/*backtest
start: 2024-01-04 00:00:00
end: 2024-01-11 00:00:00
period: 45m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © melihtuna

//@version=4
strategy("Optimized Trend Tracker - Strategy Version", shorttitle="OTT-Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=10000, currency=currency.USD, commission_value=0.1, commission_type=strategy.commission.percent)

src = input(close, title="Source")
pds=input(1, "OTT Period", minval=1)
percent=input(0.1, "OTT Percent", type=input.float, step=0.1, minval=0)
condition = input(title="Condition", defval="Support Line Crossing Signals", options=["Price/OTT Crossing Signals", "Support Line Crossing Signals"])
showsupport = input(title="Show Support Line?", type=input.bool, defval=true)
highlight = input(title="Show OTT Color Changes?", type=input.bool, defval=true)
highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true)
barcoloing = input(title="Barcolor On/Off ?", type=input.bool, defval=true)
showlabels = input(title="Show OTT BUY/SELl Labels?", type=input.bool, defval=false)

// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2020, title = "From Year", minval = 2017)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2017)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false // create function "within window of time"

alpha=2/(pds+1)
ud1=src>src[1] ? src-src[1] : src
dd1=src<src[1] ? src[1]-src : src
UD=sum(ud1,9)
DD=sum(dd1,9)
CMO=(UD-DD)/(UD+DD)
k= abs(CMO)
Var=0.0
Var:=(alpha*k*src)+(1-alpha*k)*nz(Var[1])
fark=Var*percent*0.01
longStop = Var - fark
longStopPrev = nz(longStop[1], longStop)
longStop := Var > longStopPrev ? max(longStop, longStopPrev) : longStop
shortStop =  Var + fark
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := Var < shortStopPrev ? min(shortStop, shortStopPrev) : shortStop
dir = 1
dir := nz(dir[1], dir)
dir := dir == -1 and Var > shortStopPrev ? 1 : dir == 1 and Var < longStopPrev ? -1 : dir
MT = dir==1 ? longStop: shortStop
OTT=Var>MT ? MT*(200+percent)/200 : MT*(200-percent)/200 
plot(showsupport ? Var : na, color=#0585E1, linewidth=2, title="Support Line")
OTTC = highlight ? OTT[2] > OTT[3] ? color.green : color.red : #B800D9 
pALL=plot(nz(OTT[2]), color=OTTC, linewidth=2, title="OTT", transp=0)

buySignalk = window() and crossover(Var, OTT[2])
sellSignallk = window() and crossunder(Var, OTT[2])
buySignalc = window() and crossover(src, OTT[2])
sellSignallc = window() and crossunder(src, OTT[2])

plotshape(condition == "Support Line Crossing Signals" ? showlabels and buySignalk ? OTT*0.995 : na : showlabels and buySignalc ? OTT*0.995 : na, title="BUY", text="BUY", location=location.belowbar, style=shape.labelup, size=size.tiny, color=#0F18BF, textcolor=color.white, transp=0)
plotshape(condition == "Support Line Crossing Signals" ? showlabels and sellSignallk ? OTT*1.005 : na : showlabels and sellSignallc ? OTT*1.005 : na, title="SELL", text="SELL", location=location.abovebar, style=shape.labeldown, size=size.tiny, color=#0F18BF, textcolor=color.white, transp=0)
  
ottBuyColor=#77DD77
ottSellColor=#FF0000
vColor = strategy.position_size > 0 ? ottBuyColor : ottSellColor

if condition == "Support Line Crossing Signals"
    strategy.entry("BUY", true, 1, when = buySignalk)
    strategy.entry("SELL", false, 1, when = sellSignallk)
else
    strategy.entry("BUY", true, 1, when = buySignalc)
    strategy.entry("SELL", false, 1, when = sellSignallc)

mPlot = plot(close, title="", style=plot.style_circles, linewidth=0,display=display.none)

longFillColor = highlighting ? (Var>OTT ? color.green : na) : na
shortFillColor = highlighting ? (Var<OTT ? color.red : na) : na
fill(mPlot, pALL, title="UpTrend Highligter", color=longFillColor)
fill(mPlot, pALL, title="DownTrend Highligter", color=shortFillColor)

barcolor(barcoloing ? vColor : na)