Стратегия, основанная на объеме энергии

Автор:Чао Чжан, Дата: 2024-01-04 15:38:54
Тэги:

img

Обзор

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

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

Стратегия сначала делит объем торговли каждой свечи на бычий и медвежий объем на основе отношения между ценой закрытия и ценой открытия. Если цена закрытия больше цены открытия, весь объем торговли свечи является бычим. Если цена закрытия меньше цены открытия, бычий объем рассчитывается по соотношению (высшая цена - цена открытия) / (высшая цена - самая низкая цена), а остальная часть - медвежий объем.

Затем он рассчитывает взвешенную скользящую среднюю величину бычьего и медвежьего объема последних n свечей соответственно. Если скользящая средняя величина бычьего объема больше, чем медвежьего, и их разница, разделенная на бычий объем, больше установленного порога, генерируется бычий сигнал. Правило для генерации медвежьих сигналов аналогично.

Если нет существенной разницы между бычьим и медвежьим объемом, это указывает на то, что рынок в настоящее время находится в консолидации.

Анализ преимуществ

  • Использование информации о объеме для оценки настроений участников рынка с теоретической основой
  • Автоматическое определение зон консолидации, чтобы избежать пропусков важных сигналов
  • Настраиваемые параметры адаптируются к различным торговым продуктам и срокам
  • Может идентифицировать бычьи и медвежие сигналы отдельно или следовать только одной стороне

Анализ рисков

  • Данные о объеме торговли могут быть манипулированы
  • Параметры по умолчанию могут не подходить для всех продуктов, требуется оптимизация
  • Неправильные параметры идентификации консолидации могут не давать сигналов
  • Ложные сигналы могут возникать в короткие периоды

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

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

  • Испытать различные методы расчета объема торговли
  • Попробуйте различные типы скользящих средних, как EMA, SMMA и т.д.
  • Оптимизировать период расчета среднего объема
  • Оптимизировать параметры для определения консолидации
  • Комбинировать с другими техническими показателями для фильтрации сигналов

Резюме

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


/*backtest
start: 2022-12-28 00:00:00
end: 2024-01-03 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/
// © Shuttle_Club
//@version=5

strategy('Volume fight strategy', default_qty_type=strategy.cash, default_qty_value=10000, currency='USD', commission_value=0.04, calc_on_order_fills=false, calc_on_every_tick=false, initial_capital=10000)

direction = input.string('ANY', 'Direction', options=['LONG', 'SHORT', 'ANY'], tooltip='Select the direction of trade.\n\nВыберите направление торговли.')
ma = input.int(11, 'Search_range', minval=1, tooltip='The range of estimation of the predominance of bullish or bearish volume (quantity bars). The smaller the TF, the higher the range value should be used to filter out false signals.\n\nДиапазон оценки преобладания бычьего или медвежьего объема (количество баров). Чем меньше ТФ, тем выше следует использовать значение диапазона, чтобы отфильтровать ложные сигналы.')
delta = input.float(15, 'Smoothing_for_flat,%', step=0.5, minval=0, tooltip='Smoothing to reduce false signals and highlight the flat zone. If you set the percentage to zero, the flat zones will not be highlighted, but there will be much more false signals, since the indicator becomes very sensitive when the smoothing percentage decreases.\n\nСглаживание для уменьшения ложных сигналов и выделения зоны флета. Если выставить процент равным нулю, то зоны флета выделяться не будут, но будет гораздо больше ложных сигналов, так как индикатор становится очень чувствительным при снижении процента сглаживания')
bgshow = input.bool(true, 'Show background zones', tooltip='Show the color background of the current trading zone.\n\nПоказывать цветовой фон текущей торговой зоны.')
all_signal_show = input.bool(false, 'Show each setup in zone', tooltip='Show every signals into trading zone.\n\nПоказывать каждый сигнал внутри торговой зоны.')

/////   CALCULATION
bull_vol = open < close ? volume : volume * (high - open) / (high - low)  //determine the share of bullish volume
bear_vol = open > close ? volume : volume * (open - low) / (high - low)  //determine the share of bearish volume
avg_bull_vol = ta.vwma(bull_vol, ma)  //determine vwma
avg_bear_vol = ta.vwma(bear_vol, ma)
diff_vol = ta.sma(avg_bull_vol / volume - 1 - (avg_bear_vol / volume - 1), ma)  //normalize and smooth the values
vol_flat = math.abs(avg_bull_vol + avg_bear_vol) / 2  //determine average value for calculation flat-filter

/////   SIGNALS
up = int(na), up := nz(up[1])
dn = int(na), dn := nz(dn[1])
bull = avg_bull_vol > avg_bear_vol and vol_flat / avg_bull_vol < 1 - delta / 100  //determine up zones
bear = avg_bull_vol < avg_bear_vol and vol_flat / avg_bear_vol < 1 - delta / 100  //determine dn zones

if bull
    up += 1, dn := 0
    dn
if bear
    dn += 1, up := 0
    up
if not bull and not bear and all_signal_show
    up := 0, dn := 0
    dn

/////   PLOTTING
plotshape(bull and up == 1, 'UP', location=location.bottom, style=shape.triangleup, color=color.new(color.green, 0), size=size.tiny)
plotshape(bear and dn == 1, 'DN', location=location.top, style=shape.triangledown, color=color.new(color.red, 0), size=size.tiny)
bgcolor(title='Trading zones', color=bgshow and avg_bull_vol > avg_bear_vol and vol_flat / avg_bull_vol < 1 - delta / 100 ? color.new(color.green, 85) : bgshow and avg_bull_vol < avg_bear_vol and vol_flat / avg_bear_vol < 1 - delta / 100 ? color.new(color.red, 85) : na)
plot(diff_vol, 'Volume difference', style=plot.style_area, color=avg_bull_vol > avg_bear_vol and vol_flat / avg_bull_vol < 1 - delta / 100 ? color.new(color.green, 0) : avg_bull_vol < avg_bear_vol and vol_flat / avg_bear_vol < 1 - delta / 100 ? color.new(color.red, 0) : color.new(color.gray, 50))

strategy.close('Short', comment='close', when=bull and up == 1)
strategy.close('Long', comment='close', when=bear and dn == 1)
strategy.entry('Long', strategy.long, when=direction != 'SHORT' and bull and up == 1)
strategy.entry('Short', strategy.short, when=direction != 'LONG' and bear and dn == 1)

if bull and up==1
    alert('Bullish movement! LONG trading zone', alert.freq_once_per_bar_close)
if bear and dn==1
    alert('Bearish movement! SHORT trading zone', alert.freq_once_per_bar_close)
    

Больше