CCI Dual Timeframe Trend Seguindo a Estratégia

Autora:ChaoZhang, Data: 2023-11-24 10:53:07
Tags:

img

Resumo

Esta estratégia é uma estratégia de tendência baseada no indicador CCI. Gerar sinais de negociação através do monitoramento do cruzamento entre dois CCIs de diferentes prazos. Especificamente, irá detectar se um CCI de período mais curto quebra um CCI de período mais longo e determinar posições longas ou curtas com base na direção de ruptura.

Estratégia lógica

A lógica central desta estratégia é a seguinte:

  1. Definir dois CCI, ci1 como 14 períodos, ci2 como 56 períodos
  2. Quando o ci1 ultrapassar o ci2, vamos longos.
  3. Quando o ci1 for abaixo do ci2, vamos para curto.
  4. Usar os valores de ci1 e ci2 para determinar saídas após sinais desencadeados

Regras longas específicas:

  1. ci1 ultrapassa o ci2, o CCI de curto prazo ultrapassa o CCI de longo prazo
  2. Condição de parada de perdas: ci1 <-50 e taxa de variação < 0 ou ci1 quebra abaixo de -100

Regras curtas específicas:

  1. ci1 quebra abaixo de ci2, o CCI de período mais curto abaixo do CCI de período mais longo
  2. Condição de parada de perdas: ci1 > 100 e taxa de variação > 0 ou ci2 quebra acima de 100

A Comissão concluiu que o auxílio não é seletivo e que, por conseguinte, não pode ser considerado compatível com o mercado interno.

Vantagens

As vantagens desta estratégia:

  1. Identificar de forma eficaz as tendências utilizando a força do indicador CCI
  2. O projeto de CCI duplo filtra alguns negócios de ruído
  3. A combinação de CCI de curto e longo prazo controla o risco seguindo as tendências
  4. Regras de estratégia simples e claras, fáceis de compreender e aplicar
  5. A utilização de um sistema de controlo de desempenho é uma das principais características do sistema.

Riscos

Há também alguns riscos:

  1. Capacidade fraca de identificar mercados de variação e voláteis utilizando o CCI
  2. Pode ocorrer uma divergência entre os CCI de curto e longo prazo, causando sinais errados
  3. A configuração incorreta de stop loss pode levar a perdas enormes.
  4. O ajustamento inadequado dos parâmetros também afeta amplamente a rentabilidade da estratégia

Soluções:

  1. Incorporar outros indicadores para determinar a situação do mercado, evitar negociações em períodos voláteis
  2. Adicionar filtros para evitar erros da divergência CCI
  3. Otimizar e testar diferentes níveis de stop loss
  4. Encontrar conjuntos de parâmetros adequados através de backtesting e ajuste

Orientações de otimização

Áreas em que a estratégia pode ser melhorada:

  1. Adicionar mais indicadores para construir um sistema de negociação mais sistemático
  2. Diferença de rentabilidade de teste entre dias de semana e sessões
  3. Buscar melhores parâmetros usando aprendizado de máquina
  4. Parâmetros de sintonização para diferentes produtos
  5. Otimizar as regras de entrada e saída

Conclusão

Em conclusão, esta é uma estratégia simples de tendência baseada no cruzamento CCI. Pode identificar efetivamente a direção da tendência e seguir as tendências. Enquanto isso, controla o risco através de stop loss. Esta estratégia é simples, prática, flexível no ajuste de parâmetros e pode servir como uma estratégia de quantidade inicial. Pode ser aprimorada em um sistema mais poderoso através de otimização e combinação adicionais.


/*backtest
start: 2023-10-24 00:00:00
end: 2023-11-23 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(title="my work",calc_on_order_fills=true,currency=currency.USD, default_qty_type=strategy.percent_of_equity,commission_type=strategy.commission.percent)


source = close
shortlength=input(14)
longlength=input(56)
aa=input(2)
Ss=input(75)

//Cci part
ci1=cci(source,shortlength)   //4시간봉의 기본 cci
ci2=cci(source,longlength)   //4시간봉에서 12시봉의 cci 무빙측정

//오린간 선생님의 WT + ichimoku
len = input(10)
lenTurn = input(9)
lenStd = input(26)

wtm_e(so, l) =>
    esa = ema(so, l)
    d = ema(abs(so - esa), l)
    ci = (so - esa) / (0.015 * d)
    ema(ci, l*2+1)

alh(len) => avg(lowest(len), highest(len))
alh_src(src, len) => avg(lowest(src, len), highest(src, len))

wt = wtm_e(close,len)
turn = alh_src(wt, lenTurn)
std = alh_src(wt, lenStd)

cnt = 0
if wt > turn
    cnt:=cnt+1
if wt > std
    cnt:=cnt+1


//100,-100선
h0 = hline(100)
h1 = hline(-100)

//plot(ci,color=green)
// plot(k,color=green)
// plot(d,color=red)
plot(ci1,color=green)
plot(ci2,color=red)

plot(0,color=black)
plot(100,color=black)
plot(-100,color=black)

fill(h0,h1,color=purple,transp=95)

bgcolor(cnt==0 ? red : cnt==1 ? blue : cnt == 2 ? green : na, transp = Ss)

//기간조정

Fromday = input(defval=1, title="from day", minval=1, maxval=31)
FromMonth = input(defval=1, title="from month", minval=1, maxval=12)
FromYr = input(defval=2019, title="from yr", minval=1970)

Today = input(defval=13, title="to day", minval=1, maxval=31)
ToMonth = input(defval=12, title="to month", minval=1, maxval=12)
ToYr = input(defval=2019, title="to yr", minval=1970)

startDate = timestamp(FromYr, FromMonth, Fromday, 00, 00)
finishDate = timestamp(ToYr, ToMonth, Today, 00, 00)
Time_cond = true


/////롱

if  crossover(ci1,ci2) and change(ci2)>0 and Time_cond
    strategy.entry("go", strategy.long, comment="go")
    
strategy.close("go", (ci2<0 and ci1 <-50 and change(ci1)<0) or (crossunder(ci1,-100) and strategy.openprofit<0) and change(cnt)<0)



/////숏

if  (crossunder(ci1,ci2) and change(ci2)<0 and falling(ci1,aa)) and Time_cond
    strategy.entry("die", strategy.short, comment="die")
    
strategy.close("die", (ci2>0 and ci1 > 100 and change(ci1)>0) or (crossover(ci2,100) and strategy.openprofit<0) and change(cnt)>0)

Mais.