
Стратегия представляет собой комплексную количественную торговую систему, основанную на уровнях фибоначевых отступлений и отсрочек, в сочетании с оценкой тренда на средней линии EMA. Стратегия осуществляет торговлю с помощью идентификации важных поддерживающих сопротивлений на рынке в сочетании с трендовыми сигналами. Система использует 20-циклические и 50-циклические EMA для оценки тренда на рынке и на этой основе использует уровень фибоначевых отступлений для поиска наилучших торговых возможностей.
Центральная логика стратегии состоит из трех основных частей: первая - расчет максимальных и минимальных цен на протяжении почти 10 циклов для определения диапазона колебаний цен; вторая - расчет пяти ключевых уровней фибоначевых отступлений на основе этого диапазона: 0,236, 0,382, 0,5, 0,618, 0,786; и, наконец, определение направления тренда через перекрестку 20- и 50-циклической ЭМА. В восходящей тенденции, когда цена прорывает отступление, выпускается многосигнал; в нисходящей тенденции, когда цена падает, выпускается пустой сигнал.
Эта стратегия, в сочетании с классическими инструментами технического анализа, создает относительно целостную торговую систему. Хотя есть некоторые места, где требуется оптимизация, но общая структура имеет хорошую рыночную адаптивность. Благодаря постоянной оптимизации и улучшению эта стратегия, как ожидается, будет лучше работать в реальных сделках.
/*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")