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

Автор:Чао Чжан, Дата: 2023-10-30 11:45:42
Тэги:

基于成交量变化率的多空交替周期震荡器策略

Обзор

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

Принципы стратегии

  1. Рассчитывается, что изменение в изменении объема торгов ("изменение в изменении показателя разницы в размере торгов") получается на основе показателя динамики торгов nresult.

  2. Для nresult вычисляется Брин-Бэнд, получается bbr, представляющий плохой стандарт мототранспорта.

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

  4. Расчет разницы между ними, т.е. разницы в стандарте мощности сделок за вычетом разницы в стандарте цен, используется в качестве окончательного показателя.

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

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

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

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

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

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

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

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

  6. Больше параметров, которые можно настроить, такие как длина ленты Брин, кратность стандартного отклонения, параметры сглаживания данных Хиста, и т. д., могут быть оптимизированы для стратегии.

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

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

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

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

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

  5. Сигналы обратного движения при сильном тренде приводят к ошибочным сделкам.

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

Оптимизация стратегии

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

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

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

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

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

  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)



Больше информации