Trend nach Strategie auf Basis der Nadaraya-Watson-Regression und des ATR-Kanals

Schriftsteller:ChaoZhang, Datum: 2024-02-22 15:15:03
Tags:

img

Übersicht

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.

Strategie Logik

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.

Analyse der Vorteile

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.

Risikoanalyse

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.

Optimierungsrichtlinien

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.

Zusammenfassung

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)

Mehr