Эта стратегия оценивает конверсию бычьих и медвежьих циклов путем расчета скорости изменения изменения объема, которая относится к стратегиям дивергенции объема и цены. Она сочетает в себе индикатор импульса объема и полосы Боллинджера цены, чтобы определить ведущее влияние изменения объема на цену и улавливать поворотные моменты тенденций.
Вычислить скорость изменения изменения объема (скорость изменения показателя разности объема), чтобы получить результат показателя, основанный на импульсе объема.
Вычислить диапазоны Боллинджера n, чтобы получить bbr, представляющее стандартное отклонение импульса объема.
Вычислить полосы Боллинджера ценового закрытия, чтобы получить bbr1, представляющий стандартное отклонение цены.
Вычислите разницу между ними, которая является стандартным отклонением импульса объема минус стандартное отклонение цены, как окончательный показатель.
Когда hist переходит выше 0, это короткий сигнал входа, а когда переходит ниже 0, это длинный сигнал входа.
При расчете скорости изменения объема изменения, влияние изменения объема на цену усиливается. Когда объем изменяется, а цена еще не изменилась, hist пересекает выше или ниже 0, генерируя торговые сигналы. Он может предсказать переломные моменты ценовых тенденций заранее.
Эта стратегия представляет собой стратегию дивергенции объема и цены, основанную на скорости изменения объема, которая может заранее отражать переломные моменты ценовых тенденций.
Расчет скорости изменения изменения объема увеличивает ведущее влияние изменения объема на цену, что приводит к лучшим результатам торговли.
Сочетание индикаторов динамики объема с диапазонами Боллинджера делает торговые сигналы более надежными.
Использование тройного экспоненциального сглаживания на данных Hist делает сигналы более точными и плавными.
Установление линий с перекупленными/перепроданными и длинных/коротких ордеров стоп-лосс/прибыли помогает эффективно контролировать риски.
Многие настраиваемые параметры, такие как длина полос Боллинджера, мультипликатор стандартного отклонения и факторы сглаживания Hist, позволяют оптимизировать стратегию.
Данные о объеме могут не отражать рыночную торговлю и могут быть манипулированы.
Дивергенция между объемом и ценой может не сохраняться, и цена может прорваться без изменения.
Неправильное настройка параметров может привести к переоценке или неточным сигналам.
Остерегайтесь ложных сигналов от аномальных данных объема.
Следует избегать сигналов об обратном движении, когда тенденция сильна.
Риски могут быть смягчены путем оптимизации параметров, добавления других фильтров и установки стоп-лосса/прибыли.
Оптимизировать параметры полос Боллинджера для более стабильных сигналов.
Добавьте фильтр тренда, чтобы избежать торговли против тренда.
Для подтверждения сигнала включить другие индикаторы, такие как MACD.
Используйте ИИ для автоматической оптимизации параметров адаптивно.
Добавьте динамический стоп-лосс/прибыль для оптимизации управления рисками.
Применение машинного обучения для определения успешности дивергенции объема и цены для повышения качества сигнала.
Эта стратегия усиливает ведущее влияние изменения объема на цену путем расчета скорости изменения объема, что позволяет ранне обнаружить поворотные моменты тренда. По сравнению с показателями одного объема она имеет более высокую надежность и точность.
/*backtest start: 2022-10-23 00:00:00 end: 2023-10-29 00:00:00 period: 1d basePeriod: 1h 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/ // © tathal and special thanks to oakwhiz for his porting of my custom volume indicator //@version=5 strategy('Volume Difference Delta Cycle Oscillator', 'VDDC Osc', default_qty_type=strategy.percent_of_equity, default_qty_value=100, max_bars_back=5000) startDate = input.int(title='Start Date', defval=1, minval=1, maxval=31) startMonth = input.int(title='Start Month', defval=1, minval=1, maxval=12) startYear = input.int(title='Start Year', defval=2010, minval=1800, maxval=2100) endDate = input.int(title='End Date', defval=31, minval=1, maxval=31) endMonth = input.int(title='End Month', defval=12, minval=1, maxval=12) endYear = input.int(title='End Year', defval=2021, minval=1800, maxval=2100) // Normalize Function normalize(_src, _min, _max) => // Normalizes series with unknown min/max using historical min/max. // _src : series to rescale. // _min, _min: min/max values of rescaled series. var _historicMin = 10e10 var _historicMax = -10e10 _historicMin := math.min(nz(_src, _historicMin), _historicMin) _historicMax := math.max(nz(_src, _historicMax), _historicMax) _min + (_max - _min) * (_src - _historicMin) / math.max(_historicMax - _historicMin, 10e-10) // STEP 2: // Look if the close time of the current bar // falls inside the date range inDateRange = true // Stop loss & Take Profit Section l_sl_inp = input(2.0, title='Long Stop Loss %') / 100 l_tp_inp = input(4.0, title='Long Take Profit %') / 100 l_stop_level = strategy.position_avg_price * (1 - l_sl_inp) l_take_level = strategy.position_avg_price * (1 + l_tp_inp) s_sl_inp = input(2.0, title='Short Stop Loss %') / 100 s_tp_inp = input(4.0, title='Short Take Profit %') / 100 s_stop_level = strategy.position_avg_price * (1 + s_sl_inp) s_take_level = strategy.position_avg_price * (1 - s_tp_inp) src = close // Volume Differnce Indicator Delta float change_src = ta.change(src) float i_obv = ta.cum(change_src > 0 ? volume : change_src < 0 ? -volume : 0 * volume) float i_pvt = ta.pvt float result = ta.change(i_obv - i_pvt) float nresult = ta.ema(normalize(result, -1, 1), 20) // Volume Differnce Indicator Delta %B length = input.int(20, minval=1, title='Volume Bands Length') mult = input.float(2.0, minval=0.001, maxval=50, title='Volume Bands StdDev') basis = ta.ema(nresult, length) dev = mult * ta.stdev(nresult, length) upper = basis + dev lower = basis - dev bbr = (nresult - lower) / (upper - lower) // Normal %B, Based on close l1 = input.int(20, minval=1, title='Bollinger Bands Length') src2 = close mult1 = input.float(2.0, minval=0.001, maxval=50, title='Bollinger Bands StdDev') basis1 = ta.sma(src2, l1) dev1 = mult1 * ta.stdev(src2, l1) upper1 = basis1 + dev1 lower1 = basis1 - dev1 bbr1 = (src - lower1) / (upper1 - lower1) /// Final Output Line hist = ta.ema(ta.ema(ta.ema(bbr1 - bbr, input(2, title='Hist Smoothing Factor #1')), input(2, title='Hist Smoothing Factor #2')), input(2, title='Hist Smoothing Factor #3')) /// Overbought / Oversold Line Creation oversold = input(-.1) overbought = input(.4) hline(oversold, linewidth=2, color=color.new(#81c784, 62)) hline(overbought, linewidth=2, color=color.new(#c2185b, 38)) /// Long & Short Conditions short = hist > overbought long = hist < oversold /// Colors & Plotting histColor = hist >= 0 ? hist[1] < hist ? #26A69A : #B2DFDB : hist[1] < hist ? #FFCDD2 : #EF5350 plot(hist, title='Histogram', style=plot.style_columns, color=color.new(histColor, 0)) CrossBgColor = long ? color.new(#81c784, 62) : short ? color.new(#c2185b, 38) : na bgcolor(color.new(CrossBgColor, 90)) /// Strategy Methodology if inDateRange strategy.entry('long', strategy.long, when=long, stop=l_stop_level, limit=l_take_level) if inDateRange and strategy.position_size > 0 strategy.close_all(when=short) if inDateRange strategy.entry('short', strategy.short, when=short, stop=s_stop_level, limit=s_take_level) if inDateRange and strategy.position_size < 0 strategy.close_all(when=long)