Эта стратегия разработана на основе показателя объемного сальдо для определения покупательной и продажной способности на рынке.
Индикатор объемных остатков (VB) отражает движущую силу изменений объема цен.
Вычислить уровень волатильности внутридневного показателя типичной цены как динамику цены.
Судите о покупательной и продажной силе по произведению объема и динамики цен.
Критерием измерения покупательной и продажной способности является положительное и отрицательное значение показателя.
Эта стратегия строит индикатор VB и устанавливает линию сигнала. Сигнал покупки генерируется, когда индикатор VB пересекает линию сигнала. Сигнал продажи генерируется, когда индикатор VB пересекает линию сигнала.
Основными этапами кодекса являются:
Вычислить уровень волатильности внутридневного показателя типичной цены в качестве динамики цены.
Установите коэффициент отсечения диапазона для импульса. Избыток импульса выше диапазона принимается в качестве коэффициента.
Вычислить количественный импульс vcp после прерывания.
Сумма vcp для получения количественного показателя vfi.
Установите длину линии сигнала SignalLength и получите ее vfima.
Сравните индикатор VB vfi с сигнальной линией vfima для получения торговых сигналов.
Преимущества этой стратегии:
Используйте соотношение объем-цена, чтобы судить о покупательной способности, не влияющей на саму цену.
Диапазон расчета количественного импульса может контролироваться параметрами, чтобы избежать воздействия ненормальных колебаний.
Сочетание сравнения между самим индикатором VB и линией сигнала может установить разумное время входа.
Метод расчета показателя прост и понятен, его легко использовать в режиме реального времени.
Настраиваемые параметры индикаторов и параметры сигнальных линий для оптимизации эффективности стратегии.
В этой стратегии также есть некоторые риски:
Индикатор VB чувствителен к аномальным колебаниям цен.
Вероятность отклонения цен от сигналов показателей высока, следует избегать слепого следования.
Параметры индикатора и параметры сигнальной линии нуждаются в надлежащей оптимизации для предотвращения ложных сигналов.
Более подходит для продуктов с очевидными характеристиками объема и цены. Не подходит для продуктов с низкой ликвидностью.
Обратите внимание на дивергенцию показателя, которая может сигнализировать об изменении рынка.
Риски могут контролироваться путем регулирования диапазона параметров, использования других фильтров, обеспечения надлежащей свободной стоп-потери и т.д.
Стратегия может быть оптимизирована в следующих аспектах:
Оптимизировать параметры расчета для количественного импульса, чтобы сбалансировать чувствительность и стабильность.
Оптимизируйте параметры сигнальной линии, чтобы сбалансировать задержку и шум.
Добавить другие показатели, такие как анализ объема распространения для проверки.
Добавить индикаторы тренда и поддержки/сопротивления, чтобы избежать неблагоприятных сделок.
Установка динамического стоп-лосса на основе волатильности рынка.
Используйте машинное обучение, чтобы найти оптимальную комбинацию параметров.
Проверка на различных продуктах и сроках для оценки надежности.
Сравните параметры показателя с влиянием на кривую прибыли, чтобы найти оптимальный показатель.
Эта стратегия оценивает покупательную/продажу мощность на основе индикатора объемного баланса. Она имеет такие преимущества, как простая конструкция индикатора и регулируемые параметры, а также риски, такие как ложные сигналы. Дальнейшая оптимизация и проверка из нескольких аспектов могут улучшить производительность в режиме реального времени.
/*backtest start: 2023-09-29 00:00:00 end: 2023-10-29 00:00:00 period: 3h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy("VB Strategy", overlay=true) length = input(130, title="거래량 길이") coef = input(0.2, title="계수") vcoef = input(2.5, title="최대 계수") signalLength=input(5) smoothVFI=input(false, type=bool, title="부드럽게") //볼밴 length2 = input(20, minval=1, title="볼밴 길이") ma(x,y) => smoothVFI ? 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) 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 ) d=vfi-vfima upper = vfima + stdev(vfi, length2) lower = vfima - stdev(vfi, length2) buysignal = cross(vfi, lower) and crossunder(vfi, lower) == 1 ? vfima : na sellsignal = cross(vfi, upper) and crossover(vfi, upper) == 1 ? vfima : na //times = timestamp("GMT+6", 2017, 12, 6, 00, 00) //if (buysignal and times <= time) if (buysignal) if(strategy.position_size < 0) strategy.close("SHORT") if(strategy.position_size > 0) strategy.order("LONG", true, 1, when = (low+high)/2) if(strategy.position_size == 0) strategy.entry("LONG", strategy.long, when = (low+high)/2) //if (sellsignal and times <= time) if (sellsignal) if(strategy.position_size > 0) strategy.close("LONG") if(strategy.position_size < 0) strategy.order("SHORT", false, 1, when = (low+high)/2) if(strategy.position_size == 0) strategy.entry("SHORT", strategy.short, when = (low+high)/2)