Прорыв адаптивной волатильности

Автор:Чао Чжан, Дата: 2024-01-25 12:43:43
Тэги:

img

Обзор

Эта стратегия сочетает в себе индикаторы VFI и скользящие средние показатели с индикатором реверсии Bollinger Bands для адаптивного отслеживания тенденций и реверсий на рынке.

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

Основными составляющими этой стратегии являются:

  1. Индикатор VFI для определения тенденции. Он использует логарифмическую скорость изменения типичной цены и объема торговли для разумного сопоставления цены и объема.

  2. Индикатор разницы EMA для определения тенденции. Он рассчитывает процентную разницу между 20-дневной EMA и 50-дневной EMA для оценки направления средне-долгосрочной тенденции.

  3. Амплитуда VFI для обнаружения истощения. Когда VFI приближается к своим пределам (0, 20), вероятность обратного тренда считается более высокой.

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

  1. Введение VFI делает соотношение цена-объем более разумным и избегает слепого следования ценам.

  2. Сочетание разницы EMA и VFI делает определение тенденции более надежным.

  3. Сочетание полос Боллинджера и VFI делает стратегию более адаптивной к двусторонним колебаниям на рынке.

Риски

  1. Показатели объемных цен не могут полностью избежать риска ложных прорывов.

  2. Дифференция EMA имеет некоторое отставание и не может своевременно реагировать на краткосрочные повороты.

  3. Неправильные параметры полос Боллинджера могут привести к переоценке или захвату рынка.

Решения:

  1. Для определения тенденции объедините несколько индикаторов, чтобы избежать зависимости от одного.

  2. Настроить параметры EMA на нужные значения.

  3. Проверить влияние параметров Боллинджера на стратегию в различных рыночных условиях.

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

  1. Продолжайте оптимизировать параметры VFI, чтобы сделать его более чувствительным.

  2. Добавьте расчетный вывод на основе ценовых каналов или индикатора конвертов.

  3. Испытать внедрение большего количества показателей объемных цен, таких как OBV, PVT и т.д.

  4. Внедрение машинного обучения и искусственного интеллекта для реализации динамической оптимизации параметров.

Заключение

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


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-24 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © beststockalert

//@version=4

strategy(title="Super Bollinger Band Breakout", shorttitle = "Super BB-BO", overlay=true)
source = close

length = input(130, title="VFI length")
coef = input(0.2)
vcoef = input(2.5, title="Max. vol. cutoff")
signalLength=input(5)


// session 


pre = input( type=input.session, defval="0400-0935")
trade_session = input( type=input.session, defval="0945-1700")
use_trade_session = true
isinsession = use_trade_session ? not na(time('1', trade_session)) : true


is_newbar(sess) =>
    t = time("D", sess)
    not na(t) and (na(t[1]) or t > t[1])


is_session(sess) =>
    not na(time(timeframe.period, sess))

preNew = is_newbar(pre)
preSession = is_session(pre)

float preLow = na
preLow := preSession ? preNew ? low : min(preLow[1], low) : preLow[1]

float preHigh = na
preHigh := preSession ? preNew ? high : max(preHigh[1], high) : preHigh[1]



//   vfi 9lazybear 
ma(x,y) => 0 ? sma(x,y) : x

typical=hlc3
inter = log( typical ) - log( typical[1] )
vinter = stdev(inter, 30 )
cutoff = coef * vinter * close
vave = sma( volume, length )[1]
vmax = vave * vcoef
vc = iff(volume < vmax, volume, vmax) //min( volume, vmax )
mf = typical - typical[1]
vcp = iff( mf > cutoff, vc, iff ( mf < -cutoff, -vc, 0 ) )

vfi = ma(sum( vcp , length )/vave, 3)
vfima=ema( vfi, signalLength )


//ema diff


ema20 = ema(close,20)
ema50 = ema(close,50)


diff = (ema20-ema50)*100/ema20
ediff = ema(diff,20)

//
basis = sma(source, 20)
dev = 1.5 * stdev(source, 20)

upper = basis + dev
lower = basis - dev


ema9 = ema(source, 9)

if ( ((crossover(source, upper) and diff>ediff and diff>0) or (close>upper and (vfi >0 or vfima>0 or ediff>0.05) and (vfi<14 or vfima<14)) ))
    strategy.entry("Long", strategy.long)


if (crossunder(source, lower) or vfi>19 or vfima>19 or diff<(ediff+0.01) )
    strategy.close("Long")



Больше