Количественная стратегия импульса, основанная на моменте давления LazyBear


Дата создания: 2023-12-21 14:22:49 Последнее изменение: 2023-12-21 14:22:49
Копировать: 0 Количество просмотров: 926
1
Подписаться
1621
Подписчики

Количественная стратегия импульса, основанная на моменте давления LazyBear

Обзор

Основная идея стратегии основана на индикаторе Squeeze Momentum от LazyBear, который анализирует время покупки и продажи. Она использует динамику, анализирующую переломные моменты тренда, позиционирующие высокие и низкие точки в качестве сигналов для продажи и покупки. Поскольку это многофункциональная стратегия, для выявления восходящей тенденции также учитывается 50-циклическая скользящая средняя индекса.

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

Эта стратегия объединяет индикатор пояса Бруйна и индикатор по каналу Келтнера для идентификации трендовых и напряженных зон. В частности, она рассчитывает 20-циклический пояса Бруйна и 20-циклический пояса Келтнера. Когда пояса Бруйна полностью попадают в каналу Келтнера, это рассматривается как сигнал выдавливания.

Кроме того, стратегия также использует линейный регресс для анализа динамики изменения тренда и скольжения. Она рассчитывает линейный регресс цены за последние 20 циклов за вычетом типичной цены. Когда скольжение линейного регресса положительное, считается тенденцией к росту; когда скольжение отрицательное, считается тенденцией к снижению.

Чтобы отфильтровать ложные сигналы, стратегия также определяет, является ли цена закрытия выше 50-дневного скользящего среднего индекса, а также находится ли 50-дневный скользящий средний индекс в подъеме. Только в том случае, если эти два условия одновременно выполняются, сигнал покупки будет выполнен.

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

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

  1. Комплексное использование поясов Бринна, каналов Келтнера и динамических показателей для многомерного анализа повышает точность суждения.

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

  3. Тренд-фильтрация на основе цены закрытия и 50-дневного скользящего среднего индекса позволяет избежать повторного открытия позиции при ликвидации.

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

  5. Параметры этой стратегии оптимизируются с большим объемом пространства и могут быть целевым образом оптимизированы с помощью таких параметров, как адаптация цикла.

  6. Долгосрочный взгляд, учитывающий как тенденции большого цикла, так и сочетающий среднесрочные и краткосрочные показатели, дает четкое понимание различных направлений.

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

Несмотря на то, что в стратегии Nonfarming рассматриваются различные технические показатели, существуют определенные риски:

  1. Если мы не будем использовать эти возможности, мы потеряем возможность покупать/продавать, когда будут распространены Брин-Бенд и Кельтнер.

  2. В случае, если волатильность рынка резко падает, это приводит к значительным потерям в стратегии.

  3. В условиях высокой волатильности сжатие может быть не заметным, сигналов меньше.

  4. При переходе на говяжьи и медвежьи, скорее всего, будут сформированы корректирующие убытки.

Мы можем избежать этих рисков следующими способами:

  1. Оптимизация параметров для максимально возможной синхронизации путей Брин-Бенд и Кельтнер.

  2. Установите линию стоп-лосса и контролируйте одиночные потери.

  3. Использование данной стратегии в качестве части комбинированной стратегии в сочетании с другими стратегиями.

  4. При высокой волатильности следует снизить позицию.

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

В этой стратегии есть много возможностей для оптимизации, в частности:

  1. Оптимизация длинных циклов в поясе Брин и канале Келтнера, чтобы они были максимально синхронизированы.

  2. Тестирование различных множителей для поиска оптимальной комбинации параметров.

  3. Попробуйте включить другие показатели для подтверждения, такие как RSI и т. д.

  4. Выборочно используйте эту стратегию для определения стадии рынка на основе моделей, таких как цветная линия.

  5. Динамическая оптимизация параметров с использованием методов машинного обучения.

  6. Поиск наиболее подходящих торговых разновидностей различных валют.

  7. Изучить эффективность стратегии на более длительных периодах (солнце, солнце, солнце и т. д.).

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

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

Исходный код стратегии
/*backtest
start: 2023-11-20 00:00:00
end: 2023-12-20 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

//
// @author LazyBear 
// List of all my indicators: https://www.tradingview.com/v/4IneGo8h/
//
initialBalance = 8000

strategy("Crypto momentum strategy", overlay=false)


length = input(20, title="BB Length")
mult = input(2.0, title="BB MultFactor")
lengthKC = input(20, title="KC Length")
multKC = input(1.5, title="KC MultFactor")

useTrueRange = input(true, title="Use TrueRange (KC)", type=input.bool)

// Calculate BB
source = close
basis = sma(source, length)
ema = ema(source, 50)
dev = multKC * stdev(source, length)
upperBB = basis + dev
lowerBB = basis - dev

// Calculate KC
ma = sma(source, lengthKC)
range = useTrueRange ? tr : high - low
rangema = sma(range, lengthKC)
upperKC = ma + rangema * multKC
lowerKC = ma - rangema * multKC

sqzOn = lowerBB > lowerKC and upperBB < upperKC
sqzOff = lowerBB < lowerKC and upperBB > upperKC
noSqz = sqzOn == false and sqzOff == false

val = linreg(source - avg(avg(highest(high, lengthKC), lowest(low, lengthKC)), sma(close, lengthKC)), lengthKC, 0)

slope = (val - val[2])
emaSlope = (ema - ema[1])


bcolor = iff(slope > 0, color.lime, color.red)
scolor = noSqz ? color.green : sqzOn ? color.black : color.green
squeeze = (noSqz ? 0 : sqzOn ? 1 : 0)

plot(val, color=color.gray, style=plot.style_line, linewidth=1, title="momentum")
plot(slope, color=bcolor, style=plot.style_circles, linewidth=2, title="slope")
plot(0, color=scolor, style=plot.style_line, linewidth=2, title="squeeze-zero")

co = crossover(slope / abs(slope), 0)
cu = crossunder(slope / abs(slope), 0)

if co and source > ema and emaSlope > 0
    strategy.entry("long", strategy.long, comment="long")
if cu
    strategy.close("long")