Эта стратегия сочетает в себе средний истинный диапазон (ATR), индекс относительной силы (RSI) и отслеживание стоп-лосса для достижения адаптивного тренда.
Вычислить ATR. ATR показывает волатильность рынка и уровень риска. Эта стратегия использует ATR для вычисления динамического стоп-лосса для адаптивного контроля риска.
Расчет RSI. RSI определяет статус перекупленности/перепроданности. Когда RSI выше 50, это сигнализирует о бычьем прогнозе, когда ниже 50, о медвежьем. Эта стратегия использует RSI для определения направления тренда.
Отслеживание стоп-лосса. Согласно уровню стоп-лосса, рассчитанному ATR и направлению тренда RSI, эта стратегия продолжает движение стоп-лосса для отслеживания колебаний цен, чтобы максимизировать прибыль, обеспечивая эффективную стоп-лосс.
В частности, длинный, когда RSI превышает 50, короткий, когда падает ниже 50, затем перемещение стоп-лосса на основе ATR, чтобы зафиксировать прибыль вдоль тренда.
ATR адаптивный стоп-лосс учитывает волатильность рынка, избегает слишком широких или слишком узких стоп-лосков.
RSI надежно определяет тренд, избегает сбоев.
Следующая остановка потерь отслеживает тенденцию к увеличению целевой прибыли.
Параметры ATR и RSI должны быть оптимизированы для обратного тестирования, иначе это повлияет на эффективность стратегии.
Хотя с защитой от стоп-лосса, риск все еще существует для внезапного скачка цены, чтобы проникнуть в стоп-лосс.
Исполнение стратегии во многом зависит от настройки параметров для разных продуктов.
Рассмотрим алгоритмы машинного обучения для адаптивной оптимизации параметров.
Добавить управление размером позиции для динамической корректировки на основе рыночных условий, чтобы уменьшить вероятность проникновения стоп-лосса.
Добавьте больше индикаторов тренда, чтобы избежать пропусков основных точек переворота тренда.
Эта стратегия объединяет ATR, RSI и последующую стоп-лосс для типичной адаптивной системы трендоустройства. Благодаря настройке параметров она может быть гибко адаптирована к различным торговым продуктам, рекомендуемой универсальной стратегии трендоустройства. С помощью большего количества суждений и оптимизации машинного обучения она может достичь еще лучших результатов.
/*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)