O recurso está a ser carregado... Carregamento...

Estratégia de negociação bidireccional de ruptura de grande volatilidade: Sistema de entrada de limiar baseado em pontos

Autora:ChaoZhang, Data: 2024-11-18 16:11:21
Tags:ATRSLTP

img

Resumo

Esta estratégia é um sistema de negociação bidirecional baseado em velas de 30 minutos, buscando oportunidades de negociação através do monitoramento da volatilidade dos preços. O mecanismo central envolve a identificação de movimentos significativos de preços usando limiares de ponto e a execução de negociações após a confirmação de ruptura. A estratégia incorpora uma gestão de tempo rigorosa, mecanismos de stop-loss / take-profit e protocolos de gestão de negociação para negociação automatizada controlada.

Princípio da estratégia

A estratégia emprega múltiplos mecanismos de filtragem para identificar sinais de negociação válidos. Ele calcula a faixa de volatilidade de cada vela de 30 minutos ao fechar, marcando oportunidades de negociação potenciais quando a faixa excede os limiares pré-estabelecidos. Para garantir a validade do sinal, a estratégia implementa pontos de buffer adicionais, desencadeando sinais de negociação reais apenas quando os preços atravessam essa zona de buffer. O sistema permite posições longas e curtas, entrando em longs em breakouts ascendentes e curtos em breakouts descendentes, com metas de lucro correspondentes e níveis de stop-loss.

Vantagens da estratégia

  1. Gerenciamento abrangente do tempo: janelas de negociação limitadas evitam sinais falsos durante períodos inativos
  2. Negociação bidireccional: aproveita oportunidades em ambas as direcções do mercado, melhorando a eficiência do capital
  3. Controlo robusto do risco: níveis fixos de stop-loss e take-profit facilitam a avaliação e gestão do risco
  4. Alta automação: totalmente automatizada desde a identificação do sinal até a execução do comércio, minimizando a intervenção humana
  5. Configuração flexível dos parâmetros: os parâmetros-chave ajustáveis adaptam-se às diferentes condições de mercado

Riscos estratégicos

  1. Risco de ruptura falsa: a grande volatilidade pode conduzir a rupturas falsas que resultem em saídas de stop-loss.
  2. Sensibilidade dos parâmetros: configurações de limiar inadequadas podem causar oportunidades perdidas ou excesso de negociação
  3. Dependência do ambiente de mercado: pode desencadear frequentes stop-losses em mercados variados
  4. Efeito do deslizamento: os preços de execução reais podem desviar-se significativamente dos preços de sinal durante a alta volatilidade
  5. Risco de gestão de capital: a falta de mecanismos de dimensionamento das posições pode conduzir a uma exposição excessiva ao risco

Orientações para a otimização da estratégia

  1. Adicionar filtragem de tendências: Incorporar indicadores de tendências de longo prazo para melhorar a qualidade do sinal
  2. Optimização de parâmetros dinâmicos: ajuste automático dos limiares e parâmetros de stop-loss com base na volatilidade do mercado
  3. Confirmação de volume: adicionar condições de filtragem de volume para melhorar a confiabilidade do rompimento
  4. Otimizar o stop-loss/take-profit: implementar saídas dinâmicas adaptadas às diferentes condições de mercado
  5. Incorporar dimensionamento de posições: ajustar dinamicamente as dimensões das posições com base na força do sinal e na volatilidade do mercado

Conclusão

Esta é uma estratégia de negociação automatizada abrangentemente projetada com lógica clara. Através de uma estrita filtragem de condições e controle de risco, a estratégia demonstra aplicabilidade prática. No entanto, são necessários testes e otimização minuciosos na negociação ao vivo, particularmente em configurações de parâmetros e aspectos de controle de risco que precisam ser ajustados com base nas condições reais do mercado.


/*backtest
start: 2024-10-01 00:00:00
end: 2024-10-31 23:59:59
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Big Candle Breakout Strategy Both Side", overlay=true)  

// Input for the point move threshold
point_move_in = input.int(100, title="Point Move Threshold")
point_target = input.int(100, title="Point Target")
point_stoploss = input.int(100, title="Point Stop Loss")
point_buffer = input.int(5, title="Point Buffer")

point_move = point_buffer + point_move_in

// Define the start and end times for trading
start_hour = 9
start_minute = 15
end_hour = 14
end_minute = 30

// Function to check if the current time is within the allowed trading window
in_time_range = (hour(time('30')) > start_hour or (hour(time('30')) == start_hour and minute(time('30')) >= start_minute)) and (hour(time('30')) < end_hour or (hour(time('30')) == end_hour and minute(time('30')) <= end_minute))

// Retrieve the open, high, low, and close prices of 30-minute candles
open_30m = request.security(syminfo.tickerid, "30", open)
high_30m = request.security(syminfo.tickerid, "30", high)
low_30m = request.security(syminfo.tickerid, "30", low)
close_30m = request.security(syminfo.tickerid, "30", close)

// Calculate the range of the candle
candle_range_long = (close_30m - open_30m)
candle_range_short = (open_30m - close_30m)

// Determine if the candle meets the criteria to be marked
big_candle_long = candle_range_long >= point_move_in
big_candle_short = candle_range_short >= point_move_in

// Variables to store the state of the trade
var float long_entry_price = na
var float long_target_price = na
var float long_stop_loss_price = na

var float short_entry_price = na
var float short_target_price = na
var float short_stop_loss_price = na

// Check if there are no active trades
no_active_trades = (strategy.opentrades == 0)

// Long entry condition
if (big_candle_long and na(long_entry_price) and in_time_range and no_active_trades)
    long_entry_price := high_30m+point_buffer
    long_target_price := long_entry_price + point_target
    long_stop_loss_price := long_entry_price - point_stoploss
    strategy.entry("Buy", strategy.long, stop=long_entry_price, limit=long_target_price)

plot(long_entry_price, style=plot.style_linebr, color=color.blue, linewidth=2, title="Entry Price")
plot(long_target_price, style=plot.style_linebr, color=color.green, linewidth=2, title="Target Price")
plot(long_stop_loss_price, style=plot.style_linebr, color=color.red, linewidth=2, title="Stop Loss Price")

// Short entry condition
if (big_candle_short and na(short_entry_price) and in_time_range and no_active_trades)
    short_entry_price := low_30m - point_buffer
    short_target_price := short_entry_price - point_target
    short_stop_loss_price := short_entry_price + point_stoploss
    strategy.entry("Sell", strategy.short, stop=short_entry_price, limit=short_target_price)

plot(short_entry_price, style=plot.style_linebr, color=color.blue, linewidth=2, title="Short Entry Price")
plot(short_target_price, style=plot.style_linebr, color=color.green, linewidth=2, title="Short Target Price")
plot(short_stop_loss_price, style=plot.style_linebr, color=color.red, linewidth=2, title="Short Stop Loss Price") 

// Long exit conditions
if (not na(long_entry_price))
    strategy.exit("Long Exit", from_entry="Buy", limit=long_target_price, stop=long_stop_loss_price)
   
// Short exit conditions
if (not na(short_entry_price))
    strategy.exit("Short Exit", from_entry="Sell", limit=short_target_price, stop=short_stop_loss_price)

// Reset trade status
if (strategy.position_size == 0)
    long_entry_price := na
    long_target_price := na
    long_stop_loss_price := na

    short_entry_price := na
    short_target_price := na
    short_stop_loss_price := na

// Plot the big candle and entry/exit levels
plotshape(series=big_candle_long, location=location.abovebar, style=shape.circle, color=color.green)
plotshape(series=big_candle_short, location=location.abovebar, style=shape.circle, color=color.red)

//plot(long_entry_price, style=plot.style_stepline, color=color.blue, linewidth=2, title="Entry Price")
//plot(long_target_price, style=plot.style_stepline, color=color.green, linewidth=2, title="Target Price")
//plot(long_stop_loss_price, style=plot.style_stepline, color=color.red, linewidth=2, title="Stop Loss Price")


Relacionados

Mais.