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