Estrategia de negociación cuantitativa basada en la curva de Coppock

El autor:¿ Qué pasa?, Fecha: 2023-11-13 11:44:55
Las etiquetas:

img

Resumen general

Esta estrategia utiliza el indicador técnico menos conocido de la Curva de Coppock para implementar el comercio cuantitativo. La Curva de Coppock se deriva tomando un promedio móvil ponderado de la tasa de cambio (ROC) de un índice de mercado como S&P 500 o un equivalente comercial como SPY ETF. Las señales de compra se generan cuando la Curva de Coppock cruza por encima de cero y las señales de venta cuando cruza por debajo.

Principios

La estrategia utiliza la Curva de Coppock como indicador técnico para generar señales comerciales.

La curva de Coppock = WMA de 10 períodos (ROC de 14 períodos + ROC de 11 períodos)

Cuando la tasa de variación de ROC se calcule como: (Current Close - Close N periodes ago) /Close N periodes ago

La estrategia calcula la Curva de Coppock basándose en el precio de cierre de $SPY. Las señales de compra se generan cuando la curva cruza por encima de cero y las señales de venta cuando cruza por debajo.

Ventajas

  • Utiliza un indicador único de la curva de Coppock que tiene un mejor poder predictivo que los indicadores comunes como las medias móviles
  • Parámetros configurables para la optimización como el período WMA, el período ROC, etc.
  • Utiliza $SPY como fuente de señal que tiene una fuerte representatividad en el mercado
  • Las pérdidas de suspensión de retención opcionales para fijar las ganancias y reducir las reducciones

Los riesgos

  • La curva de Coppock no es un indicador ampliamente utilizado, su eficacia necesita validación
  • Puede existir retraso en la señal, los parámetros deben optimizarse
  • Las pérdidas de parada demasiado amplias pueden perder oportunidades de recuperación
  • La dependencia de un solo indicador puede producir señales falsas

Direcciones de optimización

  • Prueba de combinaciones óptimas de parámetros en diferentes mercados y existencias
  • Combinar con otros indicadores para filtrar señales falsas, por ejemplo, volumen
  • Optimización dinámica del porcentaje de pérdida de parada
  • Considere otras señales de entrada como el número de barras o los avances de precios

Conclusión

La estrategia utiliza las características únicas de la curva de la curva de Coppock para generar señales comerciales. En comparación con los indicadores comunes, la curva de Coppock tiene un poder predictivo más fuerte. Pero como indicador independiente, su confiabilidad necesita validación. Se recomienda combinarla con otros factores para filtrar señales falsas. A través de la optimización de parámetros, la optimización de pérdidas y la combinación con otros indicadores, esta estrategia puede convertirse en un sistema comercial cuantitativo efectivo.


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


Más.