В процессе загрузки ресурсов... загрузка...

Стратегия сжатия импульса

Автор:Чао Чжан, Дата: 2024-01-30 17:33:49
Тэги:

img

Обзор

Это количественная торговая стратегия, разработанная на основе индикатора Momentum Squeeze LazyBear. Стратегия объединяет полосы Боллинджера, каналы Келтнера и индикаторы импульса для достижения высокой скорости выигрыша в трейдинге через комбинацию нескольких технических индикаторов.

Логика стратегии

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

В частности, стратегия сначала рассчитывает 21-периодные полосы Боллинджера, с шириной 2 стандартных отклонений от цены. В то же время она рассчитывает 20-периодные каналы Келтнера, с шириной в 1,5 раза больше амплитуды цены. Когда полосы Боллинджера сжимаются Келтнерскими каналами, запускается сигнал сжатия. Кроме того, стратегия также рассчитывает импульс цены относительно середины своего собственного ценового канала в течение определенного периода времени. Когда происходит сжатие, в сочетании с направленностью индикатора импульса, она определяет, покупать или продавать.

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

Преимущества

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

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

  1. Точные точки сжатия импульса с большим потенциалом прибыли

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

  1. Достижение высокой успешности в торговле с выбытием

По сравнению с случайным трейдингом, точка входа, выбранная этой стратегией, находится в точке сжатия между полосами Боллинджера и каналами Келтнера.

Риски

  1. Риск неправильного настройки параметров

Параметры цикла и параметры пропускной способности полос Боллинджера и каналов Келтнера оказывают большое влияние на результаты торговли. Если параметры установлены ненадлежащим образом, могут возникнуть ошибки в оценке. Это требует поиска оптимальных параметров через много обратного тестирования.

  1. Риск неудачного прорыва

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

  1. Риск изменения тенденции

Когда состояние сжатия заканчивается, эта стратегия закрывает все позиции. Однако иногда ценовая тенденция может все еще продолжаться, что создает риск преждевременного выхода. Логика выхода должна быть оптимизирована.

Руководство по оптимизации

  1. Оптимизировать параметры

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

  1. Добавить стратегию стоп-лосса

Установите движущиеся или колеблющиеся остановки, чтобы быстро сократить убытки при перепаде цен.

  1. Добавить условия повторного въезда

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

  1. Включить больше показателей

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

Резюме

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


/*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=4
//All credits to LazyBear. All I did was turn it into a strategy!

strategy(title = "SQZMOM STRAT", overlay=false)

// --- GENERAL INPUTS ---
FromMonth = input(defval = 4, title = "From Month", minval = 1, maxval = 12)
FromYear  = input(defval = 2020, title = "From Year", minval = 2012)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToYear    = input(defval = 9999, title = "To Year", minval = 2017)
FromDay   = 1
ToDay     = 1
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => true

get_round(value, precision) => round(value * (pow(10, precision))) / pow(10, precision)
trade_leverage = input(1, title = "Trade - Leverage", step = 0.25)
trade_risk     = input(100, title = "Trade - Risk Percent", type = input.float, step = 0.1, minval = 0.1, maxval = 100)
tradeType   = input("LONG", title="What trades should be taken : ", options=["LONG", "SHORT", "BOTH"])

// --- SQZMOM CODE

length = input(21, 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)
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)

bcolor = color.gray
if (val > 0 and val > nz(val[1]))
    bcolor := color.green
if (val < 0 and val < nz(val[1]))
    bcolor := color.red

scolor = noSqz ? color.blue : sqzOn ? color.black : color.gray 
plot(val, color=bcolor, style=plot.style_histogram, linewidth=4)
plot(0, color=scolor, style=plot.style_cross, linewidth=2)

// --- VWMA CODE ---
useVWMA        = input(false, title = "Use VWMA to selectively long/short?", type = input.bool)
lengthVWMA=input(42, title = "VWMA Length", step = 1, minval = 1)
useCV=input(false, type=input.bool, title="Use Cumulative Volume for VWMA?")
nbfs = useCV ? cum(volume) : sum(volume, lengthVWMA)
medianSrc=close

calc_evwma(price, lengthVWMA, nb_floating_shares) => data = (nz(close[1]) * (nb_floating_shares - volume)/nb_floating_shares) + (volume*price/nb_floating_shares)

m=calc_evwma(medianSrc, lengthVWMA, nbfs)


// ---STRATEGY---
if ((tradeType == "LONG" or tradeType == "BOTH") and (m>0 or useVWMA == false))
    longCondition = (val > 0 and noSqz == 0 and sqzOn == 0 and sqzOn[1] == 1)
    if (longCondition)
        contracts = get_round((strategy.equity * trade_leverage / close) * (trade_risk / 100), 4)
        strategy.entry("LONG", strategy.long, qty = contracts, when = window())
        
if((tradeType == "SHORT" or tradeType == "BOTH") and (m<0 or useVWMA == false))
    shortCondition = (val < 0 and noSqz == 0 and sqzOn == 0 and sqzOn[1] == 1)
    if (shortCondition)
        contracts = get_round((strategy.equity * trade_leverage / close) * (trade_risk / 100), 4)
        strategy.entry("SHORT", strategy.short, qty = contracts, when = window())

if (bcolor == color.gray)
    strategy.close("LONG")
    strategy.close("SHORT")

Больше