Estratégia de negociação quantitativa baseada na curva de Coppock


Data de criação: 2023-11-13 11:44:55 última modificação: 2023-11-13 11:44:55
cópia: 0 Cliques: 725
1
focar em
1617
Seguidores

Estratégia de negociação quantitativa baseada na curva de Coppock

Visão geral

A estratégia utiliza um pouco conhecido indicador técnico da curva de Coppock para quantificar as transações. A curva de Coppock é derivada da média móvel ponderada da variação do índice S&P 500 ou de equivalentes de transação. Um sinal de compra é gerado quando a curva de Coppock atravessa a linha zero e um sinal de venda quando a curva de Coppock atravessa a linha zero.

Princípios

A estratégia usa a curva de Coppock como um indicador técnico para a geração de sinais de negociação. A fórmula para calcular a curva de Coppock é:

Curva de Coppock = Média móvel ponderada de 10 ciclos (ROC de variação de 14 ciclos + ROC de variação de 11 ciclos)

A fórmula de cálculo da taxa de variação do ROC é: ((Close atual - Close antes do ciclo N) / Close antes do ciclo N

A estratégia baseia-se no preço de fechamento de $SPY e calcula sua curva de Coppock. Quando a curva atravessa a linha zero, gera um sinal de compra e, quando atravessa a linha zero, gera um sinal de venda.

Vantagens

  • O uso de um indicador de curva Coppock exclusivo, com melhor previsibilidade em comparação com indicadores comuns, como médias móveis
  • Parâmetros de indicadores configuráveis para otimização, como o ciclo de média móvel ponderada, o ciclo de cálculo da taxa de variação, etc.
  • $SPY como fonte de sinais, forte representação no mercado
  • Opção de trailing stop para bloquear lucros e reduzir retrações

Riscos

  • A curva de Coppock não é um indicador muito popular, e é preciso comprovar sua eficácia.
  • Os sinais de transação podem ser atrasados e necessitam de parâmetros de otimização
  • A configuração de parada de perdas muito flexível pode perder a oportunidade de retirada
  • Confiar em um único indicador pode gerar falsos sinais

Direção de otimização

  • Testar diferentes mercados, diferentes ações para otimizar o melhor conjunto de parâmetros
  • Combinação de outros indicadores para filtrar falsos sinais, como volume de transação
  • Percentual de Stop Loss de Otimização Dinâmica
  • Considerar o número de transações ou a ruptura de preço como entrada

Resumir

A estratégia utiliza as características de forma curva únicas da curva de Coppock para produzir sinais de negociação. Comparado com os indicadores comuns, a curva de Coppock tem uma maior previsibilidade. Mas sua confiabilidade como indicador independente ainda precisa ser verificada. É recomendado usar a combinação com outros fatores para filtrar os sinais falsos.

Código-fonte da estratégia
/*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)