
A estratégia de rastreamento dinâmico dos picos e baixos da manhã é uma estratégia de negociação de curto prazo para o período de abertura do mercado de ações. A estratégia baseia-se principalmente nos picos e baixos dos preços das 8:30 da manhã, estabelecendo níveis críticos de apoio e resistência e negociando quando os preços ultrapassam esses níveis.
O princípio central da estratégia é usar o intervalo de preços formado às 8:30 AM antes da abertura do mercado como ponto de referência. O processo de trabalho detalhado da estratégia é o seguinte:
A estratégia usa várias variáveis-chave para rastrear o estado das negociações: o alto (high830) e o baixo (low830) registam o máximo e o mínimo do gráfico das 8:30 AM; a variável tradeTakenToday garante que apenas uma transação seja executada por dia; a primeira BreakoutHappened confirma se uma primeira quebra ocorreu. As condições de negociação precisam ser atendidas simultaneamente: o alto ou a baixa de uma quebra de preço às 8:30 AM é a primeira quebra do dia, o dia ainda não foi executado e está dentro do período de tempo permitido para a negociação.
As condições de saída para a estratégia incluem: preço tocando a linha de parada de tração dinâmica, atingindo o nível de parada predeterminado ou tocando a linha de parada fixa. A linha de parada de tração dinâmica se ajusta de acordo com o movimento do preço na direção favorável, bloqueando parte do lucro.
A estratégia tem as seguintes vantagens notáveis, através de uma análise profunda do código:
Regras claras de negociaçãoA estratégia baseia-se em níveis de preços claros (altos e baixos das 8:30 da manhã) para definir os sinais de entrada, com condições de negociação claras e fáceis de entender e executar.
Melhoria na gestão de riscosA estratégia combina mecanismos de controle de risco múltiplos, incluindo stop loss de rastreamento dinâmico, stop loss fixo e configuração de stop loss, para controlar efetivamente o risco de cada transação.
Evite o excesso de transaçõesA restrição de uma transação por dia evita o aumento dos custos de transação e os problemas de volatilidade causados por transações frequentes.
Filtro de tempoO Bitcoin foi criado para ser usado em transações de curto prazo. O Bitcoin foi criado para ser usado em transações de curto prazo.
Proteção dinâmica dos lucrosO mecanismo de rastreamento de stop loss pode ajustar a posição de stop loss à medida que o preço se move na direção favorável, protegendo a borda já lucrativa e não terminando prematuramente uma potencial tendência significativa.
Execução automáticaA estratégia é totalmente automatizada, evita interferência emocional humana e permite que as transações sejam executadas de acordo com regras predefinidas.
Altamente adaptávelA estratégia pode ser ajustada de acordo com diferentes cenários de mercado e preferências de risco pessoais através de configurações de parâmetros, como o rastreamento de pontos de parada e de paralisação.
Apesar do bom desenho da estratégia, existem os seguintes riscos potenciais:
Risco de Falso BreakoutA solução é adicionar um mecanismo de confirmação, como exigir que o preço permaneça por um determinado tempo ou amplitude após a quebra.
Pouca volatilidade: Se a volatilidade do mercado for menor, o preço pode não conseguir efetivamente romper o intervalo definido para 8:30 AM, resultando em menos oportunidades de negociação. Pode-se considerar ajustar os parâmetros da estratégia ou suspender o uso da estratégia em um ambiente de baixa volatilidade.
Excessiva dependência de um único ponto de tempoA estratégia é altamente dependente do desempenho dos preços no horário de 8:30 AM, e se houver uma flutuação anormal nesse horário, pode-se definir um intervalo de negociação irracional. Pode-se considerar o uso de médias de vários pontos de tempo ou a combinação de outros indicadores técnicos.
Sensibilidade do parâmetro: O rastreamento de paradas e paradas tem um grande impacto na performance da estratégia. Diferentes cenários de mercado podem exigir diferentes configurações de parâmetros. Recomenda-se um retorno completo para encontrar a combinação ideal de parâmetros.
Falta de gestão de fundosA estratégia atual não inclui regras específicas de gerenciamento de posições, o que pode levar a insuficiência de controle de risco. Recomenda-se a adição de um mecanismo de ajuste de posição baseado na volatilidade.
Risco de falha de mercado: Se houver uma grande lacuna no mercado, o stop-loss fixo pode não ser efetivamente executado, resultando em perdas superiores às esperadas. Pode ser considerado o uso de stop-loss percentual em vez de stop-loss de ponto fixo.
De acordo com a análise do código, a estratégia tem ainda algumas melhorias:
Adição de confirmação de volumeA estratégia atual baseia-se apenas no julgamento de brechas de preço, sem considerar o fator de volume de transação. A adição de confirmação de volume de transação pode aumentar a confiabilidade do sinal de ruptura, filtrando as falsas rupturas de baixo volume de transação. O método de otimização é aumentar o volume de transação em condições de entrada acima de uma determinada porcentagem de transações médias das linhas K anteriores.
Introdução de filtros ambientaisO desempenho da estratégia pode ser muito diferente em diferentes condições de mercado. Pode ser executado com indicadores de tendência (como ADX, média móvel, etc.) ou indicadores de volatilidade (como ATR), apenas em condições de mercado adequadas.
Optimizar parâmetros de stop loss e stop lossA atual configuração de stop loss e stop loss de pontos fixos pode ser alterada para ajustes dinâmicos baseados na volatilidade do mercado (como o ATR multiplicado) para que a estratégia seja mais adaptada a diferentes condições de mercado.
Aumentar a análise de multi-quadros de tempo: A direção do mercado em combinação com o marco de tempo mais alto, combinado com o sinal do marco de tempo atual, pode aumentar a taxa de sucesso da negociação. Por exemplo, execute uma negociação somente quando a direção da tendência do diabo coincide com a direção da ruptura.
Adição de filtro de sinal de retrocessoConsidere os sinais contrários de outros indicadores do mercado (como o RSI, MACD, etc.) e evite negociar em condições extremas.
Introdução do mecanismo de travagem dinâmicaAlém de rastrear o stop loss, pode-se considerar o ajuste dinâmico dos alvos de parada, por exemplo, a configuração de vários alvos de parada com base no nível de resistência de suporte ou no múltiplo de oscilação.
Optimizar a janela de tempo de negociaçãoA análise de dados históricos permite identificar as melhores janelas de tempo de negociação, que podem variar de acordo com o mercado ou produto.
A estratégia de rastreamento dinâmico de breakouts de altas e baixas no início do dia é uma estratégia de negociação diária baseada em breakouts de intervalos de preços, que captura oportunidades de breakouts de preços diários através da identificação de altas e baixas formadas no horário de 8:30 AM, combinadas com um mecanismo de rastreamento dinâmico de stop loss. As regras da estratégia são claras, o gerenciamento de risco é perfeito e o risco de excesso de negociação é efetivamente controlado por meio da limitação do número de negociações diárias e da configuração de janelas de tempo de negociação.
/*backtest
start: 2025-02-28 00:00:00
end: 2025-03-30 00:00:00
period: 5m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=5
strategy("Breakout of 8:30 AM High/Low", overlay=true)
// Identify 8:30 AM candle
is830 = (hour == 8 and minute == 30)
// Persistent variables for tracking
var float high830 = na
var float low830 = na
var int lastTradeDay = na
var bool tradeTakenToday = false
// Store 8:30 AM high and low
if is830
high830 := high
low830 := low
// Ensure high/low persist throughout the day
high830 := nz(high830, high830)
low830 := nz(low830, low830)
// Plot the high and low of the 8:30 AM candle
plot(high830, color=color.green, title="8:30 High", linewidth=2)
plot(low830, color=color.red, title="8:30 Low", linewidth=2)
// Reset tradeTakenToday at the start of each new trading day
if dayofweek != lastTradeDay or (hour == 0 and minute == 0)
tradeTakenToday := false
lastTradeDay := dayofweek // Update last trade day to the current day
// Track first breakout candle that closes outside the range
firstBreakoutHappened = ta.barssince(close > high830 or close < low830) == 0
// Time restriction: Only trade between 8:40 AM and 3:00 PM
isTradingTime = (hour == 8 and minute >= 40) or (hour > 8 and hour < 15)
// Entry conditions: first 15-min candle close outside the range & within trading time
longEntry = close > high830 and firstBreakoutHappened and not tradeTakenToday and isTradingTime
shortEntry = close < low830 and firstBreakoutHappened and not tradeTakenToday and isTradingTime
// Trailing stop and take profit logic inputs
ticks = input.int(15, title="Trailing Stop Loss Ticks", minval=1) // Trailing stop in ticks
takeProfit = input.int(30, title="Take Profit (in Ticks)", minval=1) // Take profit in ticks
// Variables to track trailing stop levels
var float longTrailingStop = na
var float shortTrailingStop = na
// Update trailing stop levels for long trades
if (longEntry)
longTrailingStop := close - ticks * syminfo.mintick // Initialize trailing stop for long
// Update trailing stop levels for short trades
if (shortEntry)
shortTrailingStop := close + ticks * syminfo.mintick // Initialize trailing stop for short
// Update trailing stop levels during the trade
if (not na(longTrailingStop))
longTrailingStop := math.max(longTrailingStop, close - ticks * syminfo.mintick) // Move trailing stop up for long
if (not na(shortTrailingStop))
shortTrailingStop := math.min(shortTrailingStop, close + ticks * syminfo.mintick) // Move trailing stop down for short
// Exit Conditions (Trailing Stop)
endLongTrade = not na(longTrailingStop) and close <= longTrailingStop
endShortTrade = not na(shortTrailingStop) and close >= shortTrailingStop
// Reset trailing stop levels after exit
if (endLongTrade)
longTrailingStop := na
if (endShortTrade)
shortTrailingStop := na
// Stop loss and take profit settings
stopLoss = 100
// Execute trades (only one per day)
if longEntry
strategy.entry("Long", strategy.long, comment="Breakout Long")
strategy.exit("Long TP/SL", from_entry="Long", stop=close - stopLoss, limit=close + takeProfit * syminfo.mintick)
tradeTakenToday := true
if shortEntry
strategy.entry("Short", strategy.short, comment="Breakout Short")
strategy.exit("Short TP/SL", from_entry="Short", stop=close + stopLoss, limit=close - takeProfit * syminfo.mintick)
tradeTakenToday := true
// Exit trades using trailing stops
if endLongTrade
strategy.close("Long", comment="Trailing Stop Hit for Long")
if endShortTrade
strategy.close("Short", comment="Trailing Stop Hit for Short")