
A estratégia é um sistema de negociação quantitativa projetado especificamente para negociação intradiária, cuja ideia central gira em torno do comportamento de preços na primeira hora do mercado. A estratégia cria um sistema de negociação completo, identificando os altos e baixos da primeira hora de abertura do mercado como níveis de ruptura críticos, combinando o EMA (Média Móvel do Índice), o VWAP (Média de Preço Ponderado do Vendedor) e o ATR dinâmico (Média Real Range). A estratégia tem foco especial na opção de retorno ao momento da oportunidade, permitindo que o sinal de negociação seja acionado somente após o final da primeira hora do mercado, o que ajuda a evitar a volatilidade e as falsas rupturas do mercado.
A lógica central da estratégia pode ser dividida em várias partes-chave:
Os pontos altos e baixos da primeira hora estão definidos.A estratégia consiste em monitorar e registrar os preços mais altos e mais baixos nas primeiras horas após a abertura do mercado (os 60 minutos que começam às 9:15), os quais serão usados como potenciais pontos de ruptura.
Cálculo de indicadores técnicos:
Condições de entrada:
Estratégia de saída:
Gestão de fundos:
Esta concepção de design combina breakouts, confirmação de tendências e gestão de risco dinâmico, formando um método de negociação completo e sistemático. A estratégia reduz efetivamente o risco de falsas brechas, exigindo que as brechas de preços ocorram ao mesmo tempo que a confirmação de indicadores técnicos.
Uma análise mais aprofundada do código da estratégia pode ser resumida em algumas vantagens evidentes:
A hora exacta de entradaA estratégia é capaz de capturar oportunidades de ruptura importantes durante o dia. As primeiras horas do mercado geralmente definem as faixas de negociação do dia. A ruptura desses níveis geralmente significa um forte impulso dinâmico.
Mecanismo de confirmação múltiplaA estratégia não depende apenas da ruptura de preços, mas também exige a confirmação cruzada da EMA com o VWAP e a consistência da direção da inclinação da EMA. Esta filtragem múltipla reduz consideravelmente os falsos sinais.
Gestão de Riscos DinâmicosUtilizando o ATR como base de stop loss, a estratégia pode ajustar automaticamente a distância de stop loss de acordo com a volatilidade do mercado, dando mais espaço de respiração ao preço em situações de grande volatilidade e apertando o stop loss para proteger os lucros em situações de menor volatilidade.
Regras claras de negociaçãoA estratégia define claramente as condições de entrada e saída, reduz o julgamento subjetivo e ajuda a manter a disciplina de negociação.
Funções auxiliares visuaisO código inclui marcas de sinais e visualizações de níveis críticos, ajudando os comerciantes a entender intuitivamente a lógica da estratégia e monitorar as oportunidades de negociação em tempo real.
Adaptar-se ao ritmo do mercadoA estratégia evita as flutuações desordenadas que são frequentes no início do jogo, permitindo a entrada somente após o término da primeira hora, concentrando-se em movimentos mais prováveis de permanência.
Embora a estratégia tenha sido concebida com raciocínio lógico, existem alguns riscos e limitações potenciais:
Excesso de dependência de um único período de tempoA estratégia depende excessivamente dos altos e baixos formados na primeira hora, e se esse período não for representativo (por exemplo, com baixa volatilidade ou influenciado por notícias temporárias), pode levar à diminuição da qualidade do sinal de negociação subsequente.
Limitações da proporção de suspensão fixaA meta de stop-loss fixo de 1 por cento pode não ser adaptada a diferentes cenários de mercado e a diferentes ativos de volatilidade. Em dias de forte tendência, isso pode levar a um fim prematuro dos lucros e à perda de maiores lucros potenciais.
Risco de atraso da EMA e do VWAPComo um indicador de atraso, o sinal cruzado entre EMA e VWAP pode aparecer depois que o preço já foi significativamente ultrapassado, resultando em um preço de entrada não desejável.
Sem considerar o contexto global do mercadoA estratégia não inclui uma avaliação mais ampla do cenário de mercado (como tendências globais de mercado, cenário de volatilidade ou análise de correlação) e pode ter um desempenho fraco em determinadas condições de mercado.
Desafios na implementação da estratégia do diaComo uma estratégia diária, exige uma maior eficiência de execução e um menor ponto de deslizamento, o que pode ser um desafio nas negociações reais.
Para reduzir esses riscos, recomenda-se:
De acordo com a análise da lógica da estratégia e dos riscos potenciais, algumas orientações de otimização a considerar são:
Ajustes de parâmetros de adaptação:
Aumentar a filtragem de mercado:
Optimizar a lógica da primeira hora:
Melhorias no mecanismo de partida:
Melhorar a gestão de riscos:
Essas orientações de otimização visam preservar a lógica central da estratégia, aumentando sua adaptabilidade e robustez, permitindo que ela permaneça eficaz em condições de mercado mais amplas.
A estratégia de otimização de parada de perda ATR e EMA de primeira hora é um sistema de negociação de quantificação intradiária bem estruturado, que fornece aos comerciantes uma abordagem de negociação sistematizada, combinando a ruptura de alta e baixa da primeira hora, a confirmação de indicadores técnicos e a gestão de risco dinâmica. O maior benefício da estratégia reside em seu mecanismo de confirmação múltipla e regras de negociação claras, o que ajuda a reduzir os sinais falsos e manter a disciplina de negociação.
No entanto, a estratégia também apresenta algumas limitações, como a dependência excessiva de um único período de tempo e a adaptabilidade de objetivos de parada fixos. Os comerciantes podem melhorar ainda mais a robustez e a adaptabilidade da estratégia, implementando medidas de otimização recomendadas, como o ajuste de parâmetros de adaptação, o aumento da filtragem do ambiente de mercado e a melhoria do mecanismo de saída.
Em geral, é uma estratégia de negociação com uma base sólida e pensamento claro, especialmente para os comerciantes de quantidade interessados em negociação intradiária. Com o ajuste e otimização de parâmetros apropriados, tem o potencial de ser uma ferramenta eficaz no portfólio de negociação.
/*backtest
start: 2024-02-29 00:00:00
end: 2025-02-26 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=5
strategy("FnO Intraday Strategy with ATR SL, EMA Slope & Signals", overlay=true, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=10)
// INPUTS
atrPeriod = input.int(14, "ATR Period")
atrMultiplier = input.float(1.0, "ATR Stop Loss Multiplier", step=0.1)
targetPercent = input.float(1.0, "Profit Target (%)", step=0.1) * 0.01
// Define session start and first candle period (for Indian market, session starts at 09:15)
sessionStartHour = input.int(9, "Session Start Hour", minval=0, maxval=23)
sessionStartMinute = input.int(15, "Session Start Minute", minval=0, maxval=59)
firstCandleMins = 60 // First candle duration in minutes
// Compute today's session start and first candle end timestamps
currYear = year(time)
currMonth = month(time)
currDay = dayofmonth(time)
sessionStartTS = timestamp(currYear, currMonth, currDay, sessionStartHour, sessionStartMinute)
sessionEndTS = sessionStartTS + firstCandleMins * 60 * 1000 // PineScript time is in ms
// INITIALIZE first-hour high/low (reset at the start of each day)
var float firstHourHigh = na
var float firstHourLow = na
if (ta.change(time("D")))
firstHourHigh := na, firstHourLow := na
// Update first-hour high/low while within the first candle period
if (time >= sessionStartTS and time <= sessionEndTS)
firstHourHigh := na(firstHourHigh) ? high : math.max(firstHourHigh, high)
firstHourLow := na(firstHourLow) ? low : math.min(firstHourLow, low)
// Plot the first-hour high and low once the first candle period is over
plot(time > sessionEndTS ? firstHourHigh : na, title="First Hour High", color=color.green, style=plot.style_linebr)
plot(time > sessionEndTS ? firstHourLow : na, title="First Hour Low", color=color.red, style=plot.style_linebr)
// Calculate indicators: 9 EMA, VWAP, and EMA slope
ema9 = ta.ema(close, 9)
vwapVal = ta.vwap(hlc3) // Using typical price for VWAP calculation
emaSlope = ema9 - ema9[1]
// Define "first hour complete" flag so entries only occur after the first candle period
firstHourComplete = time > sessionEndTS
// ENTRY CONDITIONS
// Long: Price breaks above first-hour high, and 9 EMA crosses above VWAP with a positive slope.
longBreakout = ta.crossover(close, firstHourHigh)
longEMAConfirmation = ta.crossover(ema9, vwapVal) and (emaSlope > 0)
longCondition = firstHourComplete and longBreakout and longEMAConfirmation
// Short: Price breaks below first-hour low, and 9 EMA crosses below VWAP with a negative slope.
shortBreakout = ta.crossunder(close, firstHourLow)
shortEMAConfirmation = ta.crossunder(ema9, vwapVal) and (emaSlope < 0)
shortCondition = firstHourComplete and shortBreakout and shortEMAConfirmation
// Generate entries
if (longCondition)
strategy.entry("Long", strategy.long)
if (shortCondition)
strategy.entry("Short", strategy.short)
// Add buy and sell signals on the chart
plotshape(longCondition, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY")
plotshape(shortCondition, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL")
// Calculate ATR for dynamic stop loss
atrValue = ta.atr(atrPeriod)
// Set exits using ATR-based stop loss and fixed profit target (1% gain)
if (strategy.position_size > 0)
longStop = strategy.position_avg_price - atrValue * atrMultiplier
longTarget = strategy.position_avg_price * (1 + targetPercent)
strategy.exit("Long Exit", from_entry="Long", stop=longStop, limit=longTarget)
if (strategy.position_size < 0)
shortStop = strategy.position_avg_price + atrValue * atrMultiplier
shortTarget = strategy.position_avg_price * (1 - targetPercent)
strategy.exit("Short Exit", from_entry="Short", stop=shortStop, limit=shortTarget)
// Plot EMA and VWAP for visual confirmation
plot(ema9, title="9 EMA", color=color.blue)
plot(vwapVal, title="VWAP", color=color.orange)