Стратегия рекурсивной торговли по объему


Дата создания: 2024-01-31 16:56:31 Последнее изменение: 2024-01-31 16:56:31
Копировать: 0 Количество просмотров: 596
1
Подписаться
1617
Подписчики

Стратегия рекурсивной торговли по объему

Обзор

Эта стратегия основана на стратегии отслеживания тенденций и прорывов в показателях регрессивной полосы, разработанной Алексом Гровером. Стратегия использует показатели регрессивной полосы для определения ценовых тенденций и ключевых уровней сопротивления поддержке, в сочетании с фильтрацией ложных прорывов в условиях динамики, чтобы обеспечить низкую частоту, но высокое качество входа.

Стратегический принцип

Расчет показателя регрессивной ленты

Показатель регрессивной полосы состоит из верхней полосы, нижней полосы и средней линии.

Верхняя полоса = максимальное значение ((верхняя полоса предыдущей линии K, цена закрытия + n*Волатильность) Нижняя полоса = минимальное значение ((нижняя полоса предыдущей линии K, цена закрытия - n*Волатильность)
Средняя линия = (верхняя полоса + нижняя полоса) / 2

где n - коэффициент масштабирования, где колебания могут быть выбраны по ATR, стандартному отклонению, среднеценовому каналу и специальному методу RFV.

Правила стратегической торговли

Стратегия начинается с проверки, продолжается ли движение вверх в нижней полосе и вниз в верхней полосе, чтобы устранить ложные прорывы.

Когда цена опускается ниже нижней границы, делайте больше; когда цена превышает верхнюю границу, делайте больше.

Кроме того, в стратегии предусмотрена логика сдерживания убытков.

Анализ преимуществ

Эта стратегия имеет следующие преимущества:

  1. Использование регрессивной структуры для эффективного расчета показателей и избежания дублирования
  2. Параметры индикатора могут быть изменены в зависимости от рыночной ситуации
  3. Вместе с тенденциями и прорывами, избегайте ложных прорывов
  4. Фильтрация динамических условий для обеспечения качества торговых сигналов

Анализ рисков

Однако эта стратегия также несет в себе некоторые риски:

  1. Неправильная настройка параметров может привести к слишком высокой частоте транзакций или плохому качеству сигнала
  2. Большие потери могут возникнуть при изменении макроциклического тренда
  3. Недостаточное управление экстремальными спадами может увеличить убытки

Эти риски можно контролировать, оптимизируя параметры, устанавливая стоп-потери и увеличивая скользящие точки.

Направление оптимизации

Эта стратегия также может быть оптимизирована в следующих направлениях:

  1. Объединение нескольких циклических индикаторов для осуществления торговли в нескольких временных рамках
  2. Добавление модулей машинного обучения для оптимизации параметров адаптации
  3. Добавление количественного анализа связей для поиска оптимального сочетания параметров
  4. Использование глубокого обучения для прогнозирования ценовых путей повышает точность сигналов

Подвести итог

Эта стратегия в целом является очень практичной и эффективной стратегией отслеживания трендов. Она сочетает в себе регрессивную структуру, экономию вычислительных ресурсов, использование трендов для поддержки сопротивления, определение направления больших трендов, увеличение фильтрации ложных прорывов в условиях движения, что обеспечивает качество торговых сигналов. Лучшие результаты могут быть получены при регулировании параметров и контроле риска.

Исходный код стратегии
/*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)