Diese Strategie ist eine Trend-Folge-Strategie, die die Nadaraya-Watson-Regression und den ATR-Kanal kombiniert, um die Trendrichtung und die Einstiegspunkte zu identifizieren.
Erstens verwendet diese Strategie die Nadaraya-Watson-Kernel-Regression, um zwei Regressionskurven mit unterschiedlichen Verzögerungen zu berechnen, und vergleicht die Überschneidung der beiden Kurven, um die Trendrichtung zu bestimmen. Insbesondere berechnet sie die Regressionskurven von h-Periode und h-Lag-Periode. Wenn die h-Lag-Periode-Kurve über die h-Periode-Kurve kreuzt, zeigt sie ein langes Signal an. Wenn die h-Lag-Periode-Kurve unterhalb der h-Periode-Kurve kreuzt, zeigt sie ein kurzes Signal an.
Zweitens verwendet diese Strategie den ATR-Kanal zur Bestimmung der Einstiegspunkte. Die obere Schiene ist die Regressionskurve plus n-Perioden-ATR-Multiplikator und die untere Schiene ist die Regressionskurve minus n-Perioden-ATR-Multiplikator. Sie geht lang, wenn der Preis durch die untere Schiene bricht, und kurz, wenn der Preis durch die obere Schiene bricht.
Schließlich wird ein Stop-Loss-Mechanismus eingerichtet. Wenn der Preis unter dem Einstiegspreis für aufeinanderfolgende StopLossBars bleibt, wird die Position durch Stop-Loss geschlossen.
Diese Strategie kombiniert Regressionsanalyse und Kanaldurchbruch, wodurch die Trendrichtung und -dynamik relativ genau erfasst werden können.
Darüber hinaus setzt der ATR-Kanal angemessene Einstiegspunkte und vermeidet falsche Einträge in Bezug auf Trendumkehrpunkte.
Diese Strategie hat daher Vorteile wie eine starke Fähigkeit, Trends zu erkennen, relativ genaue Ein- und Ausgänge, ein kontrollierbares Single Stop Loss-Risiko usw.
Das größte Risiko dieser Strategie besteht darin, dass, wenn der Preis den ATR-Kanal durchbricht, er möglicherweise nur eine Umkehrung oder Konsolidierung vornimmt, was zu einem unsachgemäßen Eintritt oder einem schnellen Stop-Loss nach dem Eintritt führt.
Darüber hinaus benötigen sowohl die Regressionskurven als auch die ATR-Kanäle eine Parameteroptimierung. Falsche Parameter-Einstellungen können zu schlechten Regressionsanalysergebnissen oder zu breiten oder zu engen ATR-Bereichen führen, was sich auf die Leistung der Strategie auswirkt.
Wir können die Kombination anderer Indikatoren zur Beurteilung von Trend- und Umkehrsignalen wie VOLUME, MACD usw. in Betracht ziehen, um die Stabilität und Genauigkeit der Strategie zu verbessern.
Die Kernelfunktion in der Regressionsanalyse kann ebenfalls angepasst werden, wie zum Beispiel den Epanechnikov-Kernel, um zu sehen, ob bessere passende Effekte erzielt werden können.
Die ATR-Periode und der Multiplikator des ATR-Kanals müssen ebenfalls wiederholt getestet und optimiert werden, um die beste Parameterkombination zu finden.
Diese Strategie kombiniert die Verwendung von Regressionsanalyse und Kanaldurchbruch, um Trendrichtung und -stärke zu identifizieren, tritt an angemessenen Punkten ein und setzt Stop Loss, wodurch ein stabiler Trend nach der Strategie realisiert wird.
/*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)