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

Autora:ChaoZhang, Data: 2023-11-13 11:44:55
Tags:

img

Resumo

Esta estratégia utiliza o indicador técnico menos conhecido da Curva de Coppock para implementar a negociação quantitativa. A Curva de Coppock é derivada tomando uma média móvel ponderada da taxa de mudança (ROC) de um índice de mercado como o S&P 500 ou um equivalente comercial como o SPY ETF. Os sinais de compra são gerados quando a Curva de Coppock cruza acima de zero e os sinais de venda quando cruza abaixo.

Princípios

A estratégia usa a Curva de Coppock como indicador técnico para gerar sinais de negociação.

Curva de Coppock = WMA de 10 períodos (14-período ROC + 11-período ROC)

Quando a taxa de variação do ROC é calculada como: (Current Close - Close N periods ago) /Close N periods ago

A estratégia calcula a Curva de Coppock com base no preço de fechamento de $SPY. Os sinais de compra são gerados quando a curva cruza acima de zero e os sinais de venda quando cruza abaixo.

Vantagens

  • Usa um indicador exclusivo da curva de Coppock que tem melhor poder preditivo do que indicadores comuns como médias móveis
  • Parâmetros configuráveis para otimização, como período WMA, período ROC, etc.
  • Utiliza $SPY como fonte de sinal que tem uma forte representatividade de mercado
  • O valor da posição em risco deve ser calculado de acordo com o método de classificação da posição em risco.

Riscos

  • A curva de Coppock não é um indicador amplamente utilizado, a sua eficácia necessita de validação.
  • Pode existir atraso no sinal, os parâmetros precisam ser otimizados
  • Perda de parada excessivamente larga pode perder oportunidades de retração
  • A dependência de um único indicador pode produzir sinais falsos

Orientações de otimização

  • Teste combinações ideais de parâmetros em diferentes mercados e stocks
  • Combinar com outros indicadores para filtrar sinais falsos, por exemplo, volume
  • Optimização dinâmica da percentagem de stop loss
  • Considere outros sinais de entrada como número de barras ou avanços de preço

Conclusão

A estratégia utiliza as características únicas da forma da curva da Curva de Coppock para gerar sinais comerciais. Em comparação com os indicadores comuns, a Curva de Coppock tem um poder preditivo mais forte. Mas como um indicador autônomo, sua confiabilidade precisa de validação. Recomenda-se combiná-lo com outros fatores para filtrar falsos sinais. Através da otimização de parâmetros, otimização de stop loss e combinação com outros indicadores, esta estratégia pode se tornar um sistema de negociação quantitativo eficaz.


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


Mais.