
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.
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.
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.
/*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")