Estratégia de Breakout Dinâmico CCI


Data de criação: 2024-02-18 10:13:21 última modificação: 2024-02-18 10:13:21
cópia: 1 Cliques: 664
1
focar em
1617
Seguidores

Estratégia de Breakout Dinâmico CCI

Visão geral

A estratégia de ruptura do CCI dinâmico é uma estratégia de negociação de linha curta que usa o indicador CCI para identificar o excesso de venda. Combina o indicador CCI e a média WMA, fazendo mais quando o indicador CCI rebota da zona de venda, fazendo zero quando o indicador CCI retorna da zona de venda, e saindo do lucro.

Princípio da estratégia

A estratégia usa o indicador CCI para julgar a sobrevenda e a sobrevenda no mercado. O indicador CCI pode identificar de forma eficaz situações de preços anormais. Quando o indicador CCI é inferior a 100, é considerado um excesso de venda no mercado; quando é superior a 100, é considerado um excesso de compra no mercado.

Ao mesmo tempo, a estratégia também combina a linha média WMA para determinar a direção da tendência. O sinal de multiplicação só é efetivo quando o preço de fechamento está acima da linha média WMA; o sinal de curto prazo só é efetivo quando o preço de fechamento está abaixo da linha média WMA. Isso pode filtrar alguns sinais de negociação pouco claros.

Após a entrada, a estratégia usa o método de parada de perda para controlar o risco. Existem três opções de parada de perda: parada de estratégia fixa, parada de alcance de flutuação de preço e parada de ATR. Quando o preço cai para a linha de parada de perda, a parada de perda é retirada; Quando o preço sobe para a linha de parada de perda, a parada de perda é retirada.

Análise de vantagens

A estratégia tem as seguintes vantagens:

  1. O indicador CCI é usado para identificar oportunidades de reversão e capturar oportunidades de sobrevenda em tempo hábil.
  2. A partir de agora, a tendência é para que os investidores se concentrem no mercado de ações e não se comprometam com o mercado de ações.
  3. Há várias opções de stop loss que podem ser ajustadas de acordo com o mercado.
  4. Os sinais de estratégia são simples, claros e fáceis de implementar.

Análise de Riscos

A estratégia também apresenta os seguintes riscos:

  1. Os indicadores CCI são propensos a falsos sinais e não podem ser totalmente evitados.
  2. O método de amortização inadequado pode causar perda excessiva.
  3. A falta de identificação de tendências pode levar a transações desnecessárias em situações de turbulência.
  4. O mercado de ações é um mercado de ações que não pode ser avaliado como um todo, podendo ser invertido.

Os principais métodos de otimização para esses riscos são:

  1. Em combinação com outros indicadores de filtragem de sinais de indicadores CCI.
  2. Optimizar o ponto de parada de acordo com a retrospectiva.
  3. Aumentar os indicadores de tendência para evitar oscilações.
  4. Para avaliar os níveis de suporte e pressão, determinar a direção da operação.

Direção de otimização

A estratégia pode ser melhorada em vários aspectos:

  1. Optimização dos parâmetros do indicador CC: ajuste os parâmetros do ciclo do indicador CCI, otimização dos parâmetros do indicador ◦

  2. Optimização do modo de parada: teste diferentes modos de parada e escolha o melhor modo de parada. Pode ser adicionado o método de rastreamento de parada.

  3. Otimização de indicadores de filtragem: adicionar outros indicadores, como MACD, RSI, etc., para construir um sistema de filtragem de vários indicadores e reduzir os falsos sinais.

  4. Optimização de julgamento de tendências: adicionar indicadores de julgamento de tendências, como médias móveis, evitando operações de contra-clima.

  5. Otimização de stop-loss automática: criar um stop-loss dinâmico para que a estratégia possa parar automaticamente de acordo com as flutuações do mercado.

Resumir

A estratégia de ruptura dinâmica do CCI é uma estratégia de negociação de linha curta muito prática. Ela usa o indicador do CCI para determinar o excesso de compra e venda e entra em campo com a orientação da linha de equilíbrio. O controle de risco usa o método de parada.

Código-fonte da estratégia
/*backtest
start: 2023-02-11 00:00:00
end: 2023-09-20 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/
// © tweakerID

// ---From the "Bitcoin Trading Strategies" book, by David Hanson---

// After testing, works better with an ATR stop instead of the Strategy Stop. This paramater
// can be changed from the strategy Inputs panel.

// "CCI Scalping Strategy
// Recommended Timeframe: 5 minutes
// Indicators: 20 Period CCI, 20 WMA
// Long when: Price closes above 20 WMA and CCI is below -100, enter when CCI crosses above -100.
// Stop: Above 20 WMA"

//@version=4
strategy("CCI Scalping Strat", 
     overlay=true, 
     default_qty_type=strategy.percent_of_equity, 
     default_qty_value=100, 
     initial_capital=10000, 
     commission_value=0.04, 
     calc_on_every_tick=false, 
     slippage=0)

direction = input(0, title = "Strategy Direction", type=input.integer, minval=-1, maxval=1)
strategy.risk.allow_entry_in(direction == 0 ? strategy.direction.all : (direction < 0 ? strategy.direction.short : strategy.direction.long))

/////////////////////// STRATEGY INPUTS ////////////////////////////////////////
title1=input(true, "-----------------Strategy Inputs-------------------")  

i_Stop = input(0, step=.05, title="Strategy Stop Mult")*.01
i_CCI=input(16, title="CCI Length")
i_WMA=input(5, title="WMA Length")

/////////////////////// BACKTESTER /////////////////////////////////////////////
title2=input(true, "-----------------General Inputs-------------------")  

// Backtester General Inputs
i_SL=input(true, title="Use Stop Loss and Take Profit")
i_SLType=input(defval="ATR Stop", title="Type Of Stop", options=["Strategy Stop", "Swing Lo/Hi", "ATR Stop"])
i_SPL=input(defval=10, title="Swing Point Lookback")
i_PercIncrement=input(defval=2, step=.1, title="Swing Point SL Perc Increment")*0.01
i_ATR = input(14, title="ATR Length")
i_ATRMult = input(10, step=.1, title="ATR Multiple")
i_TPRRR = input(1.5, step=.1, title="Take Profit Risk Reward Ratio")

// Bought and Sold Boolean Signal
bought = strategy.position_size > strategy.position_size[1] 
 or strategy.position_size < strategy.position_size[1]

// Price Action Stop and Take Profit
LL=(lowest(i_SPL))*(1-i_PercIncrement)
HH=(highest(i_SPL))*(1+i_PercIncrement)
LL_price = valuewhen(bought, LL, 0)
HH_price = valuewhen(bought, HH, 0)
entry_LL_price = strategy.position_size > 0 ? LL_price : na 
entry_HH_price = strategy.position_size < 0 ? HH_price : na 
tp=strategy.position_avg_price + (strategy.position_avg_price - entry_LL_price)*i_TPRRR
stp=strategy.position_avg_price - (entry_HH_price - strategy.position_avg_price)*i_TPRRR

// ATR Stop
ATR=atr(i_ATR)*i_ATRMult
ATRLong = ohlc4 - ATR
ATRShort = ohlc4 + ATR
ATRLongStop = valuewhen(bought, ATRLong, 0)
ATRShortStop = valuewhen(bought, ATRShort, 0)
LongSL_ATR_price = strategy.position_size > 0 ? ATRLongStop : na 
ShortSL_ATR_price = strategy.position_size < 0 ? ATRShortStop : na 
ATRtp=strategy.position_avg_price + (strategy.position_avg_price - LongSL_ATR_price)*i_TPRRR
ATRstp=strategy.position_avg_price - (ShortSL_ATR_price - strategy.position_avg_price)*i_TPRRR

/////////////////////// STRATEGY LOGIC /////////////////////////////////////////

//CCI
CCI=cci(close, i_CCI)
//WMA
WMA=wma(close, i_WMA)

//Stops
LongStop=valuewhen(bought, WMA, 0)*(1-i_Stop)
ShortStop=valuewhen(bought, WMA, 0)*(1+i_Stop)
StratTP=strategy.position_avg_price + (strategy.position_avg_price - LongStop)*i_TPRRR
StratSTP=strategy.position_avg_price - (ShortStop - strategy.position_avg_price)*i_TPRRR

BUY = (close > WMA) and crossover(CCI , -100)
SELL = (close < WMA) and crossunder(CCI , 100)

//Trading Inputs
DPR=input(true, "Allow Direct Position Reverse")
reverse=input(false, "Reverse Trades")

// Entries
if reverse
    if not DPR
        strategy.entry("long", strategy.long, when=SELL and strategy.position_size == 0)
        strategy.entry("short", strategy.short, when=BUY and strategy.position_size == 0)
    else     
        strategy.entry("long", strategy.long, when=SELL)
        strategy.entry("short", strategy.short, when=BUY)
else
    if not DPR 
        strategy.entry("long", strategy.long, when=BUY and strategy.position_size == 0)
        strategy.entry("short", strategy.short, when=SELL and strategy.position_size == 0)
    else
        strategy.entry("long", strategy.long, when=BUY)
        strategy.entry("short", strategy.short, when=SELL)


SL= i_SLType == "Swing Lo/Hi" ? entry_LL_price : i_SLType == "ATR Stop" ? LongSL_ATR_price : LongStop
SSL= i_SLType == "Swing Lo/Hi" ? entry_HH_price : i_SLType == "ATR Stop" ? ShortSL_ATR_price : ShortStop
TP= i_SLType == "Swing Lo/Hi" ? tp : i_SLType == "ATR Stop" ? ATRtp : StratTP
STP= i_SLType == "Swing Lo/Hi" ? stp : i_SLType == "ATR Stop" ? ATRstp : StratSTP

strategy.exit("TP & SL", "long", limit=TP, stop=SL, when=i_SL)
strategy.exit("TP & SL", "short", limit=STP, stop=SSL, when=i_SL)

/////////////////////// PLOTS //////////////////////////////////////////////////


plot(WMA)
plot(i_SL and strategy.position_size > 0 ? SL : na , title='SL', style=plot.style_cross, color=color.red)
plot(i_SL and strategy.position_size < 0 ? SSL : na , title='SSL', style=plot.style_cross, color=color.red)
plot(i_SL and strategy.position_size > 0 ? TP : na, title='TP', style=plot.style_cross, color=color.green)
plot(i_SL and strategy.position_size < 0 ? STP : na, title='STP', style=plot.style_cross, color=color.green)
// Draw price action setup arrows
plotshape(BUY ? 1 : na, style=shape.triangleup, location=location.belowbar, 
 color=color.green, title="Bullish Setup", size=size.auto)
plotshape(SELL ? 1 : na, style=shape.triangledown, location=location.abovebar, 
 color=color.red, title="Bearish Setup", size=size.auto)