Стратегия осциллятора с чередованием длинных и коротких циклов, основанная на скорости изменения объема


Дата создания: 2023-10-30 11:45:42 Последнее изменение: 2023-10-30 11:45:42
Копировать: 1 Количество просмотров: 686
1
Подписаться
1617
Подписчики

Стратегия осциллятора с чередованием длинных и коротких циклов, основанная на скорости изменения объема

Обзор

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

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

  1. Вычислить изменение коэффициента изменения объема сдачи (изменение коэффициента изменения показателя разрыва объема сдачи), получив показатель nresult, основанный на динамике объема сдачи.

  2. Для nresult рассчитывается полоса Бурина, получается bbr, которая представляет собой разницу между стандартом движения заданной массы.

  3. Для ценообразования на закрытие рассчитывается буринская полоса, получающая bbr1, которая представляет собой разницу в ценовом стандарте.

  4. Рассчитайте разницу между ними hist, то есть разница между стандартом объема поставок и стандартом цены, как конечный показатель.

  5. При ношении 0 вверху hist является пустой точкой входа, а при ношении 0 внизу - многоголовой точкой входа.

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

Стратегические преимущества

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

  2. Расчет изменения в объеме сделок увеличивает влияние изменения объема сделок на цены, что повышает эффективность сделки.

  3. Брин-полоса, объединяющая динамический индикатор трафика и ценовой индикатор, делает торговые сигналы более надежными.

  4. Трехкратная индексная обработка данных Hist, чтобы сделать сигнал более точным и гладким.

  5. Установка линий сверхпокупок и сверхпродаж, в сочетании с лимитом на остановку и убыток, позволяет эффективно контролировать риск.

  6. Для оптимизации стратегии можно использовать множество настраиваемых параметров, таких как длина ленты Брин, кратность стандартного отклонения, параметры сглаживания данных Hist.

Стратегический риск

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

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

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

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

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

Можно оптимизировать параметры, в сочетании с другими показателями фильтровать, установить стоп-стоп, чтобы риск был контролируемым.

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

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

  2. В сочетании с трендовыми индикаторами фильтруйте сигналы, чтобы избежать обратной торговли.

  3. Добавление подтверждения других показателей, таких как MACD, для предотвращения ложных сигналов.

  4. Использование технологий искусственного интеллекта для адаптивной оптимизации параметров.

  5. Добавление модуля динамической коррекции Stop Loss Stop Stop и оптимизация управления капиталом.

  6. В сочетании с машинным обучением рассуждение о количестве отклонений от успешности, повышение качества сигнала.

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

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

Исходный код стратегии
/*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)