급여 필터 전략을 만드는 분께,
간단한 규칙을 만들었습니다. 미국 고용보고서 발표 후 월간 급여 증가 폭이 175,000명을 넘으면 주식 ETF를 5거래일 동안 보유하고, 그렇지 않으면 현금으로 대기합니다. 주식 시장 개장 후 진입하도록 설정하고 거래 비용을 반영했으며 기준치도 고정했습니다. 그런 다음 과거 급여 시계열을 내려받아 모든 신호를 재구성했습니다.
아직 해결할 문제가 하나 남았습니다. 내려받은 과거 경제 시계열에는 전략이 매매했다고 가정한 날짜에는 아직 공개되지 않았던 수정 추정치가 들어 있을 수 있습니다. 거시경제 신호를 제대로 백테스트하려면 각 의사결정 시점에 이용할 수 있었던 버전이 필요합니다. 진입 시점을 1개 바 뒤로 미뤄도 두 달 뒤에 발표된 수치가 과거로 옮겨오지는 않습니다.
1월 수치에는 여러 번의 생일이 있습니다
아래는 가상의 발표 이력입니다. 날짜와 급여 변동 폭은 작동 방식을 보여주기 위한 예시이며, 실제 경제 지표 결과가 아닙니다.
| 발표일 | 기준 월 | 발표된 급여 변동 폭 | 해당 발표 시점의 규칙 |
|---|---|---|---|
| 2월 7일, 08:30 ET | 1월 | +150,000 | 현금으로 대기 |
| 3월 7일, 08:30 ET | 1월, 수정 | +185,000 | 2월의 결정을 바꾸지 않음 |
| 4월 4일, 08:30 ET | 1월, 재수정 | +210,000 | 2월의 결정을 바꾸지 않음 |
내려받은 데이터에 1월 수치가 +210,000으로 기록되어 있다면 백테스트에서는 2월에 ETF를 매수하게 됩니다. 하지만 실제 규칙대로라면 현금으로 대기했을 것입니다. 가격, 주문 시각, 수수료가 모두 정확해도 그 매매 전체가 허구일 수 있습니다.
이런 데이터 오염이 성과를 반드시 좋게 만든다고 단정할 수는 없습니다. 수정으로 수익 매매가 생길 수도, 손실 매매가 생길 수도 있고, 어느 쪽이든 사라질 수 있습니다. 문제는 시뮬레이션이 당시 전략으로는 답할 수 없었던 질문에 답한다는 점입니다.
그리고 1월은 측정 대상 기간일 뿐, 그 측정값을 알게 된 날짜는 아닙니다. 1월 1일이라고 표시된 행이 있다고 해서 1월 1일부터 그 수치로 매매해도 되는 것은 아닙니다.
각 값의 이용 가능 시점을 기록하세요
연구용 테이블에는 월과 수치 외에도 필요한 정보가 있습니다. 기준 기간, 값, 발표 시각, 빈티지 식별자, 출처를 보관하세요. 데이터를 계속 수집한다면 시스템이 발표 내용을 수신한 시각도 기록하세요. 기존 값을 덮어쓰지 말고 이전 버전을 보존해야 합니다.
의사결정 시점마다 이용 가능 시각이 그 시점보다 늦지 않은 관측값 가운데 가장 최신 버전을 선택하세요. 그런 다음 재구성한 스냅샷으로 특성을 계산합니다.
데이터 조회 규칙: 먼저 당시 이용할 수 있었던 기록만 남기고, 적용할 버전을 선택한 다음, 신호를 계산합니다. 오늘 기준으로 수정된 이력 전체에서 특성을 계산한 뒤 결과를 시차 조정하면 데이터 누출은 그대로 남습니다.
보유 기간이 5거래일이라고 해서 이 기록 작업을 생략할 수 있는 것은 아닙니다. 보수적으로 진입 시각을 정할 여지는 커지지만, 수정치를 미리 알 수 있게 되지는 않습니다.
과거 연구에서는 공개 발표 시각을 확인할 수 있어도 직접 수신한 시각은 기록되지 않았을 수 있습니다. 이 둘을 명확히 구분하세요. 문서로 확인되는 발표 시각에 명시한 지연 시간을 더해 접근 시점을 모델링할 수는 있습니다. 다만 그 가정을 과거에 실제로 전달받은 시각이라고 설명해서는 안 됩니다.
시간대를 고려한 타임스탬프도 필요합니다. 문서에 기재된 발표 지역 시각을 저장하고 올바르게 변환하세요. 뉴욕의 UTC 오프셋을 고정하면 서머타임 전환 때 틀리게 됩니다. 미래의 자신을 위해 작은 배려를 해두세요. 9월의 내가 date_actual_final2라고 이름 붙은 3월의 열을 해독하느라 애먹지 않도록요.
이동 특성에는 전체 빈티지 이력이 필요합니다
고정 기준치를 “급여 증가 폭이 직전 12개월 평균을 초과”로 바꾼다고 해보겠습니다. 이제 의사결정 시점 당시의 이전 관측값이 필요합니다. 그때까지 발표된 수정치도 포함해야 합니다.
매월 최초 발표치만 계속 사용하는 것은 다른 특성을 정의하는 일입니다. 최초 발표 이력을 명시적으로 원한다면 타당한 설계가 될 수 있습니다. 하지만 특정일 아침에 확인할 수 있었던 경제 지표의 이력을 재구성하지는 못합니다. 당시 정보 집합에는 이미 이전 달의 수정치가 포함되어 있었을 수 있기 때문입니다.
고용 수준에서 월간 급여 변동 폭을 계산한다면, 차분하기 전에 해당 빈티지에 맞는 수준 시계열부터 재구성하세요. 새로 발표된 수준과 이전 빈티지의 전월 수준을 섞으면 어떤 발표 스냅샷에도 존재하지 않았던 변동 폭이 만들어질 수 있습니다.
따라서 특성이 무엇을 뜻하는지 정해야 합니다. 최초 발표치인지, 당시 이용 가능했던 최신 경제 상황인지, 아니면 수정 자체인지 명시하세요. “급여 증가”라는 표현만으로는 결정할 것이 너무 많습니다.
10년치를 다시 돌리기 전에 발표 1건부터 바로잡으세요
먼저 ALFRED를 확인해 보세요. 여러 경제 시계열의 빈티지 이력을 제공합니다. 사용하려는 정확한 시계열과 기간의 데이터가 있는지 확인해야 합니다. 빈티지 날짜만으로 장중 이용 가능 여부를 알 수는 없습니다. 같은 날 신호에 사용하려면 문서로 확인되는 발표 시각과 함께 검토하세요.
첫 번째 감사에서는 발표 1건을 골라 직접 재구성해 보세요:
- 보관된 발표 자료를 찾아 공개 시각, 기준 월, 최초 값을 기록합니다.
- 진입 전에 전략이 받았을 입력 스냅샷을 재구성합니다.
- 신호를 직접 계산해 백테스트 결과와 비교합니다.
- 나중에 나온 수정치를 데이터 저장소에 추가하고, 이전 결정이 바뀌지 않는지 확인합니다.
마지막 확인은 자동화된 연구 파이프라인에서 특히 유용합니다. 연구 에이전트에 특성값과 함께 스냅샷 기준 시각 및 선택된 빈티지 식별자를 전달하세요. 기반 데이터베이스가 커진 뒤에도 매매를 특정 발표까지 추적할 수 있도록 충분한 근거를 남겨야 합니다.
단일 의사결정이 재현되면 전체 이력을 다시 실행하고 수익률을 비교하기 전에 신호가 달라진 사례부터 비교하세요. 수정으로 새로 생기거나 사라지거나 시점이 바뀐 진입 건수를 세어 보세요. 단순히 수정 전후 Sharpe를 하나씩 비교하는 것보다 달라진 의사결정에서 더 많은 것을 배울 수 있습니다.
2월의 매매는 2월에 알 수 있었던 정보만으로 성립해야 합니다. 4월의 수정치는 4월에 남겨두세요.
← 전체 글


