597 / 736BT

Backtesting

전략 백테스트

Backtesting은 과거 데이터로 거래 규칙을 시험합니다. 오류와 비용을 찾는 데 도움이 되지만, 과거의 수익만으로 전략이 앞으로도 통한다고 입증할 수는 없습니다.

Backtesting은 미리 정한 거래 규칙을 과거 데이터에 적용하고, 선택한 체결 및 비용 모델 아래에서 어떤 결과가 나왔을지 모의 계산하는 것입니다.

피터는 가격이 오른 날 뒤에 다시 상승하는 경우가 있다는 점을 발견합니다. 감으로 매수하는 대신 규칙을 적고 과거 가격에 적용합니다. 이것이 Backtesting, 즉 과거를 이용한 아이디어 시험입니다. 결과는 선택한 모델에서 일어난 일을 설명하며 피터가 실제로 번 돈이 아닙니다. Bailey et al.은 보기 좋은 과거 성적과 신뢰할 수 있는 전략 검증을 구분해야 하는 이유를 설명합니다. [1]

피터는 거래 전에 이용할 수 있었던 정보만 사용해야 합니다. 당일 종가를 쓰는 규칙이라면 그 종가를 근거로 같은 날 아침에 매수할 수 없습니다. QuantConnect는 이런 오류를 Look-ahead Bias라고 부릅니다. 미래 정보가 과거 판단에 들어간 것입니다. 공표 데이터에서는 대상 기간뿐 아니라 실제 발표 시점이 중요하며, 나중에 수정된 값도 당시에는 알 수 없었습니다. 따라서 이 글의 예시는 이미 확정된 이전 종가와 그다음 시기의 시가를 사용합니다. [2]

현재까지 살아남은 시장이나 기업만 고르면 또 다른 왜곡이 생깁니다. QuantConnect는 이를 Survivorship Bias라 부르며 현재 지수 구성 종목을 과거에 적용하는 사례로 설명합니다. Bitcoin 데이터에서도 거래소, 서비스 중단, 가격 집계 방식이 중요합니다. 한 서비스의 가격이 다른 곳에서 거래 가능했다는 뜻은 아닙니다. 오류는 수정할 수 있지만 변경 내역을 남겨야 합니다. 불편한 폭락을 지워 버리면 시험하는 질문 자체가 바뀝니다. [2]

프로그램은 주문이 언제, 얼마에, 어느 수량만큼 체결되는지 정해야 합니다. QuantConnect가 설명하는 체결 모델의 역할입니다. 차트가 어떤 가격에 닿았다고 주문 전량을 그 가격에 거래할 수 있었다고 단정할 수는 없습니다. 실제 주문은 일부만 체결될 수 있지만, 이 플랫폼의 기본 백테스트 모델은 전량 체결을 가정합니다. 가격이 얼마나 오래됐는지와 유동성, 즉 거래 상대를 찾을 수 있는지도 확인해야 합니다. [3]

Slippage는 예상 체결 가격과 실제 체결 가격의 차이로, 유리할 수도 불리할 수도 있습니다. QuantConnect는 이를 모델링하는 방법을 설명합니다. 수수료와 해당하는 경우 자금 조달비 등 다른 전략 비용도 포함해야 합니다. 이미 가격에 반영한 비용을 다시 빼면 안 됩니다. Slippage가 없다는 것은 가정이지 실제 시장에 대한 확인 결과가 아닙니다. 체결 조건을 악화시키고 비용을 높여 다시 시험하면 결론이 버틸 수 있는지 볼 수 있습니다. [4]

피터가 성공을 평가할 데이터로 규칙까지 조정한다면 답을 아는 시험을 보는 셈입니다. 먼저 오래된 데이터를 개발용으로, 이후 데이터를 검증용으로 정해야 합니다. scikit-learn의 TimeSeriesSplit은 이러한 시간 순서를 지키는 데 도움이 됩니다. 다만 데이터 준비 중 정보 누출, 겹치는 목표 기간, 반복 조정까지 저절로 막지는 못합니다. 검증 결과를 보고 규칙을 바꾸는 순간 그 데이터도 개발에 사용한 것입니다. [5]

여러 설정 중 하나가 우연히 훌륭해 보일 수 있습니다. 승자만 보여 주면 얼마나 많이 시도했는지 감춰집니다. Bailey et al.은 특정 과거의 특성에 전략을 과도하게 맞추는 Backtest Overfitting을 연구합니다. 가장 좋은 곡선뿐 아니라 시도한 매개변수, 기간, 시장을 기록해야 합니다. 저자들은 이 문제의 확률을 추정하는 별도 절차를 제시합니다. 단순한 데이터 분할은 이를 대신하지 못하며 이 글의 예시도 그 추정을 계산하지 않습니다. [1]

정직한 보고서는 데이터, 규칙 버전, 개별 거래, 비용, 손실 기간을 추적할 수 있게 합니다. 비교 전략도 비교 가능한 가정 아래 평가해야 합니다. 미국 NFA 역시 가상 성과에는 사후 지식의 이점이 있고 실제 금전 손실의 경험은 빠져 있다고 지적합니다. 해당 광고 규정은 정해진 회원 범위에 적용됩니다. 백테스트는 아이디어를 버리거나 더 살펴보는 데 도움이 됩니다. 계산이 정확해도 다른 시장이나 실제 거래에서 작동한다는 증명은 아닙니다. [6]

예시예시 · BT

손으로 검산할 수 있는 규칙

길이가 같은 기간 A, B, C, D로 구성한 자체 가상 예시입니다. 현금 1000 USD로 시작하며 미결제 포지션, 부채, 입출금은 없습니다. A 이전의 두 종가는 [100, 100] USD/BTC입니다. A부터 D까지 시가는 [101, 103, 102, 105] USD/BTC이고 종가는 [102, 101, 104, 103] USD/BTC입니다. 가장 최근에 확정된 종가가 그 이전 종가보다 높을 때만 기간 시작에 1 BTC를 사고, 같은 기간 끝에 전량 매도합니다. 따라서 신호는 [0, 1, 0, 1]이며 1은 거래, 0은 거래하지 않음을 뜻합니다. 명시된 가격에 전량 체결되고 스프레드와 Slippage는 없으며, 유일한 비용은 매수와 매도 각각의 수수료 0.1 USD라고 가정합니다. B에서는 103 USD에 사서 101 USD에 팔고, D에서는 105 USD에 사서 103 USD에 팝니다. 기간별 비용 차감 전 결과는 [0, -2, 0, -2] USD입니다. 네 차례의 매수·매도 체결에 총 0.4 USD가 들어가므로 순결과는 [0, -2.2, 0, -2.2] USD입니다. 전체 차감 전 결과는 -4 USD, 순결과는 -4.4 USD, 최종 현금은 995.6 USD입니다. 그래프는 각 기간의 순기여를 나타내며 계좌 잔액이나 수익 확률이 아닙니다. 이 예시는 정보 순서와 회계를 검산할 뿐, 실제 시장 데이터를 쓰거나 설정을 최적화하거나 미래를 예측하지 않습니다.

더 정확히 이해하려면 이 항목과 함께 다음도 읽어 보세요 Trading Plan, Trading Journal, Slippage, Overfitting, Walk-forward Analysis. 다음 항목에서도 이 글을 참조합니다 Technical analysis, OHLCV, Timeframe, Candlestick chart.

01백테스트가 수익이면 그 전략으로 돈을 벌 수 있나요?

선택한 과거 데이터와 특정 가정 아래 수익이 났다는 뜻일 뿐입니다. 정보 이용 가능 시점, 체결, 비용, 이전에 시도한 변형의 수를 확인하세요. 독립된 과거 데이터 검증조차 미래 성과를 보장하지 못합니다.

02수수료는 마지막에 한꺼번에 빼면 안 되나요?

모델에 맞고 도중의 비용이 사용 가능한 자금이나 판단을 바꾸지 않을 때만 가능합니다. 보통 비용은 해당 거래에 반영해야 합니다. 체결과 수수료 모두 누락이나 중복 계산 없이 기록해야 합니다.

DOC · 001Bailey et al. — The Probability of Backtest Overfitting1차 출처 DOC · 002QuantConnect — Research Guide문서 DOC · 003QuantConnect — Trade Fills: Key Concepts문서 DOC · 004QuantConnect — Slippage: Key Concepts문서 DOC · 005scikit-learn — TimeSeriesSplit문서 DOC · 006NFA — Use of Promotional Material Containing Hypothetical Performance Results문서
개정일: 1차 출처 우선 · 투자 조언이 아닙니다