Estratégia de negociação quantitativa de rastreamento de tendência condicional múltipla com base em níveis de retração de Fibonacci

SL MA TP ATR
Data de criação: 2024-12-20 15:55:57 última modificação: 2024-12-20 15:55:57
cópia: 1 Cliques: 420
1
focar em
1617
Seguidores

Estratégia de negociação quantitativa de rastreamento de tendência condicional múltipla com base em níveis de retração de Fibonacci

Visão geral

Esta estratégia é uma estratégia de acompanhamento de tendências baseada nos níveis de retração de Fibonacci. A estratégia utiliza principalmente os níveis de retração de Fibonacci críticos para calcular os preços mais altos e mais baixos do dia de negociação anterior, em combinação com a posição de preço de abertura e a janela de tempo para definir várias condições de entrada e a correspondente posição de parada para diferentes condições, permitindo assim a compreensão da tendência e o controle do risco.

Princípio da estratégia

A estratégia primeiro calcula seis níveis de retração Fibonacci cruciais: 0,23,6%, 38,2%, 50%, 61,8% e 100%. De acordo com a posição do preço de abertura em relação a esses níveis, os critérios de entrada são divididos em três situações: 1) o preço de abertura está entre 23,6%-50%; 2) o preço de abertura está em 61,8% e na janela de tempo especificada; 3) o preço de abertura está abaixo de 23,6% e abaixo do mínimo do dia anterior.

Vantagens estratégicas

  1. Utilizando os níveis de retração de Fibonacci como pontos de resistência de suporte chave, estes níveis têm uma forte orientação no mercado.
  2. A combinação de múltiplos critérios de julgamento de janelas de tempo e posições de preços aumenta a precisão da estratégia.
  3. A flexibilidade da gestão de risco é demonstrada pela configuração de posições de stop loss para diferentes situações.
  4. A lógica da estratégia é clara, os parâmetros são ajustáveis, facilitando a otimização de acordo com as diferentes condições do mercado.

Risco estratégico

  1. A eficácia dos níveis de retração de Fibonacci pode ser reduzida pelo ambiente de mercado.
  2. A configuração de uma janela de tempo fixo pode perder uma boa oportunidade em outros períodos de tempo.
  3. A configuração da posição de parada pode ser facilmente tocada em situações de forte flutuação.
  4. A estratégia não leva em consideração a tendência geral do mercado, podendo ser negociada com frequência em mercados horizontais ou em turbulência.

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

  1. A introdução de indicadores de avaliação de tendências (como o sistema de linha média) só é executada quando a tendência é clara.
  2. Aumentar os indicadores de volatilidade (como o ATR) e ajustar dinamicamente a posição de parada.
  3. A análise de volume de transações, para aumentar a credibilidade das rupturas de preços.
  4. A configuração da janela de tempo de otimização pode considerar o melhor período de negociação com base na análise de dados históricos.
  5. Aumentar as metas de lucro e melhorar o mecanismo de geração de lucro.

Resumir

A estratégia, através da combinação de níveis de retração de Fibonacci, janelas de tempo e múltiplos critérios, constrói um sistema de negociação mais completo. A estratégia tem vantagens em termos de clareza lógica e controle de risco, mas ainda precisa ser otimizada e aperfeiçoada de acordo com as condições do mercado.

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

//@version=6
strategy("Fibonacci Retracement Strategy", overlay=true)

// Get the high and low of the previous day
previousHigh = request.security(syminfo.tickerid, "D", high[1])
previousLow = request.security(syminfo.tickerid, "D", low[1])

// Fibonacci levels for the previous day (from high to low)
fib0 = previousHigh
fib236 = previousHigh - (previousHigh - previousLow) * 0.236
fib382 = previousHigh - (previousHigh - previousLow) * 0.382
fib50 = previousHigh - (previousHigh - previousLow) * 0.5
fib618 = previousHigh - (previousHigh - previousLow) * 0.618
fib1 = previousHigh - (previousHigh - previousLow) * 1

// Current open price (for the current day)
openPrice = open

// Time for 9:15 AM check
timeStart = timestamp(year, month, dayofmonth, 9, 15)
timeClose = timestamp(year, month, dayofmonth, 9, 30) // Time window to allow for opening range

// Entry Conditions
buyCondition1 = openPrice >= fib236 and openPrice <= fib50
buyCondition2 = openPrice == fib618 and time >= timeStart and time <= timeClose
buyCondition3 = openPrice < fib236 and openPrice < previousLow

// Stop Loss based on conditions
stopLoss1 = fib618
stopLoss2 = fib618 - (fib618 - fib1) / 2
stopLoss3 = fib382

// Plot Fibonacci levels with calculated values
plot(fib0, color=color.green, linewidth=1, title="Fib 0")
plot(fib236, color=color.red, linewidth=1, title="Fib 0.236")
plot(fib382, color=color.blue, linewidth=1, title="Fib 0.382")
plot(fib50, color=color.yellow, linewidth=1, title="Fib 0.5")
plot(fib618, color=color.purple, linewidth=1, title="Fib 0.618")
plot(fib1, color=color.orange, linewidth=1, title="Fib 1")

// Plot labels for Fibonacci levels with actual values
label.new(x=bar_index, y=fib0, text="Fib 0: " + str.tostring(fib0), style=label.style_label_right, color=color.green, textcolor=color.white, size=size.small, yloc=yloc.abovebar)
label.new(x=bar_index, y=fib236, text="Fib 0.236: " + str.tostring(fib236), style=label.style_label_right, color=color.red, textcolor=color.white, size=size.small, yloc=yloc.abovebar)
label.new(x=bar_index, y=fib382, text="Fib 0.382: " + str.tostring(fib382), style=label.style_label_right, color=color.blue, textcolor=color.white, size=size.small, yloc=yloc.abovebar)
label.new(x=bar_index, y=fib50, text="Fib 0.5: " + str.tostring(fib50), style=label.style_label_right, color=color.yellow, textcolor=color.white, size=size.small, yloc=yloc.abovebar)
label.new(x=bar_index, y=fib618, text="Fib 0.618: " + str.tostring(fib618), style=label.style_label_right, color=color.purple, textcolor=color.white, size=size.small, yloc=yloc.abovebar)
label.new(x=bar_index, y=fib1, text="Fib 1: " + str.tostring(fib1), style=label.style_label_right, color=color.orange, textcolor=color.white, size=size.small, yloc=yloc.abovebar)

// Entry conditions and strategy execution
if (buyCondition1)
    strategy.entry("Buy", strategy.long, stop=stopLoss1)
    label.new(bar_index, low, "BUY", color=color.green, textcolor=color.white, style=label.style_label_up, size=size.small)

if (buyCondition2)
    strategy.entry("Buy", strategy.long, stop=stopLoss2)
    label.new(bar_index, low, "BUY", color=color.green, textcolor=color.white, style=label.style_label_up, size=size.small)

if (buyCondition3)
    strategy.entry("Buy", strategy.long, stop=stopLoss3)
    label.new(bar_index, low, "BUY", color=color.green, textcolor=color.white, style=label.style_label_up, size=size.small)

// Show exit signals and labels
if (buyCondition1)
    strategy.exit("Exit", from_entry="Buy", stop=stopLoss1)
    label.new(bar_index, high, "EXIT", color=color.red, textcolor=color.white, style=label.style_label_down, size=size.small)

if (buyCondition2)
    strategy.exit("Exit", from_entry="Buy", stop=stopLoss2)
    label.new(bar_index, high, "EXIT", color=color.red, textcolor=color.white, style=label.style_label_down, size=size.small)

if (buyCondition3)
    strategy.exit("Exit", from_entry="Buy", stop=stopLoss3)
    label.new(bar_index, high, "EXIT", color=color.red, textcolor=color.white, style=label.style_label_down, size=size.small)