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.
A estratégia é aplicada principalmente através das seguintes partes:
Defina os períodos consecutivos para as subidas e quedas de preços, ou seja, consecutivosBarsUp e consecutivosBarsDown.
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.
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.
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.
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.
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.
As mensagens de sinal comercial podem ser definidas durante o envio.
Emitir sinais longos ou curtos quando estiverem preenchidas as condições baseadas nos parâmetros e níveis de preços acima.
Esta estratégia de fuga contrária tem as seguintes vantagens:
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.
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.
A configuração de stop loss e take profit com antecedência ajuda a controlar os riscos comerciais após a compra ou venda.
As mensagens comerciais facilitam a negociação automatizada.
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.
A estratégia tem também alguns riscos a ter em conta:
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.
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.
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.
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.
As estratégias de stop loss e take profit podem ser otimizadas para reduzir riscos.
A estratégia pode ser ainda melhorada nos seguintes aspectos:
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.
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.
Adicionar análise de volume para evitar sinais falsos de padrões de preços sozinhos.
Diversificação da carteira em vários produtos para reduzir o risco de um único ativo.
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.
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)