Idea teras strategi ini adalah menggunakan purata bergerak dinamik untuk mengesan trend, menetapkan stop loss dan mengambil keuntungan, dan menggabungkan teknik lilin Heikin Ashi untuk penghakiman isyarat panjang / pendek.
Strategi ini mula-mula mengira penunjuk ATR, kemudian menggabungkan sumber harga input dan parameter untuk mengira purata bergerak dinamik. Isyarat panjang / pendek dihasilkan apabila harga melintasi di atas / di bawah purata bergerak dinamik. Sementara itu, kedudukan stop loss dan mengambil keuntungan ditetapkan untuk mengesan perubahan harga dalam masa nyata.
Secara khusus, penunjuk ATR dan parameter nLoss dikira terlebih dahulu. Kemudian harga tempoh semasa dan kedudukan stop loss tempoh sebelumnya dibandingkan untuk mengemas kini garisan stop loss. Apabila harga memecahkan garis stop loss tempoh sebelumnya, isyarat panjang / pendek pos dan warna yang sesuai dihasilkan. Apabila isyarat perdagangan dicetuskan, tanda anak panah dicatatkan. Akhirnya kedudukan ditutup berdasarkan logik stop loss / mengambil keuntungan.
Kelebihan terbesar strategi ini adalah penggunaan purata bergerak dinamik untuk mengesan perubahan harga dalam masa nyata. Ini menangkap trend yang lebih baik daripada purata bergerak tetap tradisional dan mengurangkan kemungkinan stop loss. Di samping itu, menggabungkan stop loss berasaskan ATR membolehkan penyesuaian fleksibel kedudukan stop loss berdasarkan turun naik pasaran untuk mengawal risiko dengan berkesan.
Risiko utama strategi ini adalah bahawa harga mungkin jurang ke atas / ke bawah dengan ketara, menyebabkan isyarat palsu apabila stop loss dipukul. Juga, tetapan keadaan yang tidak betul boleh menyebabkan perdagangan yang terlalu kerap.
Penyelesaian termasuk mengoptimumkan tempoh purata bergerak, menyesuaikan ATR dan pekali stop loss untuk mengurangkan kebarangkalian isyarat palsu. Penapis tambahan boleh ditambah untuk mengelakkan perdagangan yang terlalu padat.
Strategi ini boleh dioptimumkan dalam aspek berikut:
Uji pelbagai jenis dan tempoh purata bergerak untuk mencari kombinasi parameter yang optimum
Mengoptimumkan parameter tempoh ATR untuk mengimbangi kepekaan stop loss
Tambah penapis dan penunjuk tambahan untuk meningkatkan kualiti isyarat
Sesuaikan nilai stop loss/take profit untuk mengoptimumkan nisbah ganjaran risiko
Idea utama strategi ini adalah menggunakan purata bergerak dinamik untuk mengesan perubahan harga dalam masa nyata, menggunakan penunjuk ATR untuk menetapkan kedudukan stop loss secara dinamik, mengawal risiko dengan ketat sambil mengesan trend. Melalui pengoptimuman parameter dan penyempurnaan peraturan, strategi ini boleh disesuaikan ke dalam sistem kuantitatif yang sangat praktikal.
/*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)