중요한 회전점 반전 전략

저자:차오장, 날짜: 2024-01-29 14:58:15
태그:

img

전반적인 설명

이 전략은 ATR를 계산하고 ATR 필터를 설정하여 중요하지 않은 피보트 포인트를 제거하여 진정으로 중요한 것만을 거래함으로써 전통적인 피보트 포인트 역전 전략을 최적화합니다.

전략 논리

핵심 논리는 중요한 피크와 트로프 피보트 포인트를 식별하는 것입니다. 중요한 피크 피보트를 계산하는 핵심 단계는 다음과 같습니다.

  1. ATR를 계산하고 ATR 필터 인수를 atr_mult로 설정합니다.
  2. 좌측에 있는 바의 일정한 수를 가로지르십시오 (leftBars에 의해 설정됩니다), 만약 피크 피프트가 좌측의 모든 높은 + ATR*atr_mult보다 높다면 피프트는 유효하지 않습니다.
  3. 오른쪽에 있는 바의 일정한 수를 가로질러 (rightBars에 의해 설정), 만약 피크 피프트가 오른쪽에 있는 모든 높은 + ATR*atr_mult보다 높다면, 피프트는 유효하지 않습니다.
  4. 위 테스트를 거친 후에도 정상 피크 피프트가 유효한 경우 중요한 피크 피프트로 반환합니다.

의미있는 최저 축을 계산하는 논리는 비슷합니다.

중요한 피보트를 얻으면 가격이 중요한 피크 피보트를 깨면 짧게, 중요한 바닥 피보트를 깨면 길게 가십시오.

이점 분석

이 전략의 주요 장점은 다음과 같습니다.

  1. ATR 및 atr_mult 필터는 중요하지 않은 변동을 제거하고 불필요한 거래를 피하는 진정한 의미의 피보트만 거래 할 수 있습니다.
  2. 동적 ATR 매개 변수는 변동성 시장에서 거래 범위를 자동으로 조정하여 과도한 거래를 방지할 수 있습니다.
  3. 피보트 포인트 반전은 상대적으로 높은 승률과 수익성을 가지고 있습니다.

위험 분석

주요 위험은 다음과 같습니다.

  1. 부적절한 ATR 매개 변수는 유효한 거래가 너무 많을 수 있습니다. ATR가 너무 높으면 유효한 피보트가 제거 될 수 있습니다.
  2. 아직 갇힐 위험이 존재하고 위험을 통제하기 위해 스톱 로스를 설정해야 합니다
  3. 회환 전략은 거래 비용에 민감하고 합리적인 스톱 로스 및 영업 영업이 설정되어야 합니다.

위의 위험을 통제하기 위해 다음 측면에서 최적화하십시오.

  1. 충분한 거래 기회를 보장하기 위해 ATR 매개 변수를 최적화합니다.
  2. 합리적인 스톱 로스를 설정하고 수익률을 취하십시오.
  3. 거래 비용의 영향을 줄이기 위해 위치 크기를 조정합니다.

최적화 방향

추가 최적화 방향은 다음과 같습니다.

  1. 다른 지표와 결합하여 시장 체제를 결정하고 트렌딩 시장에서 거래 반전을 피합니다. MACD, KDJ 등을 고려하십시오.

  2. 기계 학습 알고리즘을 추가하여 매개 변수를 자동으로 최적화합니다. 유전자 알고리즘, 무작위 숲과 같은 방법을 사용하여 최적의 매개 변수 집합을 찾을 수 있습니다.

  3. 양적 데이터를 사용하여 최적의 ATR 범위를 찾는 훈련 모델. 더 많은 역사적 데이터는 매개 변수 선택의 정확성을 향상시킵니다.

  4. 다른 전략과 결합하여 다른 전략 유형의 강점을 활용하는 방법을 고려하십시오. 예를 들어, 트렌드 다음 전략과 결합, 범위 동안 역전, 지속적인 트렌드 동안 트렌드-추천.

결론

이 중요한 피보트 역전 전략은 ATR을 계산하고 필터를 설정함으로써 무의미한 작은 변동을 필터링합니다. 중요한 피보트에서 거래 역전만 전략 수익성을 효과적으로 향상시킬 수 있습니다. 한편으로, 그것은 또한 매개 변수 최적화 어려움을 증가시킵니다. ATR 범위, 스톱 로스 / 취리 비율 등을 포괄적으로 고려하여 최적의 매개 변수를 찾아야 합니다. 철저하게 최적화되면 매우 효율적이고 안정적인 단기 거래 전략이 될 수 있습니다.


/*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("QuantNomad - Significant Pivot Reversal Strategy", shorttitle = "SPPS", 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])

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

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])

if (se)
    strategy.entry("PivRevSE", strategy.short, comment="PivRevSE", stop=lprice - syminfo.mintick)

더 많은