Tendencia siguiendo la estrategia basada en la regresión de Nadaraya-Watson y el canal ATR

El autor:¿ Qué pasa?, Fecha: 2024-02-22 15:15:03
Las etiquetas:

img

Resumen general

Esta estrategia es una estrategia de seguimiento de tendencia 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.

Estrategia lógica

En primer lugar, esta estrategia utiliza la regresión del núcleo de Nadaraya-Watson para calcular dos curvas de regresión con diferentes retrasos, y compara el cruce de las dos curvas para determinar la dirección de la tendencia. Específicamente, calcula las curvas de regresión de h-período y h-período de retraso respectivamente. Cuando la curva de h-período de retraso cruza la curva de h-período, indica una señal larga. Cuando la curva de h-período de retraso cruza por debajo de la curva de h-período, indica una señal corta.

En segundo lugar, esta estrategia utiliza el canal ATR para determinar los puntos de entrada. El carril superior es la curva de regresión más el multiplicador ATR de n períodos y el carril inferior es la curva de regresión menos el multiplicador ATR de n períodos.

Finalmente, se establece un mecanismo de stop loss. Si el precio se mantiene por debajo del precio de entrada para barras consecutivas de stopLossBars, la posición se cerrará mediante stop loss.

Análisis de ventajas

Esta estrategia combina el análisis de regresión y el avance del canal, que puede capturar la dirección de la tendencia y el impulso con relativa precisión.

Además, el canal ATR establece puntos de entrada razonables, evitando entradas erróneas alrededor de los puntos de inversión de tendencia.

Por lo tanto, esta estrategia tiene ventajas como una gran capacidad para identificar tendencias, entradas y salidas relativamente precisas, riesgo de pérdida de parada única controlada, etc.

Análisis de riesgos

El mayor riesgo de esta estrategia es que cuando el precio rompe el canal ATR, puede estar haciendo una reversión o consolidación, lo que conduce a una entrada incorrecta o a un alto rápido de la pérdida después de la entrada.

Además, tanto las curvas de regresión como los canales ATR necesitan cierta optimización de parámetros.

Direcciones de optimización

Podemos considerar la combinación de otros indicadores para juzgar las señales de tendencia y reversión, tales como VOLUME, MACD, etc. para mejorar la estabilidad y precisión de la estrategia.

La función del núcleo en el análisis de regresión también se puede ajustar, como probar el núcleo de Epanechnikov, para ver si se pueden obtener mejores efectos de ajuste.

El período ATR y el multiplicador del canal ATR también necesitan pruebas y optimización repetidas para encontrar la mejor combinación de parámetros.

Resumen de las actividades

Esta estrategia combina el uso del análisis de regresión y el avance del canal para identificar la dirección y la fuerza de la tendencia, entra en puntos razonables y establece un stop loss, logrando así una tendencia estable siguiendo 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)

Más.