
La idea principal de la estrategia es lograr una estrategia de seguimiento de tendencias lo más precisa posible. Se trata de una estrategia que determina la probabilidad de que la tendencia lineal actual continúe calculando el nivel de confianza de un cierto número de precios de cierre en el pasado. La estrategia asume que una vez que la confianza supera un cierto nivel, la tendencia lineal en curso tiene más probabilidades de continuar.
La estrategia calcula la concordancia lineal de los últimos N precios de cierre mediante el método de regresión lineal ordinaria, obteniendo la inclinación k de la concordancia lineal y la diferencia estándar de la diferencia con el precio de cierre σ. Luego define la incertidumbre de tendencia como k/σ.
Cuando la confianza de la tendencia supera el umbral de entrada de la plusvalía, se hace más; cuando cae a la plusvalía de la plusvalía de la plusvalía de la plusvalía, se hace más baja. Del mismo modo, cuando la confianza de la tendencia es inferior al umbral de entrada de la plusvalía, se hace más baja; cuando supera el umbral de la plusvalía de la plusvalía de la plusvalía, se hace más baja.
De este modo, se puede filtrar las señales de movimientos de precios salvajes que no siguen una tendencia claramente lineal.
Esta estrategia combina el seguimiento de tendencias y los métodos de regresión lineal en estadística, evitando seguir las fluctuaciones de precios a corto plazo y siguiendo solo las tendencias a largo plazo, lo que genera una menor frecuencia de negociación y una mayor tasa de ganancias.
La estrategia tiene un gran espacio para ajustar los parámetros, lo que permite una buena generalización al adaptar los parámetros a diferentes variedades y períodos de tiempo.
La estrategia corre el riesgo de ser arbitraje. La estrategia puede generar grandes pérdidas cuando hay una reversión de tendencia evidente. Además, la configuración incorrecta de los parámetros puede causar sobreventajas o perder buenas oportunidades de negociación.
Se puede establecer un stop loss para controlar el riesgo de pérdidas. Al mismo tiempo, se debe evaluar cuidadosamente la elección de los parámetros para evitar la optimización excesiva.
La estrategia puede ser optimizada en los siguientes aspectos:
Aumentar la lógica de stop loss para bloquear las ganancias y controlar el riesgo
Aumentar los parámetros para adaptarse a los módulos de optimización, lo que permite que los parámetros se ajusten dinámicamente
Aumentar los modelos de aprendizaje automático para determinar los puntos de inflexión de tendencias y mejorar aún más las probabilidades de éxito de las estrategias
Experimentar con diferentes variedades, adaptarse a diferentes períodos de tiempo y mejorar la generalización
La estrategia en general es una estrategia cuantitativa de control de riesgos basada en tendencias a largo plazo. Combina el seguimiento de tendencias y el método de regresión lineal, que puede filtrar las señales de negociación de ruido. A través de la regulación de los parámetros, se puede adaptar muy bien a diferentes variedades y períodos, es una estrategia eficaz que vale la pena estudiar y mejorar.
/*backtest
start: 2022-11-15 00:00:00
end: 2023-11-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © carefulCamel61097
// ################################################################################################
// "This is a trend following strategy that performed very well on the past 5 years"
// "Intended to be used on BTC-USDT, 4hr timeframe"
// "A factor 2 Leverage can be added by changing Order Size to 200% of equity"
// "Higher leverage is not recommended due to big drawdowns"
// "Also seems to work on 1D timeframe, although ideal parameters may be different"
// "Also seems to work on ETH-USDT and some other altcoins, although ideal parameters are different"
// ################################################################################################
//@version=5
strategy("Trend Following based on Trend Confidence", overlay=false )
// Inputs
source = input(close)
since = input(timestamp('2000-01-01'), title='Start trading interval')
till = input(timestamp('2030-01-01'), title='End trading interval')
length = input(30, title='Length')
longs_on = input.bool(true, title='Longs')
shorts_on = input.bool(true, title='Shorts')
// Parameters for best performance 2018 - 2022
// long_entry = input.float(0.26, step=0.01, title='Long entry threshold')
// long_exit = input.float(-0.10, step=0.01, title='Long exit threshold')
// short_entry = input.float(-0.24, step=0.01, title='Short entry threshold')
// short_exit = input.float(-0.04, step=0.01, title='Short exit threshold')
long_entry = input.float(0.25, step=0.01, title='Long entry threshold')
long_exit = input.float(-0.10, step=0.01, title='Long exit threshold')
short_entry = input.float(-0.25, step=0.01, title='Short entry threshold')
short_exit = input.float(-0.05, step=0.01, title='Short exit threshold')
stop_loss = input.float(10, step=1, title='Stop loss (percentage)') / 100
// Trend Confidence
linreg = ta.linreg(source, length, 0)
linreg_p = ta.linreg(source, length, 0+1)
x = bar_index
slope = linreg - linreg_p
intercept = linreg - x*slope
deviationSum = 0.0
for i = 0 to length-1
deviationSum := deviationSum + math.pow(source[i]-(slope*(x-i)+intercept), 2)
deviation = math.sqrt(deviationSum/(length))
slope_perc = slope / source[0]
deviation_perc = deviation / source[0]
trend_confidence = slope_perc / deviation_perc
// Strategy
in_interval = true
sl_long = strategy.position_avg_price * (1 - stop_loss)
sl_short = strategy.position_avg_price * (1 + stop_loss)
if in_interval and longs_on and ta.crossover(trend_confidence, long_entry)
strategy.entry("TC Long Entry", strategy.long)
strategy.exit("TC Long Exit", stop=sl_long)
if in_interval and longs_on and ta.crossunder(trend_confidence, long_exit)
strategy.close("TC Long Entry")
if in_interval and shorts_on and ta.crossunder(trend_confidence, short_entry)
strategy.entry("TC Short Entry", strategy.short)
strategy.exit("TC Short Exit", stop=sl_short)
if in_interval and shorts_on and ta.crossover(trend_confidence, short_exit)
strategy.close("TC Short Entry")
// Plots
plot(trend_confidence, "Trend Confidence", color.rgb(255, 255, 255))
plot(long_entry, "", color.rgb(0, 255, 0), linewidth=1)
plot(long_exit, "", color.rgb(255, 0, 0), linewidth=1)
plot(short_entry, "", color=bar_index % 10 == 0 ? color.rgb(0, 255, 0) : #00000000, linewidth=1)
plot(short_exit, "", color=bar_index % 10 == 0 ? color.rgb(255, 0, 0) : #00000000, linewidth=1)