
A estratégia de negociação de quantificação de ruptura de intervalo de média móvel ponderada de quadros altos é um sistema de negociação baseado em ruptura de intervalo de preço, que combina a média móvel ponderada de quadros altos (WMA) e o intervalo percentual para construir uma área de negociação. A estratégia gera sinais de entrada identificando situações em que o preço se rompe para cima ou para baixo, e aplica configurações de ganho e perda em bloco para gerenciar o risco.
O princípio básico da estratégia é a utilização de médias móveis ponderadas de quadros de tempo altos para construir intervalos de atividade de preços. Os passos para a implementação são os seguintes:
A estratégia usa elementos visuais, como mudanças de cor de fundo, filtros personalizados e marcas de entrada/saída, para permitir que os comerciantes identifiquem intuitivamente os intervalos de negociação e o estado atual do mercado. Além disso, a estratégia mostra a variação percentual da posição atual e aplica o fator multiplicador (default 20) para destacar a mudança de preço.
Ao analisarmos mais a fundo o código da estratégia, descobrimos as seguintes vantagens:
Filtro de alturaA estratégia é capaz de filtrar o ruído do mercado de curto prazo, capturar movimentos de preços mais significativos e reduzir os sinais falsos, usando médias móveis ponderadas em quadros de tempo mais altos.
Zona de negociação dinâmicaA estratégia é a construção dinâmica de intervalos de negociação baseados em pontos médios de preços e percentagens, que podem ser adaptados a diferentes condições e volatilidade do mercado, evitando as limitações de pontos de suporte/resistência fixos.
Regras claras de entrada e saídaA estratégia fornece sinais de entrada claros (BREAK UP/BELOW TRAIL) e regras de saída (STOP AND LOSS), eliminando a subjetividade nas decisões de negociação.
Integração de Gestão de RiscosO mecanismo de parada de perdas e de bloqueio de lotes ajuda a proteger o capital e bloquear os lucros, sendo um sistema de negociação completo.
Comentários visuaisA estratégia oferece uma grande variedade de elementos visuais, incluindo cores de fundo entre os intervalos de negociação, etiquetas de variação de porcentagem e marcas de entrada/saída, para ajudar os comerciantes a avaliar rapidamente a situação do mercado.
Configuração de parâmetros flexívelOs usuários podem ajustar vários parâmetros de acordo com as preferências pessoais e as diferentes condições de mercado, incluindo o período de tempo, o período de média móvel, a porcentagem de taxa, o nível de stop/stop e o elemento visual.
Coordenação de quadros de tempo múltiplosA estratégia combina a qualidade do sinal de um período de tempo elevado com a precisão de execução do período atual, permitindo a coordenação de vários períodos.
Apesar das vantagens da estratégia, há também os seguintes riscos potenciais:
Falso sinal.Os preços podem romper temporariamente a fronteira de um intervalo e depois regressar, causando um sinal de negociação errado. Para reduzir esse risco, pode-se considerar o aumento de mecanismos de confirmação, como exigir que os preços permaneçam por um período após a ruptura, ou em combinação com outros indicadores.
Inadequado para mercados altamente voláteisEm um mercado altamente volátil, os preços podem frequentemente ultrapassar os limites de um intervalo, resultando em excesso de negociação e em potenciais perdas. Nesse caso, pode-se aumentar o intervalo ou mudar para um período de tempo mais alto.
Percentagem fixa de stop loss / stop loss não é suficientemente flexívelA volatilidade do mercado muda com o tempo, e um percentual fixo de stop/stop pode nem sempre ser o melhor. Pode-se considerar o ajuste dinâmico do nível de stop/stop com base em indicadores de volatilidade (como o ATR).
Sensibilidade do parâmetroO desempenho da estratégia pode ser altamente sensível a configurações de parâmetros, como o ciclo WMA, a taxa de intervalo e a porcentagem de parada/perda. É necessário um histórico completo de retorno e otimização de parâmetros.
Risco de otimização excessivaO excesso de ajuste de dados históricos específicos pode levar a um fraco desempenho futuro. Recomenda-se um retorno em vários mercados e períodos de tempo, mantendo os parâmetros relativamente estáveis.
Adaptabilidade a mudanças de tendências de mercadoA estratégia não ajusta seu intervalo de acordo com novas tendências de mercado após uma ruptura de intervalo, o que pode levar a sinais errados em mercados de forte tendência. Pode ser considerado o acréscimo de filtros de tendência ou de intervalo de ajuste dinâmico.
Com base em uma análise profunda do código, a estratégia pode ser otimizada nas seguintes direções:
Adição de mecanismo de confirmação de rupturaPara reduzir a falsa ruptura, pode-se adicionar condições adicionais de confirmação, como a exigência de um preço de fechamento após a ruptura, confirmação de volume de transação ou a confirmação cruzada com outros indicadores técnicos (como RSI, MACD).
Definição de perda dinâmicaSubstituição de stop loss de porcentagem fixa por stop loss dinâmico baseado na volatilidade do mercado, como o uso de múltiplos do ATR (Average True Range) para definir os níveis de stop loss, para que a estratégia se adapte melhor a diferentes condições de mercado.
Adicionar filtro de tendências: Adicionar componentes de identificação de tendências, como médias móveis de longo prazo ou indicadores ADX, para ajustar o comportamento de negociação em mercados de forte tendência, como fazer apenas mais em tendências ascendentes e fazer apenas menos em tendências descendentes.
Otimização do tempo de entradaA estratégia atual é entrar imediatamente quando o preço acaba de romper a fronteira entre os blocos, podendo ser considerado esperar por um retorno ou confirmação de um determinado padrão, melhorando a qualidade do momento de entrada.
Adição de módulo de gestão de fundos: Realizar cálculos de tamanho de posição mais complexos, ajustando dinamicamente o tamanho da posição com base no tamanho da conta, na volatilidade do mercado e no risco de negociação atual, em vez de usar posições fixas.
Adicionar filtro de status de mercadoIdentificar o estado do mercado (como tendências, oscilações intercalares ou altas flutuações) e ajustar os parâmetros da estratégia ou suspender a negociação de acordo com o estado do mercado.
Implementando parâmetros adaptativosAperfeiçoar a adaptabilidade da estratégia: permitir que os parâmetros-chave, como a taxa de intervalo, o ciclo WMA, etc., se ajustem automaticamente com base na volatilidade histórica ou outras características do mercado.
Integração de sinais de multi-quadro de tempoO WMA pode ser usado para construir intervalos não apenas em quadros de tempo altos, mas também para analisar o comportamento e os indicadores de preços em vários quadros de tempo, permitindo uma análise de mercado mais abrangente e decisões de negociação.
A estratégia de negociação de quantificação de ruptura de intervalos de média móvel ponderada de quadros de alta hora é um sistema de negociação bem estruturado que é construído para capturar oportunidades de ruptura de preço por meio da combinação de médias móveis ponderadas de intervalos de alta hora e intervalos dinâmicos. A vantagem da estratégia está em sua capacidade de filtragem de quadros de alta hora, regras de negociação claras, mecanismo de gerenciamento de risco embutido e abundância de feedback visual. No entanto, também enfrenta desafios como ruptura de falsos sinais, sensibilidade de parâmetros e adaptabilidade ao mercado.
A robustez e a rentabilidade da estratégia podem ser aumentadas ainda mais através da implementação de orientações de otimização recomendadas, como a adição de mecanismos de confirmação de ruptura, configurações de parada de perda dinâmica, filtragem de tendências e parâmetros de adaptação. Acima de tudo, o comerciante deve ter uma compreensão completa dos princípios da estratégia e fazer um retorno histórico suficiente para ajustar os parâmetros de acordo com o mercado específico e as preferências de risco pessoais para aproveitar ao máximo o potencial da estratégia.
Esta estratégia baseada em breakouts de intervalos é adequada para os comerciantes de médio e longo prazo, especialmente aqueles que procuram capturar breakouts de preços importantes enquanto mantêm o controle do risco. Com otimização e ajuste contínuos, esta estratégia pode ser uma arma poderosa na caixa de ferramentas dos comerciantes.
/*backtest
start: 2025-01-01 00:00:00
end: 2025-05-25 00:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"SOL_USDT"}]
*/
//@version=5
strategy('ZONE FLOW', overlay=true)
// Input parameters
src = close
src1 = open
src2 = low
src3 = high
Min = input(60, title='Minimum Period')
len = timeframe.isintraday and timeframe.multiplier >= 1 ? Min / timeframe.multiplier * 7 : timeframe.isintraday and timeframe.multiplier < 60 ? 60 / timeframe.multiplier * 24 * 7 : 7
c1 = ta.wma(src, len)
o1 = ta.wma(src1, len)
l1 = ta.wma(src2, len)
h1 = ta.wma(src3, len)
HTF = input.timeframe('M', title='Higher Time Frame')
ti = ta.change(time(HTF)) != 0
c = fixnan(ti ? c1 : na)
o = fixnan(ti ? o1 : na)
h = fixnan(ti ? h1 : na)
l = fixnan(ti ? l1 : na)
// Calculating mid-point
m = (h + l) / 2
// Calculating ratio lines
ratio = input.float(0.1, title='% ratio', minval=0.001, maxval=10)
r1 = m * ratio
u = m + r1
d = m - r1
// Take profit settings
takeProfitPercentage1 = input.float(10.0, title='Take Profit 1 (%)', minval=0.1, maxval=100.0) / 100
takeProfitQuantity1 = input.float(50.0, title='Take Profit 1 Quantity (%)', minval=0.1, maxval=100.0) / 100
takeProfitPercentage2 = input.float(20.0, title='Take Profit 2 (%)', minval=0.1, maxval=100.0) / 100
takeProfitQuantity2 = input.float(50.0, title='Take Profit 2 Quantity (%)', minval=0.1, maxval=100.0) / 100
// Stop loss settings
stopLossPercentage = input.float(5.0, title='Stop Loss (%)', minval=0.1, maxval=100.0) / 100
// Number of bars to extend lines
extensionBars = input.int(5, title='Number of Bars to Extend Lines', minval=1)
// Number of bars to offset the percentage label
percentOffsetBars = input.int(25, title='Number of Bars to Offset Percentage Label', minval=1)
// Input for multiplying the percentage change
multiplierFactor = input.int(20, title='Multiplier for Percentage Change', minval=1)
// Input for background colors
bgColor1 = input(color.new(color.blue, 90), title='Background Color 1')
bgColor2 = input(color.new(color.orange, 90), title='Background Color 2')
// Plot high, low, and ratio lines
ppo = plot(u, color=color.new(color.blue, 0), title='Upper Line (Resistance)', style=plot.style_stepline)
ppc = plot(d, color=color.new(color.orange, 0), title='Lower Line (Support)', style=plot.style_stepline)
plot(u, color=color.new(color.blue, 0), title='Upper Line (Resistance)', style=plot.style_circles, linewidth=2)
plot(d, color=color.new(color.orange, 0), title='Lower Line (Support)', style=plot.style_circles, linewidth=2)
// Fill the background between ratio lines with two different colors
fill(ppo, ppc, color=bgColor1)
// Calculate mid-point for background color switching
midPoint = (u + d) / 2
bgColorSwitch = close >= midPoint ? bgColor1 : bgColor2
fill(ppo, ppc, color=bgColorSwitch, transp=90)
// Initialize variables for lines and labels
var line tp1Line = na
var line tp2Line = na
var line stopLossLine = na
var line entryLine = na
var label tp1Label = na
var label tp2Label = na
var label stopLossLabel = na
var label entryLabel = na
var label percentLabel = na
// Variable to store the entry bar index
var int entryBarIndexLong = na
var int entryBarIndexShort = na
// Function to delete old labels and lines
deleteOldLinesAndLabels() =>
if not na(tp1Line)
line.delete(tp1Line)
if not na(tp2Line)
line.delete(tp2Line)
if not na(stopLossLine)
line.delete(stopLossLine)
if not na(entryLine)
line.delete(entryLine)
if not na(tp1Label)
label.delete(tp1Label)
if not na(tp2Label)
label.delete(tp2Label)
if not na(stopLossLabel)
label.delete(stopLossLabel)
if not na(entryLabel)
label.delete(entryLabel)
if not na(percentLabel)
label.delete(percentLabel)
// Strategy logic
longCondition = ta.crossover(close, u)
shortCondition = ta.crossunder(close, d)
if longCondition
strategy.entry('Long', strategy.long)
entryBarIndexLong := bar_index
entryBarIndexLong
if shortCondition
strategy.entry('Short', strategy.short)
entryBarIndexShort := bar_index
entryBarIndexShort
// Calculate take profit and stop loss levels for long positions
if strategy.position_size > 0 // Check if there's an open long position
takeProfitLevelLong1 = strategy.position_avg_price * (1 + takeProfitPercentage1)
takeProfitLevelLong2 = strategy.position_avg_price * (1 + takeProfitPercentage2)
stopLossLevelLong = strategy.position_avg_price * (1 - stopLossPercentage)
entryPrice = strategy.position_avg_price
// Delete existing lines and labels if they exist
deleteOldLinesAndLabels()
// Exit a portion of the position at each take profit level
strategy.exit('TP1', 'Long', limit=takeProfitLevelLong1, qty=strategy.position_size * takeProfitQuantity1)
strategy.exit('TP2', 'Long', limit=takeProfitLevelLong2, qty=strategy.position_size * takeProfitQuantity2)
strategy.exit('Stop Loss', 'Long', stop=stopLossLevelLong)
// Display percentage change from entry price
percentChange = (close - strategy.position_avg_price) / strategy.position_avg_price * 100
percentMultiplied = percentChange * multiplierFactor
percentColor = percentChange >= 0 ? color.green : color.red
// Update label position to follow price line with larger text size
percentLabel := label.new(x=bar_index + percentOffsetBars, y=close, text=str.tostring(percentMultiplied, format.percent) + '%', color=percentColor, textcolor=color.white, size=size.large, style=label.style_label_down)
percentLabel
if strategy.position_size < 0 // Check if there's an open short position
takeProfitLevelShort1 = strategy.position_avg_price * (1 - takeProfitPercentage1)
takeProfitLevelShort2 = strategy.position_avg_price * (1 - takeProfitPercentage2)
stopLossLevelShort = strategy.position_avg_price * (1 + stopLossPercentage)
entryPrice = strategy.position_avg_price
// Delete existing lines and labels if they exist
deleteOldLinesAndLabels()
// Exit a portion of the position at each take profit level
strategy.exit('TP1', 'Short', limit=takeProfitLevelShort1, qty=strategy.position_size * takeProfitQuantity1)
strategy.exit('TP2', 'Short', limit=takeProfitLevelShort2, qty=strategy.position_size * takeProfitQuantity2)
strategy.exit('Stop Loss', 'Short', stop=stopLossLevelShort)
// Display percentage change from entry price
percentChange = (strategy.position_avg_price - close) / strategy.position_avg_price * 100
percentMultiplied = percentChange * multiplierFactor
percentColor = percentChange >= 0 ? color.green : color.red
// Update label position to follow price line with larger text size
percentLabel := label.new(x=bar_index + percentOffsetBars, y=close, text=str.tostring(percentMultiplied, format.percent) + '%', color=percentColor, textcolor=color.white, size=size.large, style=label.style_label_down)
percentLabel
// Add buy and sell signals with shapes
plotshape(series=longCondition, title='Buy Signal', location=location.belowbar, color=color.new(color.green, 0), style=shape.labelup, text='.')
plotshape(series=shortCondition, title='Sell Signal', location=location.abovebar, color=color.new(color.red, 0), style=shape.labeldown, text='.')
// Remove old labels when they go out of scope
if bar_index % 50 == 0
deleteOldLinesAndLabels()
// Define colors for candles based on background color
candleColorBull = bgColorSwitch // Use background color for bullish candles
candleColorBear = bgColorSwitch // Use background color for bearish candles
borderColorBull = color.black // Border color for bullish candles
borderColorBear = color.black // Border color for bearish candles
// Plot candles with custom colors
plotcandle(open, high, low, close, color=close >= open ? candleColorBull : candleColorBear, bordercolor=close >= open ? borderColorBull : borderColorBear, wickcolor=color.gray)