Strategi pengoptimuman penjejakan arah aliran dinamik


Tarikh penciptaan: 2024-01-12 11:20:04 Akhirnya diubah suai: 2024-01-12 11:20:04
Salin: 2 Bilangan klik: 551
1
fokus pada
1617
Pengikut

Strategi pengoptimuman penjejakan arah aliran dinamik

Gambaran keseluruhan

Strategi ini secara dinamik memetakan garis sokongan dengan mengira petunjuk CMO dan kadar perubahan. Strategi ini juga mengunci lebih banyak keuntungan dengan mengoptimumkan kawasan stop loss berhampiran garis sokongan.

Prinsip Strategi

  1. Mengira Indeks CMO untuk Menentukan Trend Harga
  2. Var, yang mencerminkan trend perubahan harga
  3. Garis sokongan berdasarkan kadar perubahan
  4. Mengira garis hentian yang dioptimumkan untuk longStop dan shortStop
  5. Menjana isyarat perdagangan apabila harga melepasi garis sokongan

Analisis kelebihan

  1. Menggunakan Indeks CMO untuk Mengesan Trend Harga dan Mengelakkan Penembusan Palsu
  2. Garis sokongan dapat menentukan arah trend dengan jelas
  3. Barisan Hentian yang Dioptimumkan dapat mengunci lebih banyak keuntungan
  4. Isyarat perdagangan mudah dan jelas, dan mudah diuruskan

Analisis risiko

  1. Indeks CMO Terlewat, Mungkin Melewatkan Titik Peralihan Harga
  2. Garis sokongan yang ditembusi mungkin menghasilkan isyarat palsu
  3. Pengoptimuman yang tidak tepat untuk jangkaan hentian boleh menyebabkan kerugian yang lebih besar

Penyelesaian risiko:

  1. Menyesuaikan parameter CMO untuk mengurangkan ketinggalan
  2. Menapis isyarat palsu dalam kombinasi dengan petunjuk lain
  3. Ujian untuk menentukan nisbah pengoptimuman kerugian yang sesuai

Arah pengoptimuman

  1. Lebih banyak penggabungan, penapisan isyarat palsu
  2. AI secara automatik mengoptimumkan jangkauan stop loss
  3. Pengaturan automatik bagi jumlah transaksi

ringkaskan

Strategi ini berfungsi dengan baik secara keseluruhan, menggunakan garis sokongan untuk menentukan arah trend. Ia juga berkesan dengan menggabungkan indikator CMO dan pengoptimuman stop loss. Walau bagaimanapun, terdapat risiko isyarat palsu tertentu yang dapat dioptimumkan melalui kombinasi pelbagai indikator.

Kod 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)