DPO 계산법: 11일 중심 이동은 왜 실시간 신호가 아닐까?

1. DPO는 당일 모멘텀보다 과거 사이클을 보기 위한 지표입니다

DPO(Detrended Price Oscillator)는 가격에서 이동평균을 빼 장기 방향의 영향을 줄이고, 과거 가격 움직임의 고점·저점 간격을 관찰하는 지표입니다. 이름에는 오실레이터가 들어가지만 당일 가격의 상승 속도를 측정하는 일반적인 모멘텀 지표와는 계산 시점이 다릅니다.

TradingView의 DPO 설명은 DPO가 최근 가격에 맞춰지지 않고 과거로 이동하며, 주된 목적도 매매 신호 생성보다 전형적인 사이클의 고저 범위와 기간을 관찰하는 데 있다고 설명합니다. StockCharts의 DPO 계산 안내 역시 20일 DPO를 11일 전 가격-당일 20일 SMA로 정의합니다.

기존 글은 이 두 시점을 반대로 사용해 당일 가격-11일 전 SMA를 계산했습니다. 이 방식도 가격과 과거 평균의 차이를 보여줄 수 있지만 표준 DPO와는 다른 변형입니다. 어느 값을 과거로 이동하는지에 따라 0선 위·아래와 교차 날짜가 크게 달라집니다.

DPO가 추세를 제거한다는 표현도 가격에서 모든 추세와 무작위 변동을 완전히 없앤다는 뜻은 아닙니다. 선택한 기간의 단순이동평균을 기준으로 특정 시점의 가격 편차를 계산할 뿐이며, 시장에 고정된 주기가 존재한다고 보장하지 않습니다.

2. 20일 DPO는 11일 전 가격에서 당일 SMA를 뺍니다

기간을 n이라고 하면 가격 오프셋 k는 다음과 같습니다.

DPO 가격 오프셋 계산식

종가의 n기간 단순이동평균은 당일까지의 가격으로 계산합니다.

DPO 단순이동평균 계산식

표준 DPO는 k기간 전 종가에서 당일 SMA를 뺍니다.

표준 DPO 계산식

기간 20에서는 k=11입니다. 20일 SMA는 19거래일 전부터 당일까지를 포함하고, 그 구간의 가운데 부근에 있는 11거래일 전 종가와 비교됩니다.

시점 t에서 사용하는 값 DPO(20) 입력 역할
당일 SMA20 당일까지 20개 종가의 평균
11거래일 전 종가 평균과 비교할 과거 가격
당일 DPO 11일 전 가격-당일 SMA20

차트 프로그램은 DPO 값을 11칸 왼쪽으로 옮겨 과거 가격과 시각적으로 맞출 수 있습니다.

DPO 중심 정렬 표시식

하지만 과거 t-k 위치에 표시된 값은 t가 되어야 계산할 수 있습니다. 즉 11거래일 뒤까지의 데이터를 사용한 값입니다. 차트에서 사이클을 관찰할 때는 유용하지만 표시일에 알 수 있었던 실시간 신호로 취급하면 룩어헤드가 됩니다.

기존 글의 계산은 다음처럼 가격과 SMA의 시점을 반대로 둔 변형입니다.

DPO 시점을 반대로 사용한 변형 계산식

이 값은 당일 가격이 11거래일 전에 계산된 평균보다 높은지 보여줍니다. 과거 중심의 표준 DPO보다 추세를 따라가는 성격이 강하므로 이름과 공식을 분리해야 합니다.

3. 0선 교차는 당일 가격의 방향 전환이 아닙니다

표준 DPO가 0보다 높다는 것은 11거래일 전 가격이 당일 SMA20보다 높다는 뜻입니다. 당일 종가가 이동평균 위에 있다는 뜻이 아니며, 당일 모멘텀이 양수라는 뜻도 아닙니다.

조건 계산으로 확인되는 내용 단정할 수 없는 내용
DPO가 0 위 과거 가격이 당일 SMA보다 높음 당일 상승 추세
DPO 0선 상향 교차 과거 가격과 당일 SMA의 관계가 양수로 전환 단기 상승 사이클 시작
DPO 고점 과거 가격 편차가 상대적으로 큼 당일 과매수·즉시 매도
DPO 저점 과거 가격 편차가 상대적으로 작음 당일 과매도·즉시 매수
중심 정렬 DPO 전환 과거 차트에서 사이클 위치를 쉽게 관찰 해당 표시일에 알 수 있던 신호

TradingView와 StockCharts는 모두 DPO를 당일 매매 신호보다 과거 사이클 특성 확인에 가깝게 설명합니다. 따라서 0선 상향 교차를 눌림목 매수 신호로 사용하려면 계산 가능 시점을 당일로 고정하고 별도의 진입·청산 규칙으로 검증해야 합니다.

중심 정렬 차트에서 DPO 저점이 가격 저점과 잘 맞아 보이는 것은 계산 구조의 결과일 수 있습니다. 그 값은 표시된 가격 저점 이후 데이터를 포함하므로 과거 차트의 정렬 상태만 보고 선행성을 평가하면 안 됩니다.

4. 같은 0선 교차와 추세 조건 뒤 결과는 달랐습니다

당일 계산 가능한 표준 DPO(20)가 전일 0 이하에서 당일 0을 초과하고, 종가가 SMA120보다 높은 날을 관찰했습니다. 아래 두 사례는 삼성전자의 같은 조건이지만 이후 10거래일 결과는 반대였습니다.

삼성전자 표준 DPO 0선 상향 교차 뒤 상승과 하락 사례
항목 상승 사례 하락 사례
판정일 2025년 12월 18일 2026년 6월 30일
판정일 종가 107,600원 334,000원
SMA120 83,593원 223,506원
표준 DPO(20) +250원 +2,775원
시점 반대 변형 +7,295원 +24,700원
5거래일 내 표준 DPO 0선 재하향 아니오 아니오
10거래일 수익률 +29.09% -21.26%

두 사례 모두 표준 DPO는 0 위를 유지했고 종가도 SMA120 위였습니다. 상승 사례에서는 가격이 올랐지만 하락 사례에서는 같은 조건 뒤 가격이 크게 내렸습니다. DPO가 과거 가격과 당일 평균의 관계를 보여준다는 사실과 이후 종가 방향은 서로 다른 문제입니다.

10개 대형주 8,860거래일을 비교했습니다

2018년부터 지표를 누적하고 2022년 이후 10개 대형주에서 이후 10거래일 종가를 확인할 수 있는 8,860거래일을 평가했습니다.

표준 DPO와 시점 반대 변형 및 중심 정렬 비교
0선 상향 교차 조건 관찰 수 5일 내 0선 재하향 10일 뒤 수익률 양수 10일 수익률 중앙값
표준 DPO(20) 1,060개 71.13% 49.15% 0.00%
표준 DPO·종가>SMA120 531개 73.07% 47.65% -0.27%
시점 반대 변형 320개 53.12% 48.12% -0.21%
과거 중심 정렬 1,070개 71.31% 35.14% -1.64%

표준 DPO의 0선 상향 교차 1,060개 중 71.13%는 5거래일 안에 다시 0 아래로 내려갔습니다. SMA120 조건을 더해도 상승 비율은 높아지지 않았습니다.

표준식과 가격·SMA 시점을 반대로 쓴 변형은 전체 거래일의 60.40%에서 0선 위·아래 판정이 달랐습니다. 기존 글의 공식을 표준 DPO와 같은 지표로 볼 수 없는 차이입니다.

과거 중심 정렬 결과는 표시일 이후 11거래일의 정보를 사용하므로 상승 비율 35.14%를 매매 성과처럼 비교할 수 없습니다. 이 수치는 중심 정렬 신호를 과거 표시일에 거래했다고 가정할 때 결과가 얼마나 왜곡될 수 있는지 보여주기 위해 함께 표시했습니다.

기간을 바꾸면 교차 수도 달라졌습니다.

DPO 기간 0선 상향 교차 10일 뒤 수익률 양수 10일 수익률 중앙값
10 1,357개 49.23% 0.00%
20 1,060개 49.15% 0.00%
30 839개 51.37% +0.22%

기간이 길수록 교차 수는 줄었지만 이 표본만으로 30기간이 더 우수하다고 결론 내릴 수 없습니다. 같은 데이터에서 기간을 반복 선택하면 과최적화가 되므로 다른 구간과 종목에서 다시 검증해야 합니다.

5. 중심 정렬과 실시간 계산을 분리해야 합니다

DPO의 장점은 장기 방향의 영향을 줄인 가격 편차를 과거 차트에서 관찰하고, 반복되는 고점·저점 간격을 탐색하기 쉽다는 점입니다. 하지만 다음 한계를 함께 확인해야 합니다.

  • 중심 정렬 DPO는 과거 표시일 이후 데이터를 사용하므로 실시간 진입 신호가 아닙니다.
  • 오른쪽 끝의 최근 11거래일에는 중심 정렬 값을 표시할 수 없습니다.
  • 표준 DPO는 당일 계산 가능하지만 11거래일 전 가격과 당일 평균을 비교합니다.
  • DPO는 상하한이 없어 종목마다 고정된 과매수·과매도 기준을 적용하기 어렵습니다.
  • 시장의 사이클 길이는 고정되지 않으며 추세와 변동성에 따라 달라집니다.
  • 기간과 오프셋을 바꾸면 고점·저점과 0선 교차 날짜가 달라집니다.
  • 수정주가와 이동평균 초기화 방식이 다르면 분할·배당 전후 값이 어긋날 수 있습니다.
  • 가격에서 SMA를 한 번 뺀다고 모든 추세와 잡음이 완전히 제거되는 것은 아닙니다.

DPO 고점과 저점 사이의 거래일 수를 여러 구간에서 반복 확인하면 사이클 후보를 만들 수 있습니다. 그러나 가장 잘 맞아 보이는 과거 주기 하나를 다음 구간에 그대로 적용하면 주기 선택 자체가 과최적화될 수 있습니다.

6. 계산일과 표시일을 먼저 기록합니다

DPO를 분석에 사용할 때는 다음 순서로 확인합니다.

  1. 과거 가격-당일 SMA인 표준식과 시점 반대 변형을 구분합니다.
  2. 당일 계산값과 과거로 이동한 중심 정렬 표시를 분리합니다.
  3. 사이클 길이와 고저 범위를 여러 구간에서 확인하고 매매 신호는 별도로 검증합니다.

핵심은 간단합니다. DPO는 과거 사이클을 보기 쉽게 정렬하는 도구이지, 차트에 표시된 과거 전환점에서 실시간 매수·매도 신호를 준 지표가 아닙니다. 계산 가능 시점을 지키지 않으면 아름다운 과거 차트가 그대로 룩어헤드가 됩니다.

단순이동평균의 계산은 SMA 계산법, 추세와 횡보 상태를 구분하는 다른 접근은 Choppiness Index 계산법, 두 이동평균 차이를 당일 모멘텀으로 사용하는 방식은 MACD 계산법, 여러 기간 ROC로 장단기 움직임을 합치는 방식은 KST 지표 계산법을 함께 참고할 수 있습니다.

본 포스팅은 가격 데이터와 기술적 지표의 수리적 이해를 돕기 위한 참고 자료이며, 특정 종목에 대한 투자 권유나 수익을 보장하지 않습니다. 투자 결과에 대한 책임은 투자자 본인에게 있습니다.