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.
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.
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.
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.
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.
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)