Strategi ini menggabungkan Average True Range (ATR), Relative Strength Index (RSI) dan trailing stop loss untuk mencapai trend adaptatif.
Menghitung ATR. ATR menunjukkan volatilitas pasar dan tingkat risiko. Strategi ini menggunakan ATR untuk menghitung stop loss dinamis untuk pengendalian risiko adaptif.
Perhitungan RSI. RSI menilai status overbought/oversold. Ketika RSI di atas 50 itu menandakan prospek bullish, ketika di bawah 50 prospek bearish. Strategi ini menggunakan RSI untuk menentukan arah tren.
Pelacakan stop loss. Menurut level stop loss yang dihitung oleh ATR dan arah tren oleh RSI, strategi ini terus memindahkan stop loss untuk melacak fluktuasi harga, untuk memaksimalkan keuntungan sambil memastikan stop loss yang efektif.
Secara khusus, panjang ketika RSI naik di atas 50, pendek ketika turun di bawah 50, lalu bergerak stop loss berdasarkan ATR untuk mengunci keuntungan di sepanjang tren.
ATR adaptif stop loss mempertimbangkan volatilitas pasar, menghindari stop loss yang terlalu luas atau terlalu ketat.
RSI dapat diandalkan mengidentifikasi tren, menghindari whipsaws.
Stop loss yang mengikuti tren untuk memperluas target keuntungan.
Parameter ATR dan RSI perlu dioptimalkan untuk backtest, jika tidak akan mempengaruhi kinerja strategi.
Meskipun dengan perlindungan stop loss, risiko masih ada untuk lonjakan harga tiba-tiba untuk menembus stop loss.
Kinerja strategi sangat bergantung pada pengaturan parameter untuk produk yang berbeda.
Pertimbangkan algoritma pembelajaran mesin untuk optimasi parameter adaptif.
Tambahkan kontrol ukuran posisi untuk penyesuaian dinamis berdasarkan kondisi pasar, untuk mengurangi probabilitas penetrasi stop loss.
Tambahkan lebih banyak indikator tren untuk menghindari kehilangan titik pembalikan tren utama.
Strategi ini mengintegrasikan ATR, RSI dan trailing stop loss untuk sistem mengikuti tren adaptif khas. Melalui penyesuaian parameter dapat disesuaikan dengan fleksibel dengan produk perdagangan yang berbeda, strategi mengikuti tren universal yang direkomendasikan. Dengan lebih banyak penilaian dan optimasi pembelajaran mesin, dapat mencapai kinerja yang lebih baik.
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-19 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy(title="UTBot Strategy", overlay = true ) // CREDITS to @HPotter for the orginal code. // CREDITS to @Yo_adriiiiaan for recently publishing the UT Bot study based on the original code - // CREDITS to @TradersAITradingPlans for making this Strategy. // Strategy fixed with Time period by Kirk65. // I am using this UT bot with 2 hours time frame with god resultss. Alert with "Once per bar" and stoploss 1.5%. If Alerts triggered and price goes against Alert. Stoploss will catch it. Wait until next Alert. // While @Yo_adriiiiaan mentions it works best on a 4-hour timeframe or above, witch is a lot less risky, but less profitable. testStartYear = input(2019, "BACKTEST START YEAR", minval = 1980, maxval = 2222) testStartMonth = input(01, "BACKTEST START MONTH", minval = 1, maxval = 12) testStartDay = input(01, "BACKTEST START DAY", minval = 1, maxval = 31) testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0) testStopYear = input(2222, "BACKTEST STOP YEAR", minval=1980, maxval = 2222) testStopMonth = input(12, "BACKTEST STOP MONTH", minval=1, maxval=12) testStopDay = input(31, "BACKTEST STOP DAY", minval=1, maxval=31) testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, 0, 0) testPeriod = true SOURCE = input(hlc3) RSILENGTH = input(14, title = "RSI LENGTH") RSICENTERLINE = input(52, title = "RSI CENTER LINE") MACDFASTLENGTH = input(7, title = "MACD FAST LENGTH") MACDSLOWLENGTH = input(12, title = "MACD SLOW LENGTH") MACDSIGNALSMOOTHING = input(12, title = "MACD SIGNAL SMOOTHING") a = input(10, title = "Key Vaule. 'This changes the sensitivity'") SmoothK = input(3) SmoothD = input(3) LengthRSI = input(14) LengthStoch = input(14) RSISource = input(close) c = input(10, title="ATR Period") xATR = atr(c) nLoss = a * xATR xATRTrailingStop = iff(close > nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), close - nLoss), iff(close < nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), close + nLoss), iff(close > nz(xATRTrailingStop[1], 0), close - nLoss, close + nLoss))) pos = iff(close[1] < nz(xATRTrailingStop[1], 0) and close > nz(xATRTrailingStop[1], 0), 1, iff(close[1] > nz(xATRTrailingStop[1], 0) and close < nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0))) color = pos == -1 ? red: pos == 1 ? green : blue ema= ema(close,1) above = crossover(ema,xATRTrailingStop ) below = crossover(xATRTrailingStop,ema) buy = close > xATRTrailingStop and above sell = close < xATRTrailingStop and below barbuy = close > xATRTrailingStop barsell = close < xATRTrailingStop plotshape(buy, title = "Buy", text = 'Buy', style = shape.labelup, location = location.belowbar, color= green,textcolor = white, transp = 0, size = size.tiny) plotshape(sell, title = "Sell", text = 'Sell', style = shape.labeldown, location = location.abovebar, color= red,textcolor = white, transp = 0, size = size.tiny) barcolor(barbuy? green:na) barcolor(barsell? red:na) //alertcondition(buy, title='Buy', message='Buy') //alertcondition(sell, title='Sell', message='Sell') if (buy) strategy.entry("UTBotBuy",strategy.long, when=testPeriod) if (sell) strategy.entry("UTBotSell",strategy.short, when=testPeriod)