Тенденция, основанная на объеме, в соответствии со стратегией торговли

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

img

Обзор

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

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

  1. Вычислить движущуюся среднюю величину объема vol_sum с длиной vol_length и сгладить ее движущейся средней величиной vol_smooth.
  2. Сгенерировать длинные сигналы, когда объем поднимается выше порога, и короткие сигналы, когда объем падает ниже порога.
  3. Чтобы отфильтровать ложные сигналы, нужно только долго, когда тенденция цены, проведенная в прошлых направлениях, растет и наоборот.
  4. Установите два пороговых значения threshold и threshold2. threshold генерирует торговые сигналы, в то время как threshold2 действует как стоп-лосс.
  5. Управление открытыми/закрытыми ордерами с помощью логики машины состояния.

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

  1. Показатель объема отражает изменения покупательной/продажной способности на рынке для получения более точных сигналов.
  2. Сочетание с ценовым трендом позволяет избежать неправильных сигналов во время колебаний цен.
  3. Два пороговых значения лучше контролируют риски.

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

  1. Индикатор объема имеет задержку и может пропустить переломные моменты цены.
  2. Неправильные настройки параметров приводят к чрезмерной торговле или задержке сигнала.
  3. Стоп-лосс может быть достигнут во время пиков объемов торговли.

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

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

  1. Адаптивная оптимизация параметров на основе рыночных условий.
  2. Включить другие показатели, такие как индекс волатильности, чтобы проверить сигналы.
  3. Исследования, применяющие модели машинного обучения для улучшения точности сигнала.

Заключение

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


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy('Volume Advanced', default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.075, currency='USD')
startP = timestamp(input(2017, "Start Year"), input(12, "Start Month"), input(17, "Start Day"), 0, 0)
end    = timestamp(input(9999, "End Year"),   input(1, "End Month"),   input(1, "End Day"),   0, 0)
_testPeriod() =>
    iff(time >= startP and time <= end, true, false)

source = close 
vol_length  = input(34, title = "Volume - Length")
vol_smooth  = input(200,title = "Volume - Smoothing")
volriselen  = input(21,  title = "Volume - Risinglength")
volfalllen  = input(13, title = "Volume - Fallinglength")
threshold   = input(1,"threshold")
threshold2  = input(1.2,step=0.1, title="Threshold 2")
direction = input(13,"amount of bars")


volsum  = sum(volume, vol_length) / (sum(volume, vol_smooth) / (vol_smooth / vol_length))


LongEntry  = (rising(volsum, volriselen) or crossover (volsum, threshold)) and close > close[direction]
ShortEntry = (rising(volsum, volriselen) or crossover (volsum, threshold)) and close < close[direction]
LongExit1  = falling (volsum,volfalllen)
ShortExit1 = falling (volsum,volfalllen)
LongExit2= (crossover(volsum, threshold2) and close < close[direction])


_state = 0
_prev = nz(_state[1])
_state := _prev

if _prev == 0
    if LongEntry
        _state := 1
        _state
    if ShortEntry
        _state := 2
        _state
if _prev == 1
    if ShortEntry or LongExit1
        _state := 0
        _state
if _prev == 2
    if LongEntry or ShortExit1
        _state := 0
        _state

_bLongEntry = _state == 1 
_bLongClose = _state == 0 

long_condition = _bLongEntry and close > close[direction]
strategy.entry('BUY', strategy.long, when=long_condition)  
 
short_condition =  _bLongClose or LongExit2
strategy.close('BUY', when=short_condition)

plot(volsum,      color = color.green,    title="Vol_Sum")
plot(threshold, color = color.fuchsia, transp=50, title="Threshold")
plot(threshold2, color=color.white, transp = 50, title="Threshold 2")

Больше