Estratégia de negociação quantitativa de stop loss de rastreamento dinâmico de um terço da linha K

TRINITY ATR
Data de criação: 2025-02-18 13:57:33 última modificação: 2025-02-18 13:57:33
cópia: 0 Cliques: 345
1
focar em
1617
Seguidores

Estratégia de negociação quantitativa de stop loss de rastreamento dinâmico de um terço da linha K

Visão geral

Trata-se de uma estratégia de negociação quantitativa que combina o método de análise de K-linhas de Bill Williams em um terço com a função de stop loss de rastreamento dinâmico. A estratégia gera um sinal de pluri-espaço claro por meio da análise das características estruturais das linhas K atuais e anteriores e usa mecanismos de stop loss de rastreamento configuráveis para proteger a posição, permitindo uma entrada/saída precisa e gerenciamento de risco.

Princípio da estratégia

A lógica central da estratégia baseia-se nas seguintes partes-chave:

  1. Calculação da divisão terciária da linha K: Divida o intervalo de cada linha K (preço mais alto - preço mais baixo) em terciários, obtendo os valores de fronteira das áreas superiores e inferiores.
  2. Classificação de K-linhas: K-linhas são divididas em vários tipos, de acordo com a localização do preço de abertura e do preço de fechamento na sub-região de terça classe. Por exemplo, quando o preço de abertura está na região inferior e o preço de fechamento na região superior, é considerado um forte curvature.
  3. Regras de geração de sinal: determinação de um sinal de negociação eficaz através da combinação da análise da forma do atual e do anterior K-linha. Por exemplo, quando dois K-linhas consecutivos mostram características de força, o disparo de fazer um sinal múltiplo.
  4. Stop loss de rastreamento dinâmico: Use o preço mínimo (multi-cabeça) ou o preço máximo (cabeça vazia) da linha anterior N-raiz K como ponto de parada móvel no período de tempo indicado.

Vantagens estratégicas

  1. Claridade lógica: a estratégia usa um método intuitivo de análise de estrutura de linha K. As regras de negociação são claras e fáceis de entender.
  2. Gestão de risco perfeita: o mecanismo de parada de perdas de rastreamento dinâmico permite controlar efetivamente o risco de retirada, mantendo uma margem de lucro suficiente.
  3. Adaptabilidade: A estratégia pode ser ajustada para acompanhar os parâmetros de stop loss de acordo com diferentes condições de mercado, com boa adaptabilidade.
  4. Alto grau de automação: desde a geração de sinais até o gerenciamento de posições é totalmente automatizado, reduzindo a intervenção humana.

Risco estratégico

  1. Risco de choque de mercado: Em situações de choque horizontal, pode haver frequentes falsos sinais de ruptura, resultando em excesso de negociação.
  2. Risco de saltos: em casos de grandes saltos, o tracking stop loss pode não ser acionado em tempo hábil, causando perdas inesperadas.
  3. Sensibilidade de parâmetros: a seleção de parâmetros para rastrear o stop loss tem um grande impacto no desempenho da estratégia. A configuração inadequada de parâmetros pode levar a partidas prematuras ou proteção insuficiente.

Direção de otimização da estratégia

  1. Aumentar o filtro de cenário de mercado: pode ser introduzido um indicador de tendência ou um indicador de volatilidade para ajustar dinamicamente os parâmetros da estratégia em diferentes cenários de mercado.
  2. Mecanismos de parada de perda otimizados: pode-se considerar a combinação de indicadores ATR para definir uma distância de parada mais flexível, aumentando a adaptabilidade da parada.
  3. Introdução de gerenciamento de posição: o tamanho da posição pode ser ajustado de acordo com a intensidade do sinal e a dinâmica de volatilidade do mercado, permitindo um controle de risco mais preciso.
  4. Aumentar a otimização de partidas: pode-se adicionar objetivos de lucro ou indicadores técnicos para auxiliar o julgamento, otimizando o tempo de partida.

Resumir

Trata-se de uma estratégia de negociação quantitativa, estruturada, lógica e clara, que possui uma boa praticidade através da combinação do uso de métodos clássicos de análise técnica e técnicas modernas de gerenciamento de risco. A estratégia foi projetada com plena consideração das necessidades de negociação em campo, incluindo os elementos-chave, como a geração de sinais, gestão de posições e controle de risco.

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

//@version=5
strategy("TrinityBar with Trailing Stop", overlay=true, initial_capital=100000, 
     default_qty_type=strategy.percent_of_equity, default_qty_value=250)

//─────────────────────────────────────────────────────────────
// 1. BAR THIRDS CALCULATIONS
//─────────────────────────────────────────────────────────────
cur_range      = high - low
cur_lowerThird = low + cur_range / 3
cur_upperThird = high - cur_range / 3

prev_range      = high[1] - low[1]
prev_lowerThird = low[1] + prev_range / 3
prev_upperThird = high[1] - prev_range / 3

//─────────────────────────────────────────────────────────────
// 2. DEFINE BULLISH & BEARISH BAR TYPES (CURRENT & PREVIOUS)
//─────────────────────────────────────────────────────────────
// Current bar types
is_1_3 = (open <= cur_lowerThird) and (close >= cur_upperThird)
is_3_3 = (open >= cur_upperThird) and (close >= cur_upperThird)
is_2_3 = (open > cur_lowerThird) and (open < cur_upperThird) and (close >= cur_upperThird)

is_3_1 = (open >= cur_upperThird) and (close <= cur_lowerThird)
is_1_1 = (open <= cur_lowerThird) and (close <= cur_lowerThird)
is_2_1 = (open > cur_lowerThird) and (open < cur_upperThird) and (close <= cur_lowerThird)

// Previous bar types
prev_is_1_3 = (open[1] <= prev_lowerThird) and (close[1] >= prev_upperThird)
prev_is_3_3 = (open[1] >= prev_upperThird) and (close[1] >= prev_upperThird)
prev_is_2_3 = (open[1] > prev_lowerThird) and (open[1] < prev_upperThird) and (close[1] >= prev_upperThird)

prev_is_3_1 = (open[1] >= prev_upperThird) and (close[1] <= prev_lowerThird)
prev_is_1_1 = (open[1] <= prev_lowerThird) and (close[1] <= prev_lowerThird)
prev_is_2_1 = (open[1] > prev_lowerThird) and (open[1] < prev_upperThird) and (close[1] <= prev_lowerThird)

//─────────────────────────────────────────────────────────────
// 3. VALID SIGNAL CONDITIONS
//─────────────────────────────────────────────────────────────
validBuy  = (prev_is_2_3 or prev_is_3_3 or prev_is_1_3) and (is_1_3 or is_3_3)
validSell = (prev_is_2_1 or prev_is_1_1 or prev_is_3_1) and (is_1_1 or is_3_1)

//─────────────────────────────────────────────────────────────
// 4. PLOT SIGNAL TRIANGLES
//─────────────────────────────────────────────────────────────
plotshape(validBuy, title="Valid Buy", style=shape.triangleup, location=location.belowbar, 
     color=color.green, size=size.small, text="B")
plotshape(validSell, title="Valid Sell", style=shape.triangledown, location=location.abovebar, 
     color=color.red, size=size.small, text="S")

//─────────────────────────────────────────────────────────────
// 5. MARKET ORDER EXECUTION BASED ON SIGNALS
//─────────────────────────────────────────────────────────────
if validBuy
    // Close any short positions.
    strategy.close("Short", comment="")
    // If not already long, enter a market long.
    if strategy.position_size <= 0
        strategy.entry("Long", strategy.long, comment="")
        
if validSell
    // Close any long positions.
    strategy.close("Long", comment="")
    // If not already short, enter a market short.
    if strategy.position_size >= 0
        strategy.entry("Short", strategy.short, comment="")

//─────────────────────────────────────────────────────────────
// 6. TRAILING STOP LOSS FUNCTION
//─────────────────────────────────────────────────────────────
// Inputs for trailing stop settings:
trailBars = input.int(title="Trailing Stop Bars Back", defval=1, minval=1)
trailTF   = input.timeframe(title="Trailing Stop Timeframe", defval="")  // "" = current timeframe

// For long positions, use the low from 'trailBars' bars back on the specified timeframe.
// For short positions, use the high from 'trailBars' bars back.
trailStopLong  = request.security(syminfo.tickerid, trailTF, low[trailBars])
trailStopShort = request.security(syminfo.tickerid, trailTF, high[trailBars])

// Apply trailing stops if a position is open.
if strategy.position_size > 0
    strategy.exit("Trailing Stop Long", from_entry="Long", stop=trailStopLong)
if strategy.position_size < 0
    strategy.exit("Trailing Stop Short", from_entry="Short", stop=trailStopShort)