Strategi Penjejakan Purata Pergerakan Dinamik


Tarikh penciptaan: 2023-11-24 16:59:25 Akhirnya diubah suai: 2023-11-24 16:59:25
Salin: 0 Bilangan klik: 608
1
fokus pada
1617
Pengikut

Strategi Penjejakan Purata Pergerakan Dinamik

Gambaran keseluruhan

Gagasan utama strategi ini adalah untuk menggunakan purata bergerak dinamik untuk mengesan trend, menetapkan stop loss, dan membuat penghakiman isyarat polygon dalam kombinasi dengan petunjuk teknik Hecklin. Indeks ATR digunakan untuk mengira purata bergerak dinamik dan kedudukan stop loss.

Prinsip Strategi

Strategi ini pertama-tama mengira indikator ATR, kemudian menggabungkan sumber harga dan parameter input untuk mengira purata bergerak yang dinamik. Ia menghasilkan isyarat lebih banyak / kosong apabila harga lebih tinggi / lebih rendah daripada purata bergerak yang dinamik. Ia juga menetapkan kedudukan hentian hentian dan mengesan perubahan harga yang dikemas kini secara langsung.

Khususnya, pertama-tama mengira indikator ATR dan parameter nLoss. Kemudian mengira harga kitaran semasa dan kedudukan hentian kitaran sebelumnya, membandingkan kedua-duanya untuk memperbaharui garis hentian. Apabila harga menembusi garis hentian kitaran sebelumnya, ia menghasilkan lebih banyak / kosong pos dan warna yang sesuai; Apabila isyarat perdagangan dihasilkan, tanda panah digambar.

Analisis kelebihan

Kelebihan utama strategi ini adalah penggunaan purata bergerak dinamik untuk mengesan perubahan harga dalam masa nyata. Ini lebih baik daripada purata bergerak tetap tradisional untuk menangkap trend dan mengurangkan kemungkinan berhenti.

Risiko dan Penyelesaian

Risiko utama strategi ini adalah bahawa harga mungkin akan melompat tinggi, sehingga melanggar garis stop loss menghasilkan isyarat yang salah. Selain itu, penetapan syarat yang tidak betul juga boleh menyebabkan perdagangan yang terlalu kerap.

Penyelesaiannya adalah untuk mengoptimumkan tempoh purata bergerak, menyesuaikan saiz ATR dan faktor stop loss, mengurangkan kebarangkalian isyarat salah. Selain itu, anda boleh menetapkan syarat penapisan untuk mengelakkan perdagangan yang terlalu padat.

Arah pengoptimuman

Strategi ini boleh dioptimumkan dengan:

  1. Uji purata bergerak pelbagai jenis dan tempoh untuk mencari kombinasi parameter terbaik

  2. Mengoptimumkan parameter kitaran ATR, menyeimbangkan sensitiviti henti rugi

  3. Tambahan syarat penapisan dan penunjuk untuk meningkatkan kualiti isyarat

  4. Menyesuaikan nilai stop loss dan optimumkan nisbah risiko-keuntungan

ringkaskan

Idea teras strategi ini adalah untuk mengesan perubahan harga secara real-time pada rata-rata bergerak dinamik, menggunakan parameter ATR untuk menetapkan kedudukan hentian secara dinamik, dan mengawal risiko dengan ketat semasa mengikuti trend. Dengan pengoptimuman parameter dan pengubahsuaian peraturan, strategi ini boleh dilatih menjadi sistem kuantitatif yang sangat praktikal.

Kod sumber strategi
/*backtest
start: 2022-11-23 00:00:00
end: 2023-11-05 05:20:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"BTC_USDT","stocks":0}]
*/

//@version=5
strategy(title='UT Bot v5', overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
//CREDITS to HPotter for the orginal code. The guy trying to sell this as his own is a scammer lol. 
//Edited and converted to @version=5 by SeaSide420 for Paperina
// Inputs
AllowBuy = input(defval=true, title='Allow Buy?')
AllowSell = input(defval=false, title='Allow Sell?')
h = input(false, title='Signals from Heikin Ashi Candles')
//revclose = input(defval=true, title='Close when reverse signal?')
Price = input(defval=open, title='Price Source (recommended OPEN to avoid repainting)')
smoothing = input.string(title="Moving Average Type", defval="HMA", options=["SMA", "EMA", "WMA", "HMA"])
MA_Period = input(2, title='This changes the MAPeriod')
a = input.float(1, title='This changes the sensitivity',step=0.1)
c = input(11, title='ATR Period')
TakeProfit = input.int(defval=50000, title='Take Profit ($)', minval=1)
StopLoss = input.int(defval=50000, title='Stop Loss ($)', minval=1)
xATR = ta.atr(c)
nLoss = a * xATR
src = h ? request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, Price, lookahead=barmerge.lookahead_off) : Price
xATRTrailingStop = 0.0
iff_1 = src > nz(xATRTrailingStop[1], 0) ? src - nLoss : src + nLoss
iff_2 = src < nz(xATRTrailingStop[1], 0) and src[1] < nz(xATRTrailingStop[1], 0) ? math.min(nz(xATRTrailingStop[1]), src + nLoss) : iff_1
xATRTrailingStop := src > nz(xATRTrailingStop[1], 0) and src[1] > nz(xATRTrailingStop[1], 0) ? math.max(nz(xATRTrailingStop[1]), src - nLoss) : iff_2
pos = 0
iff_3 = src[1] > nz(xATRTrailingStop[1], 0) and src < nz(xATRTrailingStop[1], 0) ? -1 : nz(pos[1], 0)
pos := src[1] < nz(xATRTrailingStop[1], 0) and src > nz(xATRTrailingStop[1], 0) ? 1 : iff_3
xcolor = pos == -1 ? color.red : pos == 1 ? color.green : color.blue
ma_function(src, MA_Period) =>
    switch smoothing
        "SMA" => ta.sma(src, MA_Period)
        "EMA" => ta.ema(src, MA_Period)
        "WMA" => ta.wma(src, MA_Period)
        => ta.hma(src, MA_Period)
thema = ma_function(src, MA_Period)
above = ta.crossover(thema, xATRTrailingStop)
below = ta.crossover(xATRTrailingStop, thema)
buy = src > xATRTrailingStop and above
sell = src < xATRTrailingStop and below
barbuy = src > xATRTrailingStop
barsell = src < xATRTrailingStop
plot(thema,title="The M.A.",color=color.green,linewidth=2)
plot(xATRTrailingStop,title="The M.A.",color=color.red,linewidth=2)
plotshape(buy,  title = "Buy",  text = "Buy",  style = shape.labelup,   location = location.belowbar, color= color.green, textcolor = color.white, size = size.tiny)
plotshape(sell, title = "Sell", text = "Sell", style = shape.labeldown, location = location.abovebar, color= color.red,   textcolor = color.white, size = size.tiny)
barcolor(barbuy ? color.green : na)
barcolor(barsell ? color.red : na)
strategy.close_all(when=strategy.openprofit>TakeProfit,alert_message="Close- TakeProfit", comment = "TP")
strategy.close_all(when=strategy.openprofit<StopLoss-(StopLoss*2),alert_message="Close- StopLoss", comment = "SL")
strategy.close("buy", when =  sell and AllowSell==false , comment = "close buy")
strategy.close("sell", when =  buy and AllowBuy==false, comment = "close sell")
strategy.entry("buy", strategy.long, when = buy and AllowBuy)
strategy.entry("sell", strategy.short, when = sell and AllowSell)