피보트 포인트에 기초한 피보트 역전량 전략

저자:차오장, 날짜: 2024-02-20 14:22:13
태그:

img

전반적인 설명

이 전략의 핵심 아이디어는 양적 거래에 피벗 포인트를 사용하는 것입니다. 중요한 스윙 고도와 하도를 찾고 가격이 이러한 핵심 수준을 넘어서면 역전 거래를합니다.

전략 논리

전략은 먼저 피보트HighSig() 및 피보트LowSig() 함수를 정의하여 스윙 고점과 저점을 찾습니다. 이 두 함수는 왼쪽과 오른쪽의 자격있는 피보트 포인트를 검색합니다.

특히, 스윙 하이즈의 경우 왼쪽에서 여러 개의 높은 하이즈와 오른쪽에서 여러 개의 낮은 하이즈를 찾습니다. 따라서 피보트 하이즈는 상대적으로 높은 수준에 위치합니다. 스윙 로우스의 기준은 반대입니다. 양쪽에서 더 높은 로우와 더 낮은 로우를 찾습니다.

스윙 고도와 하위점을 찾은 후 전략은 그 피브트 포인트, 즉 피브트에서 중요한 포인트를 추가로 선택합니다. 이것은 스윙 고도와 하위점, 예를 들어 ph1, ph2 등을위한 여러 역사적 변수를 정의함으로써 달성됩니다.

마지막으로, 반전 거래는 가격이 회전점의 회전점을 통과 할 때 수행됩니다.

장점

이 피워트 포인트 기반의 양적 전략은 다음과 같은 장점을 가지고 있습니다.

  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)

더 많은