← All Collections
⚡11 parts

High-Performance Backtest Engines

How to build a backtest engine that runs hundreds of times faster without changing a single PnL number — data layout, caching, adaptive resolution, and architecture, from first speedups to production internals.

  1. 01
    백테스트 엔진 속도 사다리: 노트북 CPU에서 298배, 마지막 트레이드까지 동일한 PnL
    Jun 26, 2026#algotrading

    백테스트 엔진 속도 사다리: 노트북 CPU에서 298배, 마지막 트레이드까지 동일한 PnL

    동일한 80개 조합 파라미터 스윕을 다섯 가지 방식으로 구현하고 모두 동일한 PnL을 내는 것을 검증했습니다: pandas rolling.apply는 69.9초, numpy는 3.1초, numba는 2.0초, 병렬 numba는 0.23초 — Apple M2 Max에서 하드웨어 변경 없이 측정된 298배 속도 향상이며, 유능한 벡터화 기준선 대비로도 여전히 약 13배입니다. 각 단계에서 실제로 얻는 것이 무엇인지, GPU가 왜 빠진 조각이 아닌지, 그리고 대규모 파라미터 탐색의 진짜 병목이 어디에 있는지.

  2. 02
    프레임워크 세금: 백테스트 라이브러리가 순진한 pandas 루프보다 느릴 때
    Jul 2, 2026#알고트레이딩

    프레임워크 세금: 백테스트 라이브러리가 순진한 pandas 루프보다 느릴 때

    8개의 백테스트 엔진을 완전히 동일한 파라미터 스위프로 벤치마크했다 — 150k 바, 80개의 HMA 크로스 조합, 거래 수 패리티를 2707로 고정. 가장 인기 있는 이벤트 기반 프레임워크 중 두 개가 손으로 짠 pandas 루프보다 느린 결과를 냈고, 벡터화/컴파일 엔진은 같은 작업을 약 13,000배 빠르게 실행했다. 인기 라이브러리가 애초에 분할 상각하도록 만들어지지 않은, 바당 오버헤드에 대한 연구.

  3. 03
    집계 Parquet 캐시: 멀티 타임프레임 백테스트를 수백 배 빠르게 하는 방법
    Mar 16, 2026#algotrading

    집계 Parquet 캐시: 멀티 타임프레임 백테스트를 수백 배 빠르게 하는 방법

    분봉에서 타임프레임과 지표를 사전 계산하고 parquet에 저장하여 불필요한 재계산 없이 대량 전략 테스트에 활용하는 방법.

  4. 04
    이축 파라미터 공간: 왜 스윕의 대부분은 거의 공짜여야 하는가
    Jul 3, 2026#알고리즘 트레이딩

    이축 파라미터 공간: 왜 스윕의 대부분은 거의 공짜여야 하는가

    모든 파라미터가 탐색 비용이 같은 것은 아니다. 전략의 파라미터는 비싼 축(지표 — 전체 시계열에 대해 재계산)과 싼 축(의사결정 임계값 — 미리 계산된 시그널에 대한 O(n) 패스)으로 나뉜다. 지표는 임계값에 대해 불변이므로 한 번만 계산한 뒤 초당 약 5,600개 설정 속도로 수천 개의 임계값 조합을 스윕할 수 있다 — 설정마다 재계산하는 것보다 약 1,600배 저렴하다. 차원의 저주를 다시 가격 매기다.

  5. 05
    어댑티브 드릴다운: 분봉에서 원시 틱까지 가변 해상도 백테스트
    Mar 17, 2026#algotrading

    어댑티브 드릴다운: 분봉에서 원시 틱까지 가변 해상도 백테스트

    어댑티브 데이터 해상도가 백테스트를 가속화하고 스토리지를 절약하는 방법: 가격이 크게 움직이거나 거래량이 급증한 곳에서만 1m에서 1s, 100ms, 원시 틱으로 드릴다운하며, 전체 이력 시리즈를 고해상도로 만들 필요가 없습니다.

  6. 06
    충실도 게이트(Fidelity Gate): 저비용 프록시가 고비용 평가와 같은 순위를 매기지 않는 한, 성긴 것에서 정밀한 것으로(Coarse-to-Fine) 진행하는 백테스팅은 당신을 더 빨리 속인다
    Jul 5, 2026#알고리즘 트레이딩

    충실도 게이트(Fidelity Gate): 저비용 프록시가 고비용 평가와 같은 순위를 매기지 않는 한, 성긴 것에서 정밀한 것으로(Coarse-to-Fine) 진행하는 백테스팅은 당신을 더 빨리 속인다

    드릴다운/다중 충실도 탐색(ASHA, successive halving, Hyperband)은 수천 개의 설정(config)을 저렴하게 걸러내고, 살아남은 것만 비용이 큰 전체 평가로 승격시킨다. 이는 실질적인 속도 향상이지만, 저충실도 순위가 고충실도 순위와 어긋나면 조용히 무너진다. 우리는 폴드 간 순위 상관관계를 측정했다. 폴드가 1개일 때 스피어만(Spearman) ρ는 0.03까지 낮아질 수 있으며(거의 무작위로 순위를 매기는 수준), 폴드가 누적됨에 따라 0.43, 0.67, 0.78, 0.91로 상승한다. 해결책은 하나의 필수 게이트다. 먼저 ρ(저렴한 것, 전체)를 측정하고, ρ ≥ 0.5가 되는 첫 번째 단계로 최소 충실도를 자동으로 높이는 것이다.

  7. 07
    무작위 탐색 vs 스마트 탐색: 교차점은 알고리즘이 아니라 평가 비용에 있다
    Jul 4, 2026#알고리즘 트레이딩

    무작위 탐색 vs 스마트 탐색: 교차점은 알고리즘이 아니라 평가 비용에 있다

    백테스트 한 번이 저렴할 때는 단순히 뒤섞은 Sobol 시퀀스가 원시 처리량에서 모든 "스마트" 샘플러를 압도한다 — TPE, CMA-ES, ASHA는 파이썬 ask/tell 세금을 물어 속도가 20배 떨어지고, 동일한 실제 소요 시간에 훨씬 적은 지점을 평가하여 패배한다. 각 평가를 비싸게 만들면(다중 타임프레임 + walk-forward 폴드) 이 교차점은 뒤집힌다. 우리는 두 체제를 모두 측정했고, 폴드 순위 충실도(ρ@1이 0.03→0.43으로 상승)가 왜 가지치기가 효과를 보기 위한 전제 조건인지 살펴본다.

  8. 08
    좌표 하강법 vs 베이지안 최적화: 어느 쪽이 더 좋은 파라미터를 찾는가
    Mar 11, 2026#algotrading

    좌표 하강법 vs 베이지안 최적화: 어느 쪽이 더 좋은 파라미터를 찾는가

    12개 이상의 파라미터에서 전수 탐색이 불가능한 이유, 좌표 하강법이 상호작용을 놓치는 이유, 그리고 TPE 샘플러를 사용한 Optuna가 500회 반복으로 OAT가 96회에서 찾지 못하는 것을 찾는 방법. 실용적인 코드 예제, 샘플러 비교, 다목적 최적화.

  9. 09
    GPU 정밀도 함정: Apple Metal에서 fp32 백테스트가 조용히 쓰레기 값을 반환하는 방법
    Jul 6, 2026#알고리즘 트레이딩

    GPU 정밀도 함정: Apple Metal에서 fp32 백테스트가 조용히 쓰레기 값을 반환하는 방법

    Apple의 Metal GPU에는 float64가 없습니다. 벡터화된 백테스트를 순진하게 이식하면, 유혹적인 접두사 합(prefix-sum) WMA가 fp32에서 오버플로를 일으킵니다 — 최대 상대 오차 211배 — 그런데도 코드는 멈추지 않고 그럴듯한 숫자를 계속 반환합니다. 해법은 더 높은 정밀도가 아니라 다른 방식의 합산입니다: 직접 윈도우 컨볼루션은 fp32에서 8×10⁻⁷까지 안전하며 단일 스레드 numba보다 55.9배 빠릅니다. 이 함정의 정체, 그 산술적 원인, 그리고 여러분이 거기 빠지지 않았음을 증명하는 방법을 다룹니다.

  10. 10
    GPU가 값어치를 하는 순간: 파라미터 스윕의 루프라인, 헤드라인 167배는 사실 27배 알고리즘 곱하기 6.2배 하드웨어다
    Jul 7, 2026#algotrading

    GPU가 값어치를 하는 순간: 파라미터 스윕의 루프라인, 헤드라인 167배는 사실 27배 알고리즘 곱하기 6.2배 하드웨어다

    GPU가 CPU에 대해 갖는 우위는 배치 크기와 함께 커집니다 — 우리의 멀티 타임프레임 지표 사전 계산에서 호출당 콤보 하나일 때 54.5배부터 예순한 개일 때 359.6배까지 — 작은 스윕은 커널 실행과 전송 오버헤드를 상각할 수 없기 때문입니다. 헤드라인 167배를 CPU에도 도움이 되는 27배의 알고리즘 승리와 6.2배의 하드웨어 승리로 분해하고, 진짜 GPU 대 최선의 CPU 우위는 단일 타임프레임에서 겨우 3.2배, 멀티에서 6.2배임을 보이며, GPU를 사들일 값어치가 생기려면 스윕이 얼마나 넓어야 하는지에 대한 결정 가이드를 제시합니다.

  11. 11
    IPC 세금: 백테스트 엔진을 소켓 뒤에 두면 13%를 잃는다 — 하지만 그중 거의 전부는 소켓 탓이 아니다
    Jun 30, 2026#algotrading

    IPC 세금: 백테스트 엔진을 소켓 뒤에 두면 13%를 잃는다 — 하지만 그중 거의 전부는 소켓 탓이 아니다

    numba 백테스트 커널을 한 줄 한 줄 Rust로 이식하고, 프로세스 경계 너머로 네 가지 방식으로 호출했습니다. 동치성 게이트가 마지막 트레이드까지 동일한 PnL을 확인해 줍니다. 1.2 MB 가격 시리즈 전체를 Unix 소켓으로 보내는 데 드는 비용은 ~2 ms — 작업 전체의 약 0.1%입니다. 동일한 페이로드를 JSON으로 인코딩하면 raw bytes보다 1348배 더 비싸고, 콤보당 수다형(chatty) 호출은 데이터를 80번 다시 실어 보내며, 바(bar) 단위 호출 패턴은 2.0초짜리 작업에서 순수 IPC에만 2.1초를 지불하게 됩니다. 경계는 저렴합니다. 세금은 그것을 건너는 방식에 있습니다.