
Эта стратегия является стратегией отслеживания трендов, основанной на уровне фибоначевых отступлений. Стратегия использует ключевые уровни фибоначевых отступлений для расчета максимальных и минимальных цен предыдущего торгового дня, в сочетании с позицией цены открытия и временным окном для установления нескольких входных условий и соответствующих стоп-позиций для различных условий, что позволяет контролировать тренд и риск.
Сначала стратегия рассчитывает шесть ключевых уровней фибоначевых отступлений: 0,23,6%, 38,2%, 50%, 61,8% и 100%. В зависимости от того, где открытая цена находится относительно этих уровней, условия входа разделяются на три ситуации: 1) цена открытия находится между 23,6% и 50%; 2) цена открытия на уровне 61,8% и в указанном временном окне; 3) цена открытия ниже 23,6% и ниже минувшей низкой точки.
Стратегия создает более целостную торговую систему, объединяя уровни фибоначевых отступлений, временные окна и многочисленные условные суждения. Преимущества стратегии заключаются в логической ясности, управляемом риске, но все еще требуют оптимизации и улучшения в зависимости от рыночных условий.
/*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)