Strategi Pelacakan Rata-rata Pergerakan Dinamis


Tanggal Pembuatan: 2023-11-24 16:59:25 Akhirnya memodifikasi: 2023-11-24 16:59:25
menyalin: 0 Jumlah klik: 608
1
fokus pada
1617
Pengikut

Strategi Pelacakan Rata-rata Pergerakan Dinamis

Ringkasan

Gagasan inti dari strategi ini adalah untuk menggunakan Moving Average untuk melacak tren, mengatur stop loss, dan melakukan penilaian sinyal multi-halangan dengan menggunakan petunjuk teknik Hecklin Berry. Indikator ATR digunakan untuk menghitung Moving Average dan posisi stop loss.

Prinsip Strategi

Strategi ini pertama-tama menghitung indikator ATR, kemudian menggabungkan sumber harga dan parameter input untuk menghitung moving average dinamis. Sinyal over/under dihasilkan ketika harga lebih tinggi / lebih rendah dari moving average dinamis.

Secara khusus, pertama-tama menghitung indikator ATR dan parameter nLoss. Kemudian menghitung harga siklus saat ini dan posisi stop loss dari siklus sebelumnya, membandingkan keduanya untuk memperbarui garis stop loss.

Analisis Keunggulan

Keuntungan terbesar dari strategi ini adalah menggunakan moving average dinamis untuk melacak perubahan harga secara real time. Ini lebih baik daripada moving average tetap tradisional untuk menangkap tren dan mengurangi kemungkinan stop loss. Selain itu, dengan ATR stop loss, posisi stop loss dapat disesuaikan secara fleksibel sesuai dengan amplitudo pergerakan pasar, untuk mengendalikan risiko secara efektif.

Risiko dan Solusi

Risiko utama dari strategi ini adalah bahwa harga mungkin akan melompat tinggi, sehingga menerobos garis stop loss dan menghasilkan sinyal yang salah. Selain itu, pengaturan kondisi yang tidak tepat juga dapat menyebabkan perdagangan yang terlalu sering.

Solusinya adalah mengoptimalkan periode moving average, menyesuaikan ukuran ATR dan stop loss, mengurangi probabilitas sinyal salah. Selain itu, Anda dapat mengatur kondisi penyaringan untuk menghindari perdagangan yang terlalu intensif.

Arah optimasi

Strategi ini dapat dioptimalkan dengan:

  1. Uji rata-rata bergerak dari berbagai jenis dan periode untuk menemukan kombinasi parameter terbaik

  2. Optimalkan parameter siklus ATR untuk menyeimbangkan sensitivitas stop loss

  3. Menambahkan kondisi dan indikator penyaringan tambahan untuk meningkatkan kualitas sinyal

  4. Adaptasi Stop Loss Stop Loss dan Optimalisasi Rasio Risiko Keuntungan

Meringkaskan

Inti dari strategi ini adalah untuk melacak perubahan harga secara real-time pada moving average dinamis, menggunakan indikator ATR untuk mengatur posisi stop loss secara dinamis, dan untuk mengontrol risiko secara ketat sambil melacak tren. Dengan mengoptimalkan parameter dan memodifikasi aturan, strategi ini dapat dilatih menjadi sistem kuantitatif yang sangat praktis.

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