Contrarian Breakout Trading Strategy (Estratégia de negociação de ruptura contrária)

Autora:ChaoZhang, Data: 2023-10-25 12:09:40
Tags:

img

Resumo

A estratégia de negociação de breakout contrária é uma estratégia que leva sinais contrários baseados em aumentos ou quedas de preço consecutivos para ir longo quando a condição curta é atendida ou ir curto quando a condição longa é atendida.

Estratégia lógica

A estratégia é aplicada principalmente através das seguintes partes:

  1. Defina os períodos consecutivos para as subidas e quedas de preços, ou seja, consecutivosBarsUp e consecutivosBarsDown.

  2. Calcular a subida e queda do preço atual em relação ao preço do período anterior. Calcular a duração dos períodos de subida ou queda consecutivos atuais.

  3. Configure o intervalo de tempo de backtesting para limitar a estratégia a operar apenas dentro do tempo de backtesting através do time_cond.

  4. Definir a hora de negociação diária para limitar os sinais de negociação a serem emitidos apenas dentro do prazo definido através do timetobuy.

  5. Quando o ciclo ascendente consecutivo atingir o comprimento definido, emitir um sinal longo através da estratégia. longo. Quando o ciclo descendente consecutivo atingir o comprimento definido, emitir um sinal curto através da estratégia. curto.

  6. Os preços de stop loss e take profit podem ser definidos. Defina paradas de curto prazo para posições longas e paradas de longo prazo para posições curtas. Defina lucros de longo prazo para posições longas e lucros de curto prazo para posições curtas.

  7. As mensagens de sinal comercial podem ser definidas durante o envio.

  8. Emitir sinais longos ou curtos quando estiverem preenchidas as condições baseadas nos parâmetros e níveis de preços acima.

Análise das vantagens

Esta estratégia de fuga contrária tem as seguintes vantagens:

  1. Captura pontos de reversão de preços. Operação contrária pode obter bons lucros. Operações na direção oposta quando o preço forma uma tendência pode lucrar em reversões de preços.

  2. Parâmetros configuráveis flexíveis. Parâmetros como períodos consecutivos podem ser ajustados, níveis de stop loss e take profit podem ser definidos, o prazo de negociação pode ser limitado. Os parâmetros podem ser otimizados de acordo com as condições do mercado.

  3. A configuração de stop loss e take profit com antecedência ajuda a controlar os riscos comerciais após a compra ou venda.

  4. As mensagens comerciais facilitam a negociação automatizada.

  5. A adição de configurações de intervalo de tempo de backtesting permite uma fácil observação do desempenho da estratégia em diferentes condições de mercado.

Análise de riscos

A estratégia tem também alguns riscos a ter em conta:

  1. Evite eventos noticiosos significativos. As tendências de preços são imprevisíveis durante os principais anúncios, causando simultaneamente sinais e perdas longos e curtos.

  2. Menos eficaz quando as reversões não são claras Menos eficaz quando as tendências são ambíguas, a negociação contrária deve ser utilizada com cautela.

  3. O risco de sobreajuste dos dados de backtesting. A otimização deve evitar uma dependência excessiva dos dados de backtesting, que não representam tendências futuras. Os parâmetros devem ser ajustados adequadamente durante a negociação ao vivo.

  4. A frequência de negociação elevada corre o risco de excesso de negociação, podendo as configurações de ciclo curto resultar em frequência excessiva de negociação e em riscos de ganhos constantes a longo prazo.

  5. As estratégias de stop loss e take profit podem ser otimizadas para reduzir riscos.

Orientações de otimização

A estratégia pode ser ainda melhorada nos seguintes aspectos:

  1. Adicionar a detecção de tendências para evitar reversões aleatórias em mercados que não apresentam tendências, utilizando a volatilidade, canais, etc., para avaliar tendências e capturar reversões.

  2. Otimizar as paradas e tomadas para ajustá-las com base na volatilidade do mercado, utilizando métodos baseados em percentagem, ATR ou outros métodos adaptativos.

  3. Adicionar análise de volume para evitar sinais falsos de padrões de preços sozinhos.

  4. Diversificação da carteira em vários produtos para reduzir o risco de um único ativo.

  5. Otimização de parâmetros e aprendizado de máquina. Coletar mais dados históricos e usar aprendizado de máquina para otimizar automaticamente parâmetros para estratégias mais robustas.

Conclusão

A estratégia de breakout contrária fornece um bom sinal de negociação capturando reversões de preços através de operações contrárias. As vantagens incluem configuração flexível, controle de risco e adequação para negociação automatizada. Mas existem riscos e são necessárias melhorias contínuas nos parâmetros e lógica para lucros constantes a longo prazo.


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

//@version=4

// Strategy
strategy("Up/Down Strategy - Contrarian", overlay=true, initial_capital = 10000, default_qty_value = 10000, default_qty_type = strategy.cash)

consecutiveBarsUp = input(1, title='Consecutive Bars Up')
consecutiveBarsDown = input(1, title='Consecutive Bars Down')

price = close

ups = 0.0
ups := price > price[1] ? nz(ups[1]) + 1 : 0

dns = 0.0
dns := price < price[1] ? nz(dns[1]) + 1 : 0

// Strategy Backtesting
startDate  = input(timestamp("2021-01-01T00:00:00"), type = input.time, title='Backtesting Start Date')
finishDate = input(timestamp("2021-12-31T00:00:00"), type = input.time, title='Backtesting End Date')

time_cond  = true

//Time Restriction Settings
startendtime = input("", title='Time Frame To Enter Trades')
enableclose = input(false, title='Enable Close Trade At End Of Time Frame')
timetobuy = true
timetoclose = true

// Stop Loss & Take Profit Tick Based
enablesltp = input(false, title='Enable Take Profit & Stop Loss')
stopTick = input(5.0, title='Stop Loss Ticks', type=input.float) / 100
takeTick = input(10.0, title='Take Profit Ticks', type=input.float) / 100

longStop = strategy.position_avg_price - stopTick
shortStop = strategy.position_avg_price + stopTick
shortTake = strategy.position_avg_price - takeTick
longTake = strategy.position_avg_price + takeTick

plot(strategy.position_size > 0 and enablesltp ? longStop : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Long Fixed SL")
plot(strategy.position_size < 0 and enablesltp ? shortStop : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Short Fixed SL")
plot(strategy.position_size > 0 and enablesltp ? longTake : na, style=plot.style_linebr, color=color.green, linewidth=1, title="Long Take Profit")
plot(strategy.position_size < 0 and enablesltp ? shortTake : na, style=plot.style_linebr, color=color.green, linewidth=1, title="Short Take Profit")

// Alert messages
message_enterlong  = input("", title="Long Entry message")
message_entershort = input("", title="Short Entry message")
message_closelong = input("", title="Close Long message")
message_closeshort = input("", title="Close Short message")

// Strategy Execution
if (dns >= consecutiveBarsDown) and time_cond and timetobuy
    strategy.entry("Long", strategy.long, stop = high + syminfo.mintick, alert_message = message_enterlong)
    
if (ups >= consecutiveBarsUp) and time_cond and timetobuy
    strategy.entry("Short", strategy.short, stop = low + syminfo.mintick, alert_message = message_entershort)
    
if strategy.position_size < 0 and timetoclose and enableclose
    strategy.close_all(alert_message = message_closelong)
if strategy.position_size > 0 and timetoclose and enableclose
    strategy.close_all(alert_message = message_closeshort)
    
if strategy.position_size < 0 and enablesltp and time_cond
    strategy.exit(id="Close Long", stop=longStop, limit=longTake, alert_message = message_closelong)
if strategy.position_size > 0 and enablesltp and time_cond
    strategy.exit(id="Close Short", stop=shortStop, limit=shortTake, alert_message = message_closeshort)






Mais.