Estratégia de negociação quantitativa de múltiplos indicadores de retração e extensão de Fibonacci

EMA
Data de criação: 2024-11-12 10:51:02 última modificação: 2024-11-12 10:51:02
cópia: 1 Cliques: 514
1
focar em
1617
Seguidores

Estratégia de negociação quantitativa de múltiplos indicadores de retração e extensão de Fibonacci

Visão geral

Esta estratégia é um sistema de negociação quantitativa de tipo complexo baseado em retracções e extensões de Fibonacci, combinado com o julgamento de tendências da EMA. A estratégia opera o mercado identificando resistências de suporte importantes do mercado, combinadas com sinais de tendência. O sistema usa 20 ciclos e 50 ciclos de EMA para julgar a tendência do mercado e, com base nisso, usa o nível de retracção de Fibonacci para encontrar as melhores oportunidades de negociação.

Princípio da estratégia

A lógica central da estratégia inclui três partes principais: primeiro, o cálculo de preços máximos e mínimos de quase 10 ciclos, para determinar o intervalo de flutuação dos preços; em seguida, o cálculo de cinco níveis-chave de retracção de Fibonacci baseados nesse intervalo: 0,236, 0,382, 0,5, 0,618, 0,786; finalmente, a determinação da direção da tendência através do cruzamento dos EMAs de 20 e 50 ciclos. Em uma tendência ascendente, é emitido um sinal múltiplo quando o preço quebra o nível de retracção; em uma tendência descendente, é emitido um sinal em branco quando o preço cai o nível de retracção.

Vantagens estratégicas

  1. A combinação de dois conceitos de negociação, seguimento de tendências e retração de preços, aumenta a precisão das negociações
  2. Usar a sequência de Fibonacci como níveis de preço-chave, níveis que têm um forte significado psicológico no mercado
  3. A análise de tendências através da linha média da EMA evita a frequência de negociações no mercado horizontal
  4. O sistema foi concebido de forma simples, fácil de entender e de manter.
  5. Pode ser aplicado em diferentes períodos de tempo, com uma forte adaptabilidade

Risco estratégico

  1. Os sinais podem ser falsos em mercados muito voláteis.
  2. Dependendo da continuidade da tendência, pode ser fraco em um mercado em turbulência
  3. Níveis de retração são calculados com base em altas e baixas históricas e podem estar atrasados em relação ao mercado
  4. A escolha do ponto de entrada pode não ser precisa o suficiente, resultando em um ponto de parada mais distante
  5. Sistema de gestão de posições sem dinâmica

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

  1. Introdução de indicadores de volume de transações para melhorar a precisão de julgamento de tendências
  2. Aumentar o mecanismo de stop loss dinâmico para melhor controlar os riscos
  3. Otimizar o ciclo de cálculo dos níveis de retirada para que estejam mais em sintonia com o ritmo do mercado
  4. Adicionar um filtro de taxa de flutuação para evitar a negociação em períodos de alta volatilidade
  5. Desenvolver um sistema de gestão de posições mais flexível, adaptando as posições de acordo com as condições do mercado

Resumir

A estratégia é construída com uma combinação de ferramentas de análise técnica clássica para um sistema de negociação relativamente completo. Embora existam alguns pontos que precisam de otimização, a estrutura geral tem boa adaptabilidade ao mercado. Com otimização e melhoria contínua, a estratégia tem a perspectiva de obter um melhor desempenho nas negociações reais.

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

//@version=5
strategy("Fibonacci Retracement and Extension Strategy", overlay=true)

// Define the Fibonacci levels for retracement and extension
fibRetracementLevels = array.new_float(5)
array.set(fibRetracementLevels, 0, 0.236)
array.set(fibRetracementLevels, 1, 0.382)
array.set(fibRetracementLevels, 2, 0.5)
array.set(fibRetracementLevels, 3, 0.618)
array.set(fibRetracementLevels, 4, 0.786)

fibExtensionLevels = array.new_float(5)
array.set(fibExtensionLevels, 0, 1.618)
array.set(fibExtensionLevels, 1, 2.618)
array.set(fibExtensionLevels, 2, 3.618)
array.set(fibExtensionLevels, 3, 4.236)
array.set(fibExtensionLevels, 4, 5.618)

// Calculate the high and low prices for the last 10 bars
highPrice = ta.highest(high, 10)
lowPrice = ta.lowest(low, 10)

// Calculate the Fibonacci retracement levels
fibRetracement = array.new_float(5)
for i = 0 to 4
    array.set(fibRetracement, i, highPrice - (highPrice - lowPrice) * array.get(fibRetracementLevels, i))

// Calculate the trend using the Exponential Moving Average (EMA)
shortEMA = ta.ema(close, 20)
longEMA = ta.ema(close, 50)

// Define the trend conditions
isUptrend = shortEMA > longEMA
isDowntrend = shortEMA < longEMA

// Generate buy and sell signals
var float lastFibRetracementLevel = na
var float lastFibExtensionLevel = na

// Buy condition: price crosses above the highest retracement level
if (isUptrend)
    for i = 0 to 4
        if (close > array.get(fibRetracement, i))
            lastFibRetracementLevel := array.get(fibRetracement, i)
            strategy.entry("Buy", strategy.long)

// Sell condition: price crosses below the lowest retracement level
if (isDowntrend)
    for i = 0 to 4
        if (close < array.get(fibRetracement, i))
            lastFibRetracementLevel := array.get(fibRetracement, i)
            strategy.entry("Sell", strategy.short)

// Plotting the Fibonacci levels on the chart
// for i = 0 to 4
//     line.new(bar_index[10], array.get(fibRetracement, i), bar_index, array.get(fibRetracement, i), color=color.new(color.blue, 70), width=1)

// Plot the EMAs
plot(shortEMA, color=color.red, title="Short EMA")
plot(longEMA, color=color.blue, title="Long EMA")