이 전략은 ATR를 계산하고 ATR 필터를 설정하여 중요하지 않은 피보트 포인트를 제거하여 진정으로 중요한 것만을 거래함으로써 전통적인 피보트 포인트 역전 전략을 최적화합니다.
핵심 논리는 중요한 피크와 트로프 피보트 포인트를 식별하는 것입니다. 중요한 피크 피보트를 계산하는 핵심 단계는 다음과 같습니다.
의미있는 최저 축을 계산하는 논리는 비슷합니다.
중요한 피보트를 얻으면 가격이 중요한 피크 피보트를 깨면 짧게, 중요한 바닥 피보트를 깨면 길게 가십시오.
이 전략의 주요 장점은 다음과 같습니다.
주요 위험은 다음과 같습니다.
위의 위험을 통제하기 위해 다음 측면에서 최적화하십시오.
추가 최적화 방향은 다음과 같습니다.
다른 지표와 결합하여 시장 체제를 결정하고 트렌딩 시장에서 거래 반전을 피합니다. MACD, KDJ 등을 고려하십시오.
기계 학습 알고리즘을 추가하여 매개 변수를 자동으로 최적화합니다. 유전자 알고리즘, 무작위 숲과 같은 방법을 사용하여 최적의 매개 변수 집합을 찾을 수 있습니다.
양적 데이터를 사용하여 최적의 ATR 범위를 찾는 훈련 모델. 더 많은 역사적 데이터는 매개 변수 선택의 정확성을 향상시킵니다.
다른 전략과 결합하여 다른 전략 유형의 강점을 활용하는 방법을 고려하십시오. 예를 들어, 트렌드 다음 전략과 결합, 범위 동안 역전, 지속적인 트렌드 동안 트렌드-추천.
이 중요한 피보트 역전 전략은 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)