Estratégia de acompanhamento da reversão do CCTBBO

Autora:ChaoZhang, Data: 2023-11-23 13:42:03
Tags:

img

Resumo

Esta estratégia baseia-se no indicador CCT Bollinger Band Oscillator (CCTBO) desenvolvido por Steve Karnish.

Estratégia lógica

A estratégia usa o preço alto como dados de origem para calcular o valor do CCTBBO. O oscilador flutua entre -200 e 200, onde 0 representa o preço médio menos 2 desvios padrão e 100 é o preço médio mais 2 desvios padrão. Os sinais de negociação são gerados quando o oscilador cruza ou cai abaixo de sua linha EMA. Especificamente, quando o oscilador cruza acima de sua linha EMA e a distância entre eles é maior do que o valor de margem definido, uma posição longa é aberta. Quando o oscilador cai abaixo de sua linha EMA e a distância é menor do que o valor definido negativo, uma posição curta é aberta. O tamanho da margem da posição é calculado de acordo com a porcentagem definida. Além disso, a estratégia usa um stop loss de trailing baseado na mudança percentual de preço ou no número de movimentos de tick para sair de posições.

Análise das vantagens

  • Utiliza o influente indicador CCT Bollinger Band Oscillator para reduzir os falsos sinais
  • A combinação da linha EMA e da condição de margem filtra sinais para evitar operações invalidas excessivas durante oscilações
  • Aplica o mecanismo de stop loss para parar perdas em tempo útil quando as perdas são muito grandes

Análise de riscos

  • O próprio oscilador CCT tem algum atraso, perdendo assim o melhor momento para reversões de preços
  • O valor excessivo da margem e as configurações de períodos EMA demasiado curtos aumentam a frequência e o risco das transacções
  • O risco de perdas é aumentado se o nível de stop loss para a sequência for demasiado fraco.

Gestão de riscos:

  • Ajustar o período da linha EMA, utilizar um período mais longo para filtrar
  • Ajustar adequadamente o valor da margem para equilibrar o risco e o rendimento
  • Redução da percentagem de posição para controlar perdas únicas
  • Reduzir razoavelmente o intervalo de perdas de paragem traseira para uma paragem mais rápida

Orientações de otimização

A estratégia pode ser otimizada nos seguintes aspectos:

  1. Substituir por outros indicadores de volatilidade, como bandas de Bollinger, canais de Keltner, etc., para determinar entradas e saídas
  2. Adicionar outros indicadores de filtragem como MACD, RSI para garantir a confiabilidade do sinal
  3. Usar algoritmos de aprendizagem de máquina para otimizar automaticamente parâmetros como período EMA, valores de margem, etc.
  4. Adicionar mecanismos de dimensionamento de posições como fracionário fixo, Martingale para controlar o risco comercial
  5. Otimizar os mecanismos de stop loss de trailing usando volatilidade ou ATR stops

Resumo

Em resumo, esta é uma estratégia quantitativa de negociação para identificar reversões de preços usando o indicador CCT Bollinger Band. Ele tem certas vantagens, mas também espaço para melhoria. Ao otimizar parâmetros, adicionar filtros, usar engenharia de recursos, introduzir aprendizado de máquina, etc., a estabilidade e lucratividade desta estratégia podem ser ainda melhoradas.


/*backtest
start: 2023-11-15 00:00:00
end: 2023-11-17 11:00:00
period: 45m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
// This strategy is based on the CCT Bollinger Band Oscillator (CCTBO) 
// developed by Steve Karnish of Cedar Creek Trading and coded by LazyBear.
// Indicator is available here https://www.tradingview.com/v/iA4XGCJW/

strategy("Strategy CCTBBO v2 | Fadior", shorttitle="Strategy CCTBBO v2", pyramiding=0, precision=2, calc_on_order_fills=false, initial_capital=1000, default_qty_type=strategy.percent_of_equity, currency="USD", default_qty_value=100, overlay=false)

length_stddev=input(title="Stddev loopback period",defval=20)
length_ema=input(title="EMA period", defval=2)
margin=input(title="Margin", defval=0, type=float, step=0.1)
price = input(title="Source", defval=high)
digits= input(title="Number of digits",defval=2,step=1,minval=2,maxval=6)
offset = input(title="Trailing offset (0.01 = 1%) :", defval=0.013, type=float, step=0.01)
pips= input(title="Offset in ticks ?",defval=false,type=bool)

src=request.security(syminfo.tickerid, "1440", price)

cctbbo=100 * ( src + 2*stdev( src, length_stddev) - sma( src, length_stddev ) ) / ( 4 * stdev( src, length_stddev ) )

ul=hline(150, color=gray, editable=true)
ll=hline(-50, color=gray)
hline(50, color=gray)
fill(ul,ll, color=green, transp=90)
plot(style=line, series=cctbbo, color=blue, linewidth=2)
plot(ema(cctbbo, length_ema), color=red)

d = digits == 2 ? 100 : digits == 3 ? 1000 : digits == 4 ? 10000 : digits == 5 ? 100000 : digits == 6 ? 1000000 : na

TS = 1
TO = pips ? offset : close*offset*d
CQ = 100
TSP = TS
TOP = (TO > 0) ? TO : na

longCondition = crossover(cctbbo, ema(cctbbo, length_ema)) and cctbbo - ema(cctbbo, length_ema) > margin
if (longCondition)
    strategy.entry("Long", strategy.long)
    strategy.exit("Close Long", "Long", qty_percent=CQ, trail_points=TSP, trail_offset=TOP)


shortCondition = crossunder(cctbbo, ema(cctbbo, length_ema)) and cctbbo - ema(cctbbo, length_ema) < -margin
if (shortCondition)
    strategy.entry("Short", strategy.short)
    strategy.exit("Close Short", "Short", qty_percent=CQ, trail_points=TSP, trail_offset=TOP)
    
    

Mais.