Estrategia de trading cuantitativo basada en la curva de Coppock


Fecha de creación: 2023-11-13 11:44:55 Última modificación: 2023-11-13 11:44:55
Copiar: 0 Número de Visitas: 730
1
Seguir
1621
Seguidores

Estrategia de trading cuantitativo basada en la curva de Coppock

Descripción general

La estrategia utiliza indicadores técnicos poco conocidos de la curva de Coppock para realizar operaciones cuantitativas. La curva de Coppock se deriva de un promedio móvil ponderado de la tasa de cambio del índice Standard & Poor’s 500 o de los equivalentes de transacción.

El principio

La estrategia utiliza la curva de Coppock como indicador técnico para generar señales de negociación. La fórmula para calcular la curva de Coppock es:

Curva de Coppock = promedio móvil ponderado de 10 ciclos (ROC de 14 ciclos + ROC de 11 ciclos)

donde la fórmula de cálculo de la tasa de cambio de ROC es: ((Close actual - Close antes de N ciclo) / Close antes de N ciclo

La estrategia se basa en el precio de cierre de $SPY y calcula su curva de Coppock. Cuando la curva cruza la línea cero, genera una señal de compra, y cuando cruza la línea cero, genera una señal de venta.

Las ventajas

  • El uso de un indicador de la curva de Coppock único, con una mejor previsibilidad en comparación con indicadores comunes como las medias móviles
  • Optimización de parámetros de indicadores configurables, como el ciclo de la media móvil ponderada, el ciclo de cálculo de la tasa de cambio, etc.
  • $SPY como fuente de señales, fuerte representación en el mercado
  • Se puede elegir un trailing stop para bloquear las ganancias y reducir las retiradas

El riesgo

  • La curva de Coppock no es un indicador muy popular y se necesita verificar su eficacia.
  • Las señales de transacción pueden estar retrasadas y necesitan parámetros de optimización
  • La suspensión de pérdidas demasiado flexible puede perder la oportunidad de retirarse
  • Confiar en un solo indicador puede generar falsas señales

Dirección de optimización

  • Probar diferentes mercados, diferentes acciones para optimizar la mejor combinación de parámetros
  • En combinación con otros indicadores de filtración de falsas señales, como el volumen de tráfico
  • Porcentaje de pérdidas de optimización dinámica
  • Tener en cuenta el número de transacciones o la ruptura de precios como entrada

Resumir

La estrategia utiliza las características curvas de la curva de Coppock para generar señales de comercio. La curva de Coppock tiene una mayor previsibilidad que los indicadores comunes. Sin embargo, su fiabilidad como indicador independiente aún debe ser verificada. Se recomienda usarla en combinación con otros factores para filtrar señales falsas.

Código Fuente de la Estrategia
/*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)