Стратегия торговли по тренду, основанная на осцилляторе объема


Дата создания: 2024-01-29 15:04:18 Последнее изменение: 2024-01-29 15:04:18
Копировать: 0 Количество просмотров: 760
1
Подписаться
1617
Подписчики

Стратегия торговли по тренду, основанная на осцилляторе объема

Обзор

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

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

  1. Вычислите среднюю линию vol_sum, длина которой vol_length, и сгладите среднюю линию длины vol_smooth.
  2. При повышении vol_sum выше порогового значения создается сигнал к покупке, а при повышении выше порогового значения - сигнал к продаже.
  3. Для фильтрации ошибочных операций, только при сравнении с ценой закрытия прошлого направления корневой линии K, когда ценовая тенденция повышается, совершается операция по покупке. Когда ценовая тенденция снижается, совершается операция по продаже.
  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")