Estratégia de negociação adaptativa de bloco de ordem de breakout fractal multiperíodo

OB SD MA ATR
Data de criação: 2024-12-27 15:49:16 última modificação: 2024-12-27 15:49:16
cópia: 8 Cliques: 479
1
focar em
1617
Seguidores

Estratégia de negociação adaptativa de bloco de ordem de breakout fractal multiperíodo

Visão geral

A estratégia é um sistema de negociação adaptável baseado na teoria fractal e na análise de blocos de ordens. Ele captura oportunidades de negociação de alta probabilidade identificando os principais níveis de suporte e resistência na estrutura do mercado, combinados com sinais de rompimento fractal e confirmações de bloco de ordens. A estratégia integra vários indicadores técnicos, incluindo indicadores fractais, blocos de ordens dinâmicos e sistemas de confirmação de rompimento de preços, para obter posicionamento preciso dos pontos de virada do mercado e compreensão precisa das oportunidades de negociação.

Princípio da estratégia

A lógica central da estratégia é construída em três pilares principais: primeiro, monitoramento contínuo das máximas e mínimas do mercado por meio do módulo de cálculo fractal para identificar potenciais áreas de mudança de tendência; segundo, por meio da análise de blocos de ordens, estabelecendo áreas de oferta e demanda em níveis de preços-chave ; e, finalmente, por meio do sistema de confirmação de rompimento para verificar a validade dos rompimentos de preços. Quando o preço rompe o fractal superior e é confirmado como válido, o sistema criará um bloco de ordens de área de demanda na área de vela vermelha mais próxima e abrirá uma ordem longa; quando o preço rompe o fractal inferior e é confirmado como válido , o sistema criará uma área de fornecimento na área de vela verde mais próxima Bloco de ordens e abrirá uma ordem curta. A estratégia também inclui uma função de atualização dinâmica para a cor do bloco de ordens, que é usada para exibir intuitivamente a relação de posição relativa entre o preço e o bloco de ordens.

Vantagens estratégicas

  1. Forte adaptabilidade: a estratégia pode ajustar dinamicamente a posição e o tamanho do bloco de ordens de acordo com as condições de mercado e se adaptar a diferentes ambientes de mercado.
  2. Mecanismo de confirmação múltipla: combina rompimento fractal, confirmação de bloco de ordens e análise de ação de preço para reduzir o risco de sinais falsos.
  3. Gerenciamento de risco aprimorado: ajude os traders a monitorar o status da operação da estratégia em tempo real por meio de feedback visual claro e lista de verificação de status.
  4. Excelente visualização: fornece uma interface gráfica intuitiva, incluindo marcadores fractais, exibição de blocos de ordens e lista de verificação de status.
  5. Parâmetros flexíveis e ajustáveis: permite que os usuários ajustem parâmetros-chave, como período fractal, tipo de avanço, etc., de acordo com seu estilo pessoal de negociação.

Risco estratégico

  1. Risco de volatilidade do mercado: Sinais falsos de rompimento podem ser gerados em mercados altamente voláteis, exigindo mecanismos de filtragem adicionais.
  2. Risco de deslizamento: Em um ambiente de mercado com liquidez insuficiente, o preço de execução da ordem pode se desviar do ponto de entrada ideal.
  3. Dependência de tendências: uma estratégia pode não ter um desempenho tão bom em um mercado lateral quanto em um mercado de tendências.
  4. Sensibilidade dos parâmetros: diferentes configurações de período fractal podem levar a resultados de negociação significativamente diferentes.
  5. Consumo de recursos de computação: funções complexas de visualização e cálculos em tempo real podem aumentar a carga do sistema.

Direção de otimização

  1. Apresentando filtros de volatilidade: otimize sinais de negociação por meio de ATR ou outros indicadores de volatilidade.
  2. Adicione mecanismo de confirmação de tendência: combine com média móvel ou outros indicadores de tendência para melhorar a confiabilidade do sinal.
  3. Melhore o mecanismo de stop-loss: crie uma estratégia dinâmica de stop-loss com base na estrutura do bloco de ordens.
  4. Otimize o tamanho do bloco de pedidos: ajuste dinamicamente o tamanho do bloco de pedidos com base na volatilidade do mercado.
  5. Adicionar análise de volume: combine dados de volume para verificar a eficácia do avanço.

Resumir

Esta é uma estratégia de negociação complexa que integra múltiplas dimensões de análise técnica. Ela constrói um sistema de negociação completo com teoria fractal e análise de bloco de ordens como núcleo. As vantagens da estratégia residem na sua adaptabilidade e nos múltiplos mecanismos de confirmação, mas, ao mesmo tempo, também precisamos prestar atenção ao impacto do ambiente de mercado no desempenho da estratégia. Por meio das direções de otimização recomendadas, espera-se que a confiabilidade e a estabilidade da estratégia sejam ainda mais aprimoradas.

Código-fonte da estratégia
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-25 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Supply and Demand - Order Block Strategy", format=format.price, precision=0, overlay=true)

// Input options for customization
changeColor = input(false, title="Change Box Colors?")
breakType = input.string("Wick+Body", title="Fractal Break Type:", options=["Wick+Body", "Body"])
n = input.int(title="Periods", defval=2, minval=1, tooltip="Number of periods for fractal lookback")

if n <= 0
    runtime.error("Periods input must be greater than zero.")

transGreenClr = input.color(color.new(color.green, 80), title="Bg:", inline="a_1")
greenClr = input.color(color.new(color.green, 0), title="Border:", inline="a_1")

transRedClr = input.color(color.new(color.red, 80), title="Bg:", inline="b_1")
redClr = input.color(color.new(color.red, 0), title="Border:", inline="b_1")

// --- Fractal Calculation ---
upFractal = high[n] == ta.highest(high, 2 * n + 1)
downFractal = low[n] == ta.lowest(low, 2 * n + 1)
// --- End Fractal Calculation ---

var float topValue = na
var float bottomValue = na
var int lastRedIndex = na
var float lastRedLow = na
var float lastRedHigh = na
var int lastGreenIndex = na
var float lastGreenLow = na
var float lastGreenHigh = na
var line topLine = na
var line bottomLine = na
var box demandBox = na
var box supplyBox = na
var topBreakBlock = false
var bottomBreakBlock = false
var isLongBreak = false
var isShortBreak = false
topBreakCheckSource = breakType == "Wick+Body" ? high : close
bottomBreakCheckSource = breakType == "Wick+Body" ? low : close

// Last Red Check
if close < open
    lastRedIndex := bar_index
    lastRedLow := low
    lastRedHigh := high

// Last Green Check
if close > open
    lastGreenIndex := bar_index
    lastGreenLow := low
    lastGreenHigh := high

// Top break
if ta.crossover(topBreakCheckSource, topValue) and not topBreakBlock
    topBreakBlock := true
    isLongBreak := true
    // line.set_x2(topLine, bar_index)
    // demandBox := box.new(lastRedIndex - 1, lastRedHigh, lastRedIndex + 1, lastRedLow, bgcolor=transGreenClr, border_color=greenClr)
    if strategy.position_size <= 0
        strategy.entry("Long", strategy.long)

// Bottom break
if ta.crossunder(bottomBreakCheckSource, bottomValue) and not bottomBreakBlock
    bottomBreakBlock := true
    isShortBreak := true
    // line.set_x2(bottomLine, bar_index)
    // supplyBox := box.new(lastGreenIndex - 1, lastGreenHigh, lastGreenIndex + 1, lastGreenLow, bgcolor=transRedClr, border_color=redClr)
    if strategy.position_size >= 0
        strategy.entry("Short", strategy.short)

// New up fractal
if upFractal
    topBreakBlock := false
    isLongBreak := false
    topValue := high[n]
    // topLine := line.new(bar_index[n], topValue, bar_index, topValue, color=color.teal, style=line.style_dotted, width=2)
    // if not isLongBreak[1]
    //     line.delete(topLine[1])

// New down fractal
if downFractal
    bottomBreakBlock := false
    isShortBreak := false
    bottomValue := low[n]
    // bottomLine := line.new(bar_index[n], bottomValue, bar_index, bottomValue, color=color.maroon, style=line.style_dotted, width=2)
    // if not isShortBreak[1]
    //     line.delete(bottomLine[1])

// Box state update
// activeBoxes = box.all
// if array.size(activeBoxes) > 0 and changeColor
//     for i = 0 to array.size(activeBoxes) - 1
//         boxId = array.get(activeBoxes, i)
//         bVal = box.get_bottom(boxId)
//         tVal = box.get_top(boxId)
//         if close < bVal
//             box.set_bgcolor(boxId, transRedClr)
//             box.set_border_color(boxId, redClr)
//         if close > tVal
//             box.set_bgcolor(boxId, transGreenClr)
//             box.set_border_color(boxId, greenClr)

//PLOTS
plotshape(downFractal ,style=shape.triangleup, location=location.belowbar, offset=-n, color=color.new(color.gray,80), size = size.tiny)
plotshape(upFractal, style=shape.triangledown,   location=location.abovebar, offset=-n, color=color.new(color.gray,80), size = size.tiny)

// --- Checklist Table ---
// var table checklistTable = table.new(position.bottom_right, 2, 8, bgcolor=color.new(color.gray, 80), border_width=1)

// if barstate.islast
//     table.cell(checklistTable, 0, 0, "Condition", text_color=color.white, text_size=size.small, bgcolor=color.teal)
//     table.cell(checklistTable, 1, 0, "Status", text_color=color.white, text_size=size.small, bgcolor=color.teal)

//     table.cell(checklistTable, 0, 1, "Up Fractal", text_size=size.small)
//     table.cell(checklistTable, 1, 1, upFractal ? "✅" : "❌", text_color=upFractal ? color.green : color.red, text_size=size.small)

//     table.cell(checklistTable, 0, 2, "Down Fractal", text_size=size.small)
//     table.cell(checklistTable, 1, 2, downFractal ? "✅" : "❌", text_color=downFractal ? color.green : color.red, text_size=size.small)

//     table.cell(checklistTable, 0, 3, "Top Break", text_size=size.small)
//     table.cell(checklistTable, 1, 3, isLongBreak ? "✅" : "❌", text_color=isLongBreak ? color.green : color.red, text_size=size.small)

//     table.cell(checklistTable, 0, 4, "Bottom Break", text_size=size.small)
//     table.cell(checklistTable, 1, 4, isShortBreak ? "✅" : "❌", text_color=isShortBreak ? color.green : color.red, text_size=size.small)

//     table.cell(checklistTable, 0, 5, "Last Red Candle", text_size=size.small)
//     table.cell(checklistTable, 1, 5, close < open ? "✅" : "❌", text_color=close < open ? color.green : color.red, text_size=size.small)

//     table.cell(checklistTable, 0, 6, "Last Green Candle", text_size=size.small)
//     table.cell(checklistTable, 1, 6, close > open ? "✅" : "❌", text_color=close > open ? color.green : color.red, text_size=size.small)

//     table.cell(checklistTable, 0, 7, "Box Color Change Active", text_size=size.small)
//     table.cell(checklistTable, 1, 7, changeColor ? "✅" : "❌", text_color=changeColor ? color.green : color.red, text_size=size.small)