Quantitative Handelsstrategie auf Basis der Coppock-Kurve

Schriftsteller:ChaoZhang, Datum: 2023-11-13 11:44:55
Tags:

img

Übersicht

Diese Strategie nutzt den weniger bekannten technischen Indikator Coppock Curve, um den quantitativen Handel zu implementieren. Die Coppock Curve wird abgeleitet, indem ein gewichteter gleitender Durchschnitt der Veränderungsrate (ROC) eines Marktindex wie S&P 500 oder eines Handelsäquivalents wie SPY ETF genommen wird. Kaufsignale werden generiert, wenn die Coppock Curve über Null überschreitet und Verkaufssignale, wenn sie unterhalb überschreitet. Ein optionales Trailing Stop Loss ist verfügbar, um Gewinne zu erzielen.

Grundsätze

Die Strategie verwendet die Coppock-Kurve als technischen Indikator für die Erzeugung von Handelssignalen.

Coppock-Kurve = 10-Perioden-WMA (14-Perioden-ROC + 11-Perioden-ROC)

Bei der Veränderungsrate des ROC wird berechnet wie folgt: (Jetzt geschlossen - vor N Perioden geschlossen) / vor N Perioden geschlossen

Die Strategie berechnet die Coppock-Kurve anhand des Schlusskurses von $SPY. Kaufsignale werden generiert, wenn die Kurve über Null geht, und Verkaufssignale, wenn sie darunter geht.

Vorteile

  • Benutzt einzigartige Coppock Kurve Indikator, der bessere Vorhersage-Kraft als übliche Indikatoren wie gleitende Durchschnitte hat
  • Konfigurierbare Parameter für die Optimierung wie WMA-Periode, ROC-Periode usw.
  • Nutzt $SPY als Signalquelle, die eine starke Marktrepräsentativität aufweist
  • Optionale Stop-Loss-Verbindung zur Gewinnbindung und zur Verringerung der Abzüge

Risiken

  • Coppock-Kurve ist kein weit verbreiteter Indikator, seine Wirksamkeit muss validiert werden
  • Es kann eine Signalverzögerung geben, die Parameter müssen optimiert werden.
  • Ein zu breiter Stop-Loss kann Rückzugsmöglichkeiten verpassen
  • Die Abhängigkeit von einem einzigen Indikator kann zu falschen Signalen führen

Optimierungsrichtlinien

  • Testen Sie optimale Parameterkombinationen für verschiedene Märkte und Bestände
  • Kombination mit anderen Indikatoren zur Filterung falscher Signale z.B. Volumen
  • Dynamische Optimierung des Stop-Loss-Prozentsatzes
  • Berücksichtigen Sie andere Einstiegssignale wie die Anzahl der Balken oder Preisdurchbrüche

Schlussfolgerung

Die Strategie nutzt die einzigartigen Kurvenformmerkmale der Coppock-Kurve, um Handelssignale zu generieren. Im Vergleich zu gewöhnlichen Indikatoren hat die Coppock-Kurve eine stärkere Vorhersageleistung. Aber als eigenständiger Indikator muss ihre Zuverlässigkeit validiert werden. Es wird empfohlen, sie mit anderen Faktoren zu kombinieren, um falsche Signale zu filtern. Durch Parameteroptimierung, Stop-Loss-Optimierung und Kombination mit anderen Indikatoren kann diese Strategie zu einem effektiven quantitativen Handelssystem werden.


/*backtest
start: 2023-10-13 00:00:00
end: 2023-11-12 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © RolandoSantos

//@version=4
strategy(title = "Coppock Curve", shorttitle = "Copp Curve Strat", default_qty_type=strategy.cash, default_qty_value=10000, initial_capital=10000)

///trail stop
longTrailPerc = input(title="Trail Long Loss (%)", minval=0.0, step=0.1, defval=100) * 0.01

// Determine trail stop loss prices
longStopPrice = 0.0

longStopPrice := if (strategy.position_size > 0)
    stopValue = close * (1 - longTrailPerc)
    max(stopValue, longStopPrice[1])
else
    0
//Use SPY for Copp Curve entries and exits//
security = input("SPY")
ticker = security(security, "D", close)

///Copp Curve////
wmaLength = input(title="WMA Length", type=input.integer, defval=10)
longRoCLength = input(title="Long RoC Length", type=input.integer, defval=14)
shortRoCLength = input(title="Short RoC Length", type=input.integer, defval=11)
source = ticker
curve = wma(roc(source, longRoCLength) + roc(source, shortRoCLength), wmaLength)

///Lower Band Plot///
band1 = hline(0)
band0 = hline(100)
band2 = hline(-100)
fill(band1, band0, color=color.green, transp=90)
fill(band2, band1, color=color.red, transp=90)
plot(curve, color=color.white)

///Trade Conditions///
Bull = curve > 0
Bear = curve < 0

///Entries and Exits//
if (Bull)
    strategy.entry("Long", strategy.long, comment = "LE")
    

if (Bear)
    strategy.close("Long", qty_percent=100, comment="close")
    
// Submit exit orders for trail stop loss price
if (strategy.position_size > 0)
    strategy.exit(id="Long Trail Stop", stop=longStopPrice)
    


Mehr