Stratégie de négociation quantitative basée sur la courbe de Coppock

Auteur:ChaoZhang est là., Date: 2023-11-13 11:44:55 Je vous en prie.
Les étiquettes:

img

Résumé

Cette stratégie utilise l'indicateur technique moins connu de la courbe de Coppock pour mettre en œuvre le trading quantitatif. La courbe de Coppock est dérivée en prenant une moyenne mobile pondérée du taux de changement (ROC) d'un indice de marché comme le S&P 500 ou un équivalent de trading comme le SPY ETF. Les signaux d'achat sont générés lorsque la courbe de Coppock traverse au-dessus de zéro et les signaux de vente lorsqu'elle traverse en dessous. Un stop loss optionnel est disponible pour verrouiller les profits.

Principaux

La stratégie utilise la courbe de Coppock comme indicateur technique pour générer des signaux de trading.

La courbe de Coppock = WMA à 10 périodes (14-période ROC + 11-période ROC)

Lorsque le taux de variation de ROC est calculé comme suit: (clôture actuelle - clôture N de périodes) /clôture N de périodes

La stratégie calcule la courbe de Coppock en fonction du prix de clôture de $SPY. Les signaux d'achat sont générés lorsque la courbe dépasse zéro et les signaux de vente lorsqu'elle dépasse.

Les avantages

  • Utilise un indicateur unique de courbe de Coppock qui a un meilleur pouvoir prédictif que les indicateurs communs comme les moyennes mobiles
  • Paramètres configurables pour l'optimisation tels que la période WMA, la période ROC, etc.
  • Utilise $SPY comme source de signal ayant une forte représentativité sur le marché
  • Option de stop-loss de suivi pour sécuriser les bénéfices et réduire les retraits

Les risques

  • La courbe de Coppock n'est pas un indicateur largement utilisé, son efficacité nécessite une validation
  • Le décalage du signal peut exister, les paramètres doivent être optimisés
  • Un stop-loss trop large risque de manquer des opportunités de rebond
  • Le recours à un seul indicateur peut produire de faux signaux

Directions d'optimisation

  • Tester les combinaisons optimales de paramètres sur différents marchés et stocks
  • Combiner avec d'autres indicateurs pour filtrer les faux signaux, par exemple le volume
  • Optimisation dynamique du pourcentage de stop loss
  • Considérez d' autres signaux d' entrée comme le nombre de barres ou les percées de prix

Conclusion

La stratégie utilise les caractéristiques uniques de la courbe de la courbe de Coppock pour générer des signaux commerciaux. Par rapport aux indicateurs courants, la courbe de Coppock a un pouvoir prédictif plus puissant. Mais en tant qu'indicateur autonome, sa fiabilité doit être validée. Il est recommandé de la combiner avec d'autres facteurs pour filtrer les faux signaux.


/*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)
    


Plus de