Estrategia de seguimiento de tendencias basada en la regresión de Nadaraya-Watson y el canal ATR


Fecha de creación: 2024-02-22 15:15:03 Última modificación: 2024-02-22 15:15:03
Copiar: 1 Número de Visitas: 962
1
Seguir
1617
Seguidores

Estrategia de seguimiento de tendencias basada en la regresión de Nadaraya-Watson y el canal ATR

Descripción general

Esta estrategia es una estrategia de seguimiento de tendencias que combina la regresión de Nadaraya-Watson y el canal ATR para identificar la dirección de la tendencia y los puntos de entrada. Cuando el precio se desvía, haga más; cuando el precio se desvía, cierre la posición.

Principio de estrategia

En primer lugar, la estrategia utiliza la regresión Nadaraya-Watson para calcular la curva de regresión de dos períodos de retraso diferentes, y luego compara la intersección de las dos curvas de regresión para determinar la dirección de la tendencia. En concreto, se calcula la curva de regresión de los períodos h y h-lag, respectivamente, para determinar la ventaja cuando se atraviesa la curva de h en la curva de h-lag y la ventaja cuando se atraviesa la curva de h en la curva de h.

En segundo lugar, la estrategia utiliza el canal ATR para determinar el punto de entrada. La vía superior es la curva de retorno más un múltiplo de la ATR de n periodos, la vía inferior es la curva de retorno menos un múltiplo de la ATR de n periodos. Cuando el precio rompe la vía superior, mira hacia arriba y entra, y cuando rompe la vía inferior, mira hacia arriba y entra.

Finalmente, se establece un mecanismo de stop loss. Si el precio es continuamente stopLossBars raíz de la línea K por debajo del precio de entrada, se detiene la salida.

Análisis de las ventajas estratégicas

Esta estrategia, combinada con el análisis de regresión y el canal breakthrough, permite una captura más precisa de la dirección y la intensidad de las tendencias del mercado. En comparación con el uso de indicadores como la media móvil para identificar tendencias, este método reduce las falsas señales y, por lo tanto, aumenta la estabilidad de la estrategia.

Además, el canal ATR establece puntos de entrada razonables para evitar entradas erróneas cerca del punto de reversión de la tendencia. El mecanismo de parada de pérdidas también controla eficazmente las pérdidas individuales.

Por lo tanto, esta estrategia tiene las ventajas de una gran capacidad de identificación de tendencias, una salida de entrada más precisa y un control del riesgo de pérdida de una sola parada.

Análisis de riesgos

El mayor riesgo de esta estrategia es que cuando se rompe el canal ATR, el precio puede estar haciendo una reversión o una corrección, lo que puede resultar en una salida de pérdidas poco después de la entrada o en una entrada inadecuada.

Además, la curva de regresión y el canal ATR requieren una cierta optimización de los parámetros. Si los parámetros se establecen incorrectamente, el análisis de regresión no es efectivo, o el amplitud de ATR es demasiado grande o demasiado pequeña, lo que afectará a la eficacia de la estrategia.

Dirección de optimización

Se puede considerar la combinación de otros indicadores para determinar tendencias y señales de reversión, como VOLUME, MACD, etc., para mejorar la estabilidad y precisión de la estrategia.

La función núcleo en el análisis de regresión también se puede ajustar, por ejemplo, considerando el núcleo de Epanechnikov, para ver si se obtiene un mejor resultado de ajuste.

Los ciclos y multiplicadores de ATR en el canal ATR también requieren una optimización de prueba repetida para encontrar la combinación óptima de parámetros.

Resumir

Esta estrategia utiliza un análisis integral de regresión y un método de ruptura de canal para identificar la dirección y la intensidad de la tendencia, entrar en juego en puntos razonables y establecer paradas de pérdida para lograr una estrategia de seguimiento de tendencia estable. El espacio para optimizar la subestrategia es grande y vale la pena probar y mejorar aún más.

Código Fuente de la Estrategia
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Custom Strategy with Stop Loss and EMA", overlay=true)

src = input(close, title='Source')
h = input(10, title='Lookback Window', tooltip='The number of bars used for the estimation.')
r = input(10, title='Relative Weighting', tooltip='Relative weighting of time frames.')
x_0 = input(50, title='Start Regression at Bar',  tooltip='Bar index on which to start regression.')
lag = input(2, title='Lag', tooltip='Lag for crossover detection.')
stopLossBars = input(3, title='Stop Loss Bars', tooltip='Number of bars to check for stop loss condition.')
emaPeriod = input(46, title='EMA Period',  tooltip='Period for Exponential Moving Averages.')

lenjeje = input(32, title='ATR Period', tooltip='Period to calculate upper and lower band')
coef = input(2.7, title='Multiplier', tooltip='Multiplier to calculate upper and lower band')

// Function for Nadaraya-Watson Kernel Regression
kernel_regression1(_src, _size, _h) =>
    _currentWeight = 0.0
    _cumulativeWeight = 0.0
    for i = 0 to _size + x_0
        y = _src[i] 
        w = math.pow(1 + (math.pow(i, 2) / ((math.pow(_h, 2) * 2 * r))), -r)
        _currentWeight += y * w
        _cumulativeWeight += w
    [_currentWeight, _cumulativeWeight]

// Calculate Nadaraya-Watson Regression
[currentWeight1, cumulativeWeight1] = kernel_regression1(src, h, h)
yhat1 = currentWeight1 / cumulativeWeight1
[currentWeight2, cumulativeWeight2] = kernel_regression1(src, h-lag, h-lag)
yhat2 = currentWeight2 / cumulativeWeight2

// Calculate Upper and Lower Bands
upperjeje = yhat1 + coef * ta.atr(lenjeje)
lowerjeje = yhat1 - coef * ta.atr(lenjeje)

// Plot Upper and Lower Bands
plot(upperjeje, color=color.rgb(0, 247, 8), title="Upper Band", linewidth=2)
plot(lowerjeje, color=color.rgb(255, 0, 0), title="Lower Band", linewidth=2)

// Calculate EMAs
emaLow = ta.ema(low, emaPeriod)
emaHigh = ta.ema(high, emaPeriod)

// Plot EMAs
plot(emaLow, color=color.rgb(33, 149, 243, 47), title="EMA (Low)", linewidth=2)
plot(emaHigh, color=color.rgb(255, 153, 0, 45), title="EMA (High)", linewidth=2)

// Long Entry Condition
longCondition = low < lowerjeje
strategy.entry("Long", strategy.long, when=longCondition)

// Stop Loss Condition
stopLossCondition = close[1] < strategy.position_avg_price and close[2] < strategy.position_avg_price and close[3] < strategy.position_avg_price
strategy.close("Long", when=stopLossCondition)

// Close and Reverse (Short) Condition
shortCondition = high > upperjeje
strategy.close("Long", when=shortCondition)
strategy.entry("Short", strategy.short, when=shortCondition)