Количественные стратегии, основанные на разворотах точек разворота


Дата создания: 2024-02-20 14:22:13 Последнее изменение: 2024-02-20 14:22:13
Копировать: 0 Количество просмотров: 654
1
Подписаться
1617
Подписчики

Количественные стратегии, основанные на разворотах точек разворота

Обзор

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

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

Эта стратегия сначала определяет функции pivotHighSig() и pivotLowSig() для поиска высоких и низких точек на оси. Эти две функции будут искать соответствующие точки на левой и правой стороне оси.

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

После того, как найдены высокие и низкие точки оси, стратегия выбирает дальнейшие точки оси оси, то есть важные точки в точке оси. Это достигается путем определения нескольких исторических переменных высоких и низких точек оси, таких как ph1, ph2 и т. д.

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

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

Эта количественная стратегия, основанная на центральных точках, имеет следующие преимущества:

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

Риски и решения

Однако эта стратегия также несет в себе некоторые риски:

  1. Неправильное распознавание точек оси приводит к ошибочному сигналу. Решение состоит в том, чтобы скорректировать параметры правого и правого интервала, чтобы обеспечить более точное распознавание точек оси.
  2. Прорыв ложного прорыва. Решение состоит в сочетании дополнительных факторов фильтрации сигнала, таких как мощность, объем передачи и т. д.

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

Эта стратегия также может быть оптимизирована в следующих направлениях:

  1. Добавление стратегии “стоп-лосс”, чтобы сделать стратегию более стабильной
  2. Фильтрация сигналов в сочетании с другими показателями
  3. Разработка стратегии обратного PRED для дальнейшей оптимизации прогнозирования хабов с использованием ML
  4. Добавление параметров для адаптации

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

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

Исходный код стратегии
/*backtest
start: 2023-02-13 00:00:00
end: 2024-02-19 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Pivot of Pivot Reversal Strategy [QuantNomad]", shorttitle = "PoP Reversal Strategy [QN]", overlay=true)

// Inputs 
leftBars   = input(4,   title = 'PP Left Bars')
rightBars  = input(2,   title = 'PP Right Bars')
atr_length = input(14,  title = 'ATR Length')
atr_mult   = input(0.1, title = 'ATR Mult')

// Pivot High Significant Function
pivotHighSig(left, right) =>
    pp_ok = true
    atr   = atr(atr_length)
    
    for i = 1 to left
        if (high[right] < high[right+i] + atr * atr_mult)
            pp_ok := false
    for i = 0 to right-1
        if (high[right] < high[i] + atr * atr_mult)
            pp_ok := false
    
    pp_ok ? high[right] : na

// Pivot Low Significant Function
pivotLowSig(left, right) =>
    pp_ok = true
    atr   = atr(atr_length)
    
    for i = 1 to left
        if (low[right] > low[right+i] - atr * atr_mult)
            pp_ok := false
    for i = 0 to right-1
        if (low[right] > low[i] - atr * atr_mult)
            pp_ok := false
    
    pp_ok ? low[right] : na


swh = pivotHighSig(leftBars, rightBars)
swl = pivotLowSig (leftBars, rightBars)

swh_cond = not na(swh)

hprice = 0.0
hprice := swh_cond ? swh : hprice[1]

le = false
le := swh_cond ? true : (le[1] and high > hprice ? false : le[1])

swl_cond = not na(swl)

lprice = 0.0
lprice := swl_cond ? swl : lprice[1]

se = false
se := swl_cond ? true : (se[1] and low < lprice ? false : se[1])

// Pivots of pivots
ph1 = 0.0
ph2 = 0.0
ph3 = 0.0

pl1 = 0.0
pl2 = 0.0
pl3 = 0.0

pphprice = 0.0
pplprice = 0.0

ph3 := swh_cond ? nz(ph2[1]) : nz(ph3[1])
ph2 := swh_cond ? nz(ph1[1]) : nz(ph2[1])
ph1 := swh_cond ? hprice     : nz(ph1[1])

pl3 := swl_cond ? nz(pl2[1]) : nz(pl3[1])
pl2 := swl_cond ? nz(pl1[1]) : nz(pl2[1])
pl1 := swl_cond ? lprice     : nz(pl1[1])

pphprice := swh_cond and ph2 > ph1 and ph2 > ph3 ? ph2 : nz(pphprice[1])
pplprice := swl_cond and pl2 < pl1 and pl2 < pl3 ? pl2 : nz(pplprice[1])


if (le)
    strategy.entry("PP_RevLE", strategy.long, comment="PP_RevLE", stop=pphprice + syminfo.mintick)

if (se)
    strategy.entry("PP_RevSE", strategy.short, comment="PP_RevSE", stop=pplprice - syminfo.mintick)
    
// Plotting 
plot(lprice, color = color.red,   transp = 55)
plot(hprice, color = color.green, transp = 55)

plot(pplprice, color = color.red,   transp = 0, linewidth = 2)
plot(pphprice, color = color.green, transp = 0, linewidth = 2)