Количественная стратегия перехода на переломные точки на основе переломных точек

Автор:Чао Чжан, Дата: 2024-02-20 14:22:13
Тэги:

img

Обзор

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

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

Стратегия сначала определяет функции pivotHighSig (()) и pivotLowSig (()) для определения высоких и низких точек.

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

После определения высоких и низких уровней, стратегия далее выбирает ключевые точки из этих ключевых точек, т.е. важные точки из ключевых точек.

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

Преимущества

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

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

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

Эта стратегия также сопряжена с некоторыми рисками:

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

Области улучшения

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

  1. Добавить механизмы остановки потери, чтобы сделать стратегию более стабильной
  2. Включить больше технических показателей для фильтрации сигналов
  3. Разработка моделей обратной работы PRED с использованием машинного обучения для дальнейшего повышения прогнозирования поворотных точек
  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)

Больше