
Эта стратегия основана на стратегии отслеживания тенденций и прорывов в показателях регрессивной полосы, разработанной Алексом Гровером. Стратегия использует показатели регрессивной полосы для определения ценовых тенденций и ключевых уровней сопротивления поддержке, в сочетании с фильтрацией ложных прорывов в условиях динамики, чтобы обеспечить низкую частоту, но высокое качество входа.
Показатель регрессивной полосы состоит из верхней полосы, нижней полосы и средней линии.
Верхняя полоса = максимальное значение ((верхняя полоса предыдущей линии K, цена закрытия + n*Волатильность)
Нижняя полоса = минимальное значение ((нижняя полоса предыдущей линии K, цена закрытия - n*Волатильность)
Средняя линия = (верхняя полоса + нижняя полоса) / 2
где n - коэффициент масштабирования, где колебания могут быть выбраны по ATR, стандартному отклонению, среднеценовому каналу и специальному методу RFV.
Стратегия начинается с проверки, продолжается ли движение вверх в нижней полосе и вниз в верхней полосе, чтобы устранить ложные прорывы.
Когда цена опускается ниже нижней границы, делайте больше; когда цена превышает верхнюю границу, делайте больше.
Кроме того, в стратегии предусмотрена логика сдерживания убытков.
Эта стратегия имеет следующие преимущества:
Однако эта стратегия также несет в себе некоторые риски:
Эти риски можно контролировать, оптимизируя параметры, устанавливая стоп-потери и увеличивая скользящие точки.
Эта стратегия также может быть оптимизирована в следующих направлениях:
Эта стратегия в целом является очень практичной и эффективной стратегией отслеживания трендов. Она сочетает в себе регрессивную структуру, экономию вычислительных ресурсов, использование трендов для поддержки сопротивления, определение направления больших трендов, увеличение фильтрации ложных прорывов в условиях движения, что обеспечивает качество торговых сигналов. Лучшие результаты могут быть получены при регулировании параметров и контроле риска.
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// @version=5
// Original indicator by alexgrover
strategy('Extended Recursive Bands Strategy', overlay=true, commission_type=strategy.commission.percent,commission_value=0.06,default_qty_type =strategy.percent_of_equity,default_qty_value = 100,initial_capital =1000)
length = input.int(260, step=10, title='Length')
src = input(close, title='Source')
method = input.string('Classic', options=['Classic', 'Atr', 'Stdev', 'Ahlr', 'Rfv'], title='Method')
bandDirectionCheck = input.bool(true, title='Bands Hold Direction')
lookback = input(3)
//----
atr = ta.atr(length)
stdev = ta.stdev(src, length)
ahlr = ta.sma(high - low, length)
rfv = 0.
rfv := ta.rising(src, length) or ta.falling(src, length) ? math.abs(ta.change(src)) : rfv[1]
//-----
f(a, b, c) =>
method == a ? b : c
v(x) =>
f('Atr', atr, f('Stdev', stdev, f('Ahlr', ahlr, f('Rfv', rfv, x))))
//----
sc = 2 / (length + 1)
a = 0.
a := math.max(nz(a[1], src), src) - sc * v(math.abs(src - nz(a[1], src)))
b = 0.
b := math.min(nz(b[1], src), src) + sc * v(math.abs(src - nz(b[1], src)))
c = (a+b)/2
// Colors
beColor = #675F76
buColor = #a472ff
// Plots
pA = plot(a, color=color.new(beColor, 0), linewidth=2, title='Upper Band')
pB = plot(b, color=color.new(buColor, 0), linewidth=2, title='Lower Band')
pC = plot(c, color=color.rgb(120,123,134,0), linewidth=2, title='Middle Band')
fill(pC, pA, color=color.new(beColor,90))
fill(pC, pB, color=color.new(buColor,90))
// Band keeping direction
// By Adulari
longc = 0
shortc = 0
for i = 0 to lookback-1
if b[i] > b[i+1]
longc:=longc+1
if a[i] < a[i+1]
shortc:=shortc+1
bhdLong = if bandDirectionCheck
longc==lookback
else
true
bhdShort = if bandDirectionCheck
shortc==lookback
else
true
// Strategy
if b>=low and bhdLong
strategy.entry(id='Long',direction=strategy.long)
if high>=a and bhdShort
strategy.entry(id='Short',direction=strategy.short)
// TP at middle line
//if low<=c and strategy.position_size<0 and strategy.position_avg_price>close
//strategy.exit(id="Short",limit=close)
//if high>=c and strategy.position_size>0 and strategy.position_avg_price<close
//strategy.exit(id="Long",limit=close)