
La estrategia utiliza una combinación de promedios móviles T3, indicadores ATR y fuerza de viraje para identificar señales de compra y venta, y para realizar operaciones de seguimiento de tendencias basadas en el cálculo de la posición de stop loss de ATR. La estrategia tiene la ventaja de responder rápidamente y controlar el riesgo de la operación.
Media móvil T3: calcula una media móvil T3 con un parámetro liso de T3 (default 100) para determinar la dirección de la tendencia.
ATR: calcula el ATR (la amplitud real media de las fluctuaciones) para determinar el tamaño de la posición de la parada de pérdidas.
ATR móvil de stop: basado en ATR calcula una línea móvil de stop, que se puede ajustar en función de los cambios en el precio y la volatilidad, para lograr el seguimiento de la tendencia.
Se produce una señal de compra cuando se cruza la línea de stop móvil ATR en el precio de cierre y está por debajo de la media T3.
Se produce una señal de venta cuando se cruza la línea de stop móvil ATR por debajo del precio de cierre y está por encima de la media T3.
Stop Loss: El precio de stop y stop se calcula en función del valor de ATR y el riesgo-rendimiento establecido por el usuario.
Después de comprar, el precio de parada es el precio de entrada menos el valor de ATR, el precio de parada es el precio de entrada más el valor de ATR multiplicado por la tasa de retorno del riesgo.
Después de la venta, el precio de parada es el precio de entrada más el valor de ATR, el precio de parada es el precio de entrada menos el valor de ATR multiplicado por la tasa de retorno del riesgo.
Cuando el precio dispara el precio de stop loss o stop loss, la posición se despega.
El parámetro de promedio T3 tiene por defecto 100 y es más sensible que el promedio móvil en general, lo que permite una respuesta más rápida a los cambios en los precios.
El stop loss móvil calculado con ATR se puede basar en el precio del trail de fluctuación del mercado, evitando el riesgo de que el stop loss sea superado. La posición de stop loss está basada en ATR y puede controlar el riesgo de retorno por transacción.
La línea de parada móvil ATR es capaz de seguir la tendencia y no se activa en el campo de salida, incluso cuando el precio se corrige a corto plazo, lo que reduce la señal de error.
El ciclo de promedio T3 y el ciclo ATR se pueden optimizar para ajustar los parámetros para diferentes mercados y mejorar la estabilidad de la estrategia.
En caso de una situación extrema, el precio puede romper directamente la línea de parada y causar pérdidas. Se puede ampliar adecuadamente el ciclo ATR y la distancia de parada para mitigar.
Al cruzar la línea de parada móvil en el momento de una reversión de la tendencia, el precio puede causar pérdidas. Se puede combinar con otros indicadores para determinar la tendencia y evitar el comercio cerca del punto de reversión.
La optimización de parámetros requiere un amplio respaldo de datos históricos y existe el riesgo de optimización excesiva. Se debe adoptar una combinación de parámetros de optimización de varios mercados y períodos de tiempo, y no se debe depender de un solo conjunto de datos.
Prueba de diferentes parámetros de ciclo de la media T3 para encontrar la combinación óptima de parámetros que equilibren la sensibilidad y la estabilidad
Prueba de los parámetros del ciclo ATR para encontrar el equilibrio óptimo entre el control del riesgo y la tendencia de ganancias
La combinación de indicadores como el RSI y el MACD evita el cambio de tendencia y el error de negociación
Aprendizaje automático para entrenar los parámetros óptimos y reducir las limitaciones de la optimización manual
Aumentar las estrategias de gestión de posiciones para controlar mejor el riesgo
Esta estrategia integra las ventajas de la línea media T3 y el indicador ATR, que permite responder rápidamente a los cambios en los precios y controlar el riesgo. La estabilidad de la estrategia y la eficiencia de la negociación se pueden mejorar aún más mediante la optimización de Parameter y la combinación con otros indicadores.
/*backtest
start: 2022-10-31 00:00:00
end: 2023-11-06 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy(title='UT Bot Alerts (QuantNomad) Strategy w/ NinjaView', 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 ,alert_message=OCOMarketLong)
strategy.entry("Short", strategy.short, when=sell , 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')