
Основная идея этой стратегии заключается в том, чтобы использовать среднюю линию T3 и ATR для адаптации к движущимся стопам, чтобы захватить входные и выходные точки в тренде, относящиеся к стратегии отслеживания тренда. Когда цена прорывает среднюю линию T3, генерируется торговый сигнал, и в то время, когда она прорывается, используются значения ATR для установки стоп-лосса и стоп-стопа, чтобы реализовать автоматический стоп-лосс.
Стратегия состоит в основном из показателей средней линии T3, показателей ATR и ATR мобильного стоп-ложа.
T3 средняя линия - это скользящая средняя с гладкостью, которая уменьшает задержку кривой, позволяя ей быстрее реагировать на изменения цены. Когда цена прорывается ниже средней линии, она генерирует сигнал покупки; когда цена прорывается ниже средней линии, она генерирует сигнал продажи.
Индекс ATR используется для расчета степени волатильности рынка и установления стоп-лосса. Чем больше значение ATR, тем больше волатильность рынка, в этом случае требуется установление более широкого стоп-лосса; чем меньше значение ATR, тем меньше волатильность рынка, и может быть установлено более узкое стоп-лосса.
ATR - мобильный механизм остановки, который в реальном времени регулирует положение стоп-линии в соответствии с ATR, чтобы она могла следовать за ценой и оставаться в разумных пределах. Таким образом, предотвращается как вырыв стоп-дистанции из-за слишком близкого расстояния, так и предотвращение эффективного контроля над риском из-за слишком широкого стоп-дистанции.
Комбинируя использование T3 показателя для определения направления, ATR показателя для расчета волатильности и ATR мобильного механизма остановки, эта стратегия обеспечивает более эффективное захват тренда и контроль риска.
Эта стратегия имеет следующие преимущества:
Применение средней линии T3 повышает точность захвата тенденций.
ATR динамически рассчитывает рыночные колебания, более разумные стоп-посты и стоп-посты.
ATR - мобильный механизм остановки убытков, который позволяет остановке убытков работать в режиме реального времени с ценой, эффективно контролируя риск.
Интеграция механизмов оценки показателей и остановки убытков для автоматизированного отслеживания трендов.
Посредством webhook можно подключить внешние торговые платформы для автоматизации заказов.
Однако эта стратегия также несет в себе некоторые риски:
Неправильно настроенные параметры средней линии T3 могут пропустить лучшие возможности для тренда. Можно тестировать параметры разных периодов, чтобы найти оптимальные параметры.
ATR не рассчитывается точно, стоп-драйв слишком большой или слишком маленький, чтобы эффективно контролировать риск. ATR может быть скорректирован в зависимости от рыночных колебаний.
При резких колебаниях стоп-линия может быть нарушена, что приводит к чрезмерным потерям. Можно установить разумную линию общего убытка, чтобы избежать чрезмерных потерь.
В двунаправленном повторяющемся режиме может возникнуть ситуация, когда часто запускается остановка. Можно соответствующим образом ослабить расстояние для мобильной остановки ATR.
Эта стратегия может быть оптимизирована в следующих аспектах:
Оптимизация среднелинейных параметров T3 для поиска наиболее подходящего цикла сглаживания.
Тестирование различных параметров цикла ATR для вычисления ATR, наиболее отражающего рыночные колебания.
Оптимизация эластичного диапазона ATR для мобильной остановки дальности, чтобы предотвратить чрезмерную чувствительность остановки.
Добавить соответствующие фильтрующие условия, чтобы избежать частых сделок на рынке с двусторонними колебаниями.
В сочетании с индикаторами по определению тенденций, повышается точность определения направления прибыли.
Автоматическая оптимизация параметров с использованием методов машинного обучения.
Эта стратегия включает в себя использование T3 средней линии, чтобы определить направление тренда, ATR-индикатор для вычисления стоп-стоп и ATR-мобильный механизм для регулирования стоп-дистанции, для автоматического отслеживания тенденций и эффективного контроля риска. Это надежная стратегия для отслеживания тенденций. В практическом применении все еще требуется постоянное тестирование и оптимизация, чтобы найти оптимальную комбинацию параметров, подходящих для текущей рыночной среды, чтобы получить лучший эффект стратегии.
/*backtest
start: 2024-01-21 00:00:00
end: 2024-02-20 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy(title='UT Bot Alerts (QuantNomad) Strategy', overlay=true)
T3 = input(100)//600
// Input for Long Settings
// Input for Long Settings
xPrice3 = close
xe1 = ta.ema(xPrice3, T3)
xe2 = ta.ema(xe1, T3)
xe3 = ta.ema(xe2, T3)
xe4 = ta.ema(xe3, T3)
xe5 = ta.ema(xe4, T3)
xe6 = ta.ema(xe5, T3)
b3 = 0.7
c1 = -b3*b3*b3
c2 = 3*b3*b3+3*b3*b3*b3
c3 = -6*b3*b3-3*b3-3*b3*b3*b3
c4 = 1+3*b3+b3*b3*b3+3*b3*b3
nT3Average = c1 * xe6 + c2 * xe5 + c3 * xe4 + c4 * xe3
//plot(nT3Average, color=color.white, title="T3")
// Buy Signal - Price is below T3 Average
buySignal3 = xPrice3 < nT3Average
sellSignal3 = xPrice3 > nT3Average
// Inputs
a = input(1, title='Key Value. "This changes the sensitivity"')
c = input(50, title='ATR Period')
h = input(true, title='Signals from Heikin Ashi Candles')
riskRewardRatio = input(1, title='Risk Reward Ratio')
xATR = ta.atr(c)
nLoss = a * xATR
src = h ? request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close, lookahead=barmerge.lookahead_off) : close
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
ema = ta.ema(src, 1)
above = ta.crossover(ema, xATRTrailingStop)
below = ta.crossunder(ema, xATRTrailingStop)
buy = src > xATRTrailingStop and above
sell = src < xATRTrailingStop and below
barbuy = src > xATRTrailingStop
barsell = src < xATRTrailingStop
plotshape(buy, title='Buy', text='Buy', style=shape.labelup, location=location.belowbar, color=color.new(color.green, 0), textcolor=color.new(color.white, 0), size=size.tiny)
plotshape(sell, title='Sell', text='Sell', style=shape.labeldown, location=location.abovebar, color=color.new(color.red, 0), textcolor=color.new(color.white, 0), size=size.tiny)
barcolor(barbuy ? color.new(color.green, 90) : na)
barcolor(barsell ? color.new(color.red, 90) : na)
var float entryPrice = na
var float takeProfitLong = na
var float stopLossLong = na
var float takeProfitShort = na
var float stopLossShort = na
if buy and buySignal3
entryPrice := src
takeProfitLong := entryPrice + nLoss * riskRewardRatio
stopLossLong := entryPrice - nLoss
takeProfitShort := na
stopLossShort := na
if sell and sellSignal3
entryPrice := src
takeProfitShort := entryPrice - nLoss * riskRewardRatio
stopLossShort := entryPrice + nLoss
takeProfitLong := na
stopLossLong := na
// Strategy order conditions
acct = "Sim101"
ticker = "ES 12-23"
qty = 1
OCOMarketLong = '{ "alert": "OCO Market Long", "account": "' + str.tostring(acct) + '", "ticker": "' + str.tostring(ticker) + '", "qty": "' + str.tostring(qty) + '", "take_profit_price": "' + str.tostring(takeProfitLong) + '", "stop_price": "' + str.tostring(stopLossLong) + '", "tif": "DAY" }'
OCOMarketShort = '{ "alert": "OCO Market Short", "account": "' + str.tostring(acct) + '", "ticker": "' + str.tostring(ticker) + '", "qty": "' + str.tostring(qty) + '", "take_profit_price": "' + str.tostring(takeProfitShort) + '", "stop_price": "' + str.tostring(stopLossShort) + '", "tif": "DAY" }'
CloseAll = '{ "alert": "Close All", "account": "' + str.tostring(acct) + '", "ticker": "' + str.tostring(ticker) + '" }'
strategy.entry("Long", strategy.long, when=buy and buySignal3, alert_message=OCOMarketLong)
strategy.entry("Short", strategy.short, when=sell and sellSignal3, alert_message=OCOMarketShort)
// Setting the take profit and stop loss for long trades
strategy.exit("Take Profit/Stop Loss", "Long", stop=stopLossLong, limit=takeProfitLong,alert_message=CloseAll)
// Setting the take profit and stop loss for short trades
strategy.exit("Take Profit/Stop Loss", "Short", stop=stopLossShort, limit=takeProfitShort,alert_message=CloseAll)
// Plot trade setup boxes
bgcolor(buy ? color.new(color.green, 90) : na, transp=0, offset=-1)
bgcolor(sell ? color.new(color.red, 90) : na, transp=0, offset=-1)
longCondition = buy and not na(entryPrice)
shortCondition = sell and not na(entryPrice)
// var line longTakeProfitLine = na
// var line longStopLossLine = na
// var line shortTakeProfitLine = na
// var line shortStopLossLine = na
// if longCondition
// longTakeProfitLine := line.new(bar_index, takeProfitLong, bar_index + 1, takeProfitLong, color=color.green, width=2)
// longStopLossLine := line.new(bar_index, stopLossLong, bar_index + 1, stopLossLong, color=color.red, width=2)
// // label.new(bar_index + 1, takeProfitLong, str.tostring(takeProfitLong, "#.#####"), color=color.green, style=label.style_none, textcolor=color.green, size=size.tiny)
// // label.new(bar_index + 1, stopLossLong, str.tostring(stopLossLong, "#.#####"), color=color.red, style=label.style_none, textcolor=color.red, size=size.tiny)
// if shortCondition
// shortTakeProfitLine := line.new(bar_index, takeProfitShort, bar_index + 1, takeProfitShort, color=color.green, width=2)
// shortStopLossLine := line.new(bar_index, stopLossShort, bar_index + 1, stopLossShort, color=color.red, width=2)
// // label.new(bar_index + 1, takeProfitShort, str.tostring(takeProfitShort, "#.#####"), color=color.green, style=label.style_none, textcolor=color.green, size=size.tiny)
// // label.new(bar_index + 1, stopLossShort, str.tostring(stopLossShort, "#.#####"), color=color.red, style=label.style_none, textcolor=color.red, size=size.tiny)
alertcondition(buy, 'UT Long', 'UT Long')
alertcondition(sell, 'UT Short', 'UT Short')