
La estrategia de seguimiento de tendencias es una estrategia de seguimiento de pérdidas y pérdidas basada en el indicador de tendencias TrendAlert. Determina la dirección de la tendencia a través del indicador de tendencias TrendAlert y permite la entrada de seguimiento de tendencias.
La estrategia se compone principalmente de las siguientes partes:
El indicador de TrendAlert determina la dirección de la tendencia. Cuando el TrendAlert es mayor que 0 es una señal positiva, y menor que 0 es una señal negativa.
El indicador ATR calcula el rango de fluctuación reciente de los precios. ATR multiplicado por el ATR StopMultiplier atStopMultiplier como punto de parada fijo.
El precio más bajo (lowestLow) y el precio más alto (highestHigh) en combinación con el ATR para detener la construcción de la trazabilidad de la parada. Si el control de los parámetros de la estructura está activado.
Entra en posiciones de venta o venta libre según la dirección de la señal de tendencia.
Posiciones cerradas después de que el precio haya activado el stop loss o el stop loss.
La estrategia utiliza las tendencias para filtrar falsas señales, rastrear los riesgos de control de pérdidas, obtener ganancias para asegurar la rentabilidad y mejorar la estabilidad del sistema de negociación en general.
La estrategia tiene las siguientes ventajas:
El filtro de tendencias y el seguimiento de los estancamientos son garantías dobles para evitar el ruido del mercado y garantizar que el riesgo de las operaciones esté bajo control.
El ATR se adapta a la configuración de stop loss para evitar la optimización excesiva y se aplica a una variedad de entornos de mercado.
El objetivo de la suspensión es asegurar el beneficio y evitar que se lo coman.
La lógica de la estrategia es clara y concisa, fácil de entender las modificaciones, adecuada para el desarrollo secundario de los comerciantes cuantitativos.
Escrito en el lenguaje de scripts Pine, se puede usar directamente en la plataforma TradingView sin necesidad de conocimientos de programación.
La estrategia también tiene sus riesgos:
Los errores en el juicio de tendencias pueden provocar que se activen entradas y paradas innecesarias. Se puede relajar adecuadamente la parada de pérdidas o filtrar las señales de entrada.
Cuando la situación es muy fluctuante, el ATR puede subestimar la amplitud real. En este caso, se puede aumentar el multiplicador de pérdidas de ATRatrStopMultiplier.
El objetivo de la parada puede limitar el espacio de ganancias de la estrategia. Se puede ajustar en función del parámetro limitMultiplier del mercado.
La lógica del código exist se basa solo en el precio, y en realidad debe combinarse con la gestión del tiempo.
La estrategia se puede optimizar en los siguientes aspectos:
Optimización de los parámetros ATR longitud atrLength y el multiplicador de parada atrStopMultiplier, ajustar la sensibilidad del algoritmo de parada.
En el caso de las mujeres, el objetivo de este estudio es evaluar las tendencias y los indicadores para encontrar mejores oportunidades de ingreso.
Seleccionar o ajustar los parámetros de la parada objetivo según las características de la variedad de transacción específica.
Aumentar el mecanismo de tiempo de espera para evitar el riesgo de pasar la noche solo.
La combinación de filtros de volumen de transacciones y brechas falsas mejora la estabilidad de la estrategia.
En general, esta estrategia es una estrategia de seguimiento de tendencias muy práctica. Utiliza indicadores para determinar la dirección de la tendencia para lograr el seguimiento de la tendencia, mientras que se establece para adaptarse a la pérdida para asegurar el control del riesgo. La estrategia es lógica clara, fácil de usar, muy adecuada para el aprendizaje de los principiantes.
/*backtest
start: 2023-01-29 00:00:00
end: 2024-02-04 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © jaque_verdatre
//@version=5
strategy("TrendAlert Based", overlay = true)
// Get inputs
TrendAlert = input.source(close, "TrendAlert")
atrLength = input.int(title="ATR Length", defval=15, minval=1)
useStructure = input.bool(title="Use Structure?", defval=true)
lookback = input.int(title="How Far To Look Back For High/Lows", defval=8, minval=1)
atrStopMultiplier = input.float(title="ATR Multiplier", defval=0.2, minval=0.1)
LimitMultiplier = input.float(title = "Limit Multiplier", defval = 0.5, minval = 0.1)
PineConnectorID = input.int(title = "Pine Connector ID",defval = 0)
CurrencyToSend = input.string(title = "personilized currency", defval = "ETHUSD")
Risk = input.int(title = "risk in % to send", defval = 10, minval = 1)
// Calculate data
atr = ta.atr(atrLength)
lowestLow = ta.lowest(low, lookback)
highestHigh = ta.highest(high, lookback)
longStop = (useStructure ? lowestLow : close) - atr * atrStopMultiplier
shortStop = (useStructure ? highestHigh : close) + atr * atrStopMultiplier
// Draw data to chart
plot(atr, color=color.rgb(33, 149, 243), title="ATR", display = display.none)
plot(longStop, color=color.green, title="Long Trailing Stop")
plot(shortStop, color=color.red, title="Short Trailing Stop")
var float LimitL = na
var float LimitS = na
var float LPosPrice = na
var float SPosPrice = na
var float LPosLongStop = na
var float SPosShortStop = na
KnowLimit (PosPrice, PosStop) =>
(PosPrice-PosStop)*LimitMultiplier+PosPrice
NotInTrade = strategy.position_size == 0
InLongTrade = strategy.position_size > 0
InShortTrade = strategy.position_size < 0
longCondition = TrendAlert > 0 and NotInTrade
if (longCondition)
LPosPrice := close
LPosLongStop := longStop
LimitL := KnowLimit(LPosPrice, LPosLongStop)
strategy.entry("long", strategy.long)
LTPPip = LimitL-LPosPrice
LSLPip = LPosPrice-longStop
alert(str.tostring(PineConnectorID)+',buy,'+str.tostring(CurrencyToSend)+',risk='+str.tostring(Risk)+',sl='+str.tostring(LSLPip)+'tp='+str.tostring(LTPPip), alert.freq_once_per_bar_close)
strategy.exit("exit", "long", stop = longStop, limit = LimitL)
shortCondition = TrendAlert < 0 and NotInTrade
if (shortCondition)
SPosPrice := close
SPosShortStop := shortStop
LimitS := KnowLimit(SPosPrice, SPosShortStop)
strategy.entry("short", strategy.short)
STPPip = SPosPrice-LimitS
SSLPip = shortStop - SPosPrice
alert(str.tostring(PineConnectorID)+',sell,ETHUSD,risk=10,sl='+str.tostring(SSLPip)+'tp='+str.tostring(STPPip), alert.freq_once_per_bar_close)
strategy.exit("exit", "short", stop = shortStop, limit = LimitS)
plotshape(longCondition, color = color.green, style = shape.labelup, location = location.belowbar, size = size.normal, title = "Long Condition")
plotshape(shortCondition, color = color.red, style = shape.labeldown, location = location.abovebar, size = size.normal, title = "Short Condition")
if (InShortTrade)
LimitL := close
LPosLongStop := close
LPosPrice := close
PlotLongTakeProfit = plot(LimitL, color = InLongTrade ? color.rgb(0, 255, 64) : color.rgb(120, 123, 134, 100), title = "Long Take Profit")
PlotLongStopLoss = plot(LPosLongStop, color = InLongTrade ? color.rgb(255, 0, 0) : color.rgb(120, 123, 134, 100), title = "Long Stop Loss")
PlotLongPosPrice = plot(LPosPrice, color = InLongTrade ? color.gray : color.rgb(120, 123, 134, 100), title = "Long Position Price")
if (InLongTrade)
LimitS := close
SPosShortStop := close
SPosPrice := close
PlotShortTakeProfit = plot(LimitS, color = InShortTrade ? color.rgb(0, 255, 64) : color.rgb(120, 123, 134, 100), title = "Short Take Profit")
PlotShortStopLoss = plot(SPosShortStop, color = InShortTrade ? color.rgb(255, 0, 0) : color.rgb(120, 123, 134, 100), title = "Short Stop Loss")
PlotShortPosPrice = plot(SPosPrice, color = InShortTrade ? color.gray : color.rgb(120, 123, 134, 100), title = "Short Position Price")
fill(PlotLongPosPrice, PlotLongTakeProfit, color = InLongTrade ? color.rgb(0, 255, 0, 95) : color.rgb(0, 255, 0, 100))
fill(PlotShortPosPrice, PlotShortTakeProfit, color = InShortTrade ? color.rgb(0, 255, 0, 95) : color.rgb(0, 255, 0, 100))
fill(PlotLongPosPrice, PlotLongStopLoss, color = InLongTrade ? color.rgb(255, 0, 0, 95) : color.rgb(255, 0, 0, 100))
fill(PlotShortPosPrice, PlotShortStopLoss, color = InShortTrade ? color.rgb(255, 0, 0, 95) : color.rgb(255, 0, 0, 100))