Strategi Pelacakan Rata-rata Bergerak Dinamis

Penulis:ChaoZhang, Tanggal: 2023-11-24 16:59:25
Tag:

img

Gambaran umum

Ide inti dari strategi ini adalah menggunakan rata-rata bergerak dinamis untuk pelacakan tren, mengatur stop loss dan mengambil keuntungan, dan menggabungkan teknik lilin Heikin Ashi untuk penilaian sinyal panjang / pendek. Indikator ATR digunakan untuk menghitung rata-rata bergerak dinamis dan posisi stop loss.

Prinsip-prinsip

Strategi ini pertama-tama menghitung indikator ATR, kemudian menggabungkan sumber harga input dan parameter untuk menghitung rata-rata bergerak dinamis. Sinyal panjang / pendek dihasilkan ketika harga melintasi di atas / di bawah rata-rata bergerak dinamis. Sementara itu, posisi stop loss dan take profit diatur untuk melacak perubahan harga secara real time.

Secara khusus, indikator ATR dan parameter nLoss dihitung terlebih dahulu. Kemudian harga periode saat ini dan posisi stop loss periode sebelumnya dibandingkan untuk memperbarui garis stop loss. Ketika harga menembus garis stop loss periode sebelumnya, sinyal panjang / pendek pos dan warna yang sesuai dihasilkan. Ketika sinyal perdagangan dipicu, tanda panah digambarkan. Akhirnya posisi ditutup berdasarkan logika stop loss / take profit.

Analisis Keuntungan

Keuntungan terbesar dari strategi ini adalah penggunaan rata-rata bergerak dinamis untuk melacak perubahan harga secara real time. Hal ini menangkap tren lebih baik daripada rata-rata bergerak tetap tradisional dan mengurangi kemungkinan stop loss. Selain itu, menggabungkan stop loss berbasis ATR memungkinkan penyesuaian posisi stop loss yang fleksibel berdasarkan volatilitas pasar untuk mengontrol risiko secara efektif.

Risiko dan Solusi

Risiko utama dari strategi ini adalah bahwa harga dapat naik/turun secara signifikan, menyebabkan sinyal palsu ketika stop loss dipukul.

Solusi termasuk mengoptimalkan periode rata-rata bergerak, menyesuaikan koefisien ATR dan stop loss untuk menurunkan probabilitas sinyal palsu. Filter tambahan dapat ditambahkan untuk menghindari perdagangan yang terlalu padat.

Arahan Optimasi

Strategi dapat dioptimalkan dalam aspek berikut:

  1. Uji berbagai jenis dan periode rata-rata bergerak untuk menemukan kombinasi parameter yang optimal

  2. Mengoptimalkan parameter periode ATR untuk menyeimbangkan sensitivitas stop loss

  3. Tambahkan filter dan indikator tambahan untuk meningkatkan kualitas sinyal

  4. Sesuaikan nilai stop loss/take profit untuk mengoptimalkan rasio reward risiko

Kesimpulan

Ide inti dari strategi ini adalah menggunakan rata-rata bergerak dinamis untuk melacak perubahan harga secara real time, memanfaatkan indikator ATR untuk mengatur posisi stop loss secara dinamis, mengendalikan risiko secara ketat sambil melacak tren.


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

Lebih banyak