Estratégia de scalping baseada no CCI e na EMA

Autora:ChaoZhang, Data: 2024-01-31 16:01:21
Tags:

img

Resumo

Trata-se de uma estratégia de negociação de oscilação de curto prazo que combina o indicador EMA e o indicador CCI para identificar tendências de curto prazo e níveis de sobrecompra/supervenda no mercado, a fim de captar oportunidades decorrentes de flutuações de preços de curto prazo.

Estratégia lógica

A estratégia utiliza principalmente as linhas EMA de 10 dias, EMA de 21 dias e EMA de 50 dias e o indicador CCI para determinar o calendário de entrada e saída.

A lógica específica é: Quando a média móvel de curto prazo (EMA de 10 dias) cruza acima da média móvel de médio prazo (EMA de 21 dias) e a média móvel de curto prazo é superior à média móvel de longo prazo (EMA de 50 dias), e ao mesmo tempo o indicador CCI é maior que 0, é considerado um sinal de alta para ir longo.

A lógica de saída consiste em fechar a posição quando a média móvel de curto prazo cruzar de volta sobre a média móvel de médio prazo.

Vantagens

  1. A combinação do sistema de média móvel e do indicador CCI permite identificar eficazmente as tendências de curto prazo dos preços e os níveis de sobrecompra/supervenda.

  2. Usar cruzamento de médias móveis para determinar entradas e saídas é simples e prático.

  3. O parâmetro CCI e as configurações do ciclo são mais razoáveis para filtrar alguns sinais falsos.

  4. A adoção de vários prazos de médias móveis pode obter melhores oportunidades de negociação em mercados oscilantes.

Riscos

  1. As grandes flutuações nas operações de curto prazo podem conduzir a stop loss consecutivos.

  2. As configurações incorretas dos parâmetros CCI podem aumentar os falsos sinais.

  3. Durante os períodos limitados ao intervalo e de consolidação, esta estratégia pode sofrer perdas pequenas múltiplas.

  4. Apenas adequado para operadores frequentes de curto prazo, não adequado para a detenção a longo prazo.

As medidas de redução de risco correspondentes incluem: otimização dos parâmetros CCI, ajuste da posição de stop loss, adição de condições FILTER, etc.

Orientações de otimização

  1. Podem ser testadas diferentes combinações de comprimentos EMA para otimizar os parâmetros.

  2. Outros indicadores ou condições de filtro podem ser adicionados para filtrar alguns sinais falsos, como MACD, KDJ, etc.

  3. Usar stop loss dinâmico para controlar perdas individuais.

  4. A combinação de indicadores de tendência de prazo mais longo pode evitar a negociação contra a tendência.

Conclusão

Em geral, esta é uma estratégia típica de oscilação de curto prazo que usa o cruzamento de linhas médias móveis combinadas com o status de sobrecompra/supervenda do indicador CCI para capturar oportunidades de reversão de curto prazo.


/*backtest
start: 2023-12-31 00:00:00
end: 2024-01-30 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//study(title="Strat CCI EMA scalping", shorttitle="EMA-CCI-strat", overlay=true)
strategy("Strat CCI EMA scalping", shorttitle="EMA-CCI-strat", overlay=true)

exponential = input(true, title="Exponential MA")

// the risk management inputs
inpTakeProfit   = input(defval = 1000, title = "Take Profit", minval = 0)
inpStopLoss     = input(defval = 200, title = "Stop Loss", minval = 0)
inpTrailStop    = input(defval = 200, title = "Trailing Stop Loss", minval = 0)
inpTrailOffset  = input(defval = 0, title = "Trailing Stop Loss Offset", minval = 0)

// === RISK MANAGEMENT VALUE PREP ===
// if an input is less than 1, assuming not wanted so we assign 'na' value to disable it.
useTakeProfit   = inpTakeProfit  >= 1 ? inpTakeProfit  : na
useStopLoss     = inpStopLoss    >= 1 ? inpStopLoss    : na
useTrailStop    = inpTrailStop   >= 1 ? inpTrailStop   : na
useTrailOffset  = inpTrailOffset >= 1 ? inpTrailOffset : na

src = close

ma10 = exponential ? ema(src, 10) : sma(src, 10)
ma21 = exponential ? ema(src, 21) : sma(src, 21)
ma50 = exponential ? ema(src, 50) : sma(src, 50)

xCCI = cci(close, 200)

//buy_cond = cross(ma21, ma50) and ma10 > ma21 and (xCCI > 0)
//sell_cond = cross(ma21, ma50) and ma10 < ma21  and (xCCI < 0)

buy_cond = ma10 > ma21 and ma10 > ma50 and xCCI > 0
sell_cond = ma10 < ma21 and ma10 < ma50 and xCCI < 0



// === STRATEGY - LONG POSITION EXECUTION ===
enterLong() => buy_cond
exitLong() => ma10 < ma21
strategy.entry(id = "Long", long = true, when = enterLong()) // use function or simple condition to decide when to get in
strategy.close(id = "Long", when = exitLong()) // ...and when to get out
// === STRATEGY - SHORT POSITION EXECUTION ===
enterShort() => sell_cond
exitShort() => ma10 > ma21
strategy.entry(id = "Short", long = false, when = enterShort())
strategy.close(id = "Short", when = exitShort())

// === STRATEGY RISK MANAGEMENT EXECUTION ===
// finally, make use of all the earlier values we got prepped
//strategy.exit("Exit Long", from_entry = "Long", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)
//strategy.exit("Exit Short", from_entry = "Short", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)




//longCondition = buy_cond
//if(longCondition)
//    strategy.entry("Long", strategy.long)
//    strategy.exit("Close Long", "Long", when = exitLong())
    
//shortCondition = sell_cond
//if(shortCondition)
//    strategy.entry("Short", strategy.short)
//    strategy.exit("Close Short", "Short",  when = exitShort())

//plotshape(buy_cond, style=shape.flag, color=green, size=size.normal)
//plotshape(sell_cond, style=shape.flag, color=red, size=size.normal)

c1 = buy_cond==1 ? lime : sell_cond==1 ? red : #a3a3a3 // color

plot( ma10, color=red, style=line, title="10", linewidth=1)
plot( ma21, color=orange, style=line, title="21", linewidth=1)
plot( ma50, color=c1, style=line, title="50", linewidth=3)

//alertcondition(buy_cond, title = "Buy Condition", message = "Buy Condition Alert")
//alertcondition(sell_cond, title = "Sell Condition", message = "Sell Condition Alert")

Mais.