Tendance à la suite d'une stratégie basée sur la régression de Nadaraya-Watson et le canal ATR

Auteur:ChaoZhang est là., Date: 2024-02-22 15:15:03 Je vous en prie.
Les étiquettes:

img

Résumé

Cette stratégie est une stratégie de suivi de tendance qui combine la régression de Nadaraya-Watson et le canal ATR pour identifier la direction de la tendance et les points d'entrée.

La logique de la stratégie

Premièrement, cette stratégie utilise la régression du noyau de Nadaraya-Watson pour calculer deux courbes de régression avec des délais différents, et compare le croisement des deux courbes pour déterminer la direction de la tendance. Plus précisément, elle calcule les courbes de régression de la période h et de la période h-décalage respectivement. Lorsque la courbe de la période h-décalage traverse la courbe de la période h, elle indique un signal long. Lorsque la courbe de la période h-décalage traverse en dessous de la courbe de la période h, elle indique un signal court.

Deuxièmement, cette stratégie utilise le canal ATR pour déterminer les points d'entrée. Le rail supérieur est la courbe de régression plus le multiplicateur ATR n-période et le rail inférieur est la courbe de régression moins le multiplicateur ATR n-période.

Enfin, un mécanisme de stop loss est défini. Si le prix reste inférieur au prix d'entrée pour les barres consécutives de stopLossBars, la position sera fermée par stop loss.

Analyse des avantages

Cette stratégie combine l'analyse de régression et la découverte de canal, ce qui peut capturer relativement précisément la direction et l'élan de la tendance.

En outre, le canal ATR définit des points d'entrée raisonnables, évitant les entrées erronées autour des points d'inversion de tendance.

Par conséquent, cette stratégie présente des avantages tels qu'une forte capacité à identifier les tendances, des entrées et des sorties relativement précises, un risque de perte unique contrôlable, etc.

Analyse des risques

Le plus grand risque de cette stratégie est que lorsque le prix franchit le canal ATR, il peut simplement faire un renversement ou une consolidation, ce qui conduit à une entrée inappropriée ou à un stop-loss rapide après l'entrée.

En outre, les courbes de régression et les canaux ATR ont besoin d'une certaine optimisation des paramètres.

Directions d'optimisation

Nous pouvons envisager de combiner d'autres indicateurs pour juger des signaux de tendance et d'inversion, tels que VOLUME, MACD, etc., afin d'améliorer la stabilité et la précision de la stratégie.

La fonction de noyau dans l'analyse de régression peut également être ajustée, comme essayer le noyau d'Epanechnikov, pour voir si de meilleurs effets d'ajustement peuvent être obtenus.

La période ATR et le multiplicateur du canal ATR nécessitent également des essais et une optimisation répétés pour trouver la meilleure combinaison de paramètres.

Résumé

Cette stratégie combine l'utilisation de l'analyse de régression et de la découverte de canal pour identifier la direction et la force de la tendance, entre à des points raisonnables et définit un stop loss, réalisant ainsi une tendance stable suivant la stratégie.


/*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)

Plus de