Eugen Soloviov
Trading-systems engineer
Trading-systems engineer building bots since 2017: cross-exchange arbitrage (connected up to 30 venues), cointegration-based pairs arbitrage across spot and futures, scalping, news and sentiment-driven strategies, trend algorithms, and portfolio management and balancing algorithms. Also builds sub-millisecond order execution, big-data warehouses, backtesting engines, AI agents, and trading interfaces (incl. open-source profitmaker.cc). Stack: JS/TS, Python, Rust/Zig/Go, DevOps, backend, frontend, architecture.
Articles
충실도 게이트(Fidelity Gate): 저비용 프록시가 고비용 평가와 같은 순위를 매기지 않는 한, 성긴 것에서 정밀한 것으로(Coarse-to-Fine) 진행하는 백테스팅은 당신을 더 빨리 속인다
드릴다운/다중 충실도 탐색(ASHA, successive halving, Hyperband)은 수천 개의 설정(config)을 저렴하게 걸러내고, 살아남은 것만 비용이 큰 전체 평가로 승격시킨다. 이는 실질적인 속도 향상이지만, 저충실도 순위가 고충실도 순위와 어긋나면 조용히 무너진다. 우리는 폴드 간 순위 상관관계를 측정했다. 폴드가 1개일 때 스피어만(Spearman) ρ는 0.03까지 낮아질 수 있으며(거의 무작위로 순위를 매기는 수준), 폴드가 누적됨에 따라 0.43, 0.67, 0.78, 0.91로 상승한다. 해결책은 하나의 필수 게이트다. 먼저 ρ(저렴한 것, 전체)를 측정하고, ρ ≥ 0.5가 되는 첫 번째 단계로 최소 충실도를 자동으로 높이는 것이다.
무작위 탐색 vs 스마트 탐색: 교차점은 알고리즘이 아니라 평가 비용에 있다
백테스트 한 번이 저렴할 때는 단순히 뒤섞은 Sobol 시퀀스가 원시 처리량에서 모든 "스마트" 샘플러를 압도한다 — TPE, CMA-ES, ASHA는 파이썬 ask/tell 세금을 물어 속도가 20배 떨어지고, 동일한 실제 소요 시간에 훨씬 적은 지점을 평가하여 패배한다. 각 평가를 비싸게 만들면(다중 타임프레임 + walk-forward 폴드) 이 교차점은 뒤집힌다. 우리는 두 체제를 모두 측정했고, 폴드 순위 충실도(ρ@1이 0.03→0.43으로 상승)가 왜 가지치기가 효과를 보기 위한 전제 조건인지 살펴본다.
이축 파라미터 공간: 왜 스윕의 대부분은 거의 공짜여야 하는가
모든 파라미터가 탐색 비용이 같은 것은 아니다. 전략의 파라미터는 비싼 축(지표 — 전체 시계열에 대해 재계산)과 싼 축(의사결정 임계값 — 미리 계산된 시그널에 대한 O(n) 패스)으로 나뉜다. 지표는 임계값에 대해 불변이므로 한 번만 계산한 뒤 초당 약 5,600개 설정 속도로 수천 개의 임계값 조합을 스윕할 수 있다 — 설정마다 재계산하는 것보다 약 1,600배 저렴하다. 차원의 저주를 다시 가격 매기다.
프레임워크 세금: 백테스트 라이브러리가 순진한 pandas 루프보다 느릴 때
8개의 백테스트 엔진을 완전히 동일한 파라미터 스위프로 벤치마크했다 — 150k 바, 80개의 HMA 크로스 조합, 거래 수 패리티를 2707로 고정. 가장 인기 있는 이벤트 기반 프레임워크 중 두 개가 손으로 짠 pandas 루프보다 느린 결과를 냈고, 벡터화/컴파일 엔진은 같은 작업을 약 13,000배 빠르게 실행했다. 인기 라이브러리가 애초에 분할 상각하도록 만들어지지 않은, 바당 오버헤드에 대한 연구.
백테스트 과적합 확률: 당신의 서치는 동전 던지기를 이겼는가?
디플레이티드 샤프 비율은 승리한 전략의 값을 매기고, PBO는 그것을 골라낸 서치의 값을 매깁니다. 조합적 대칭 교차검증은 1000x200 성과 행렬에 대해 C(16,8) = 12,870번의 훈련/테스트 분할을 실행하고 묻습니다: 인샘플 승자가 아웃오브샘플에서 하위 절반에 떨어지는가? 거의 모두가 놓치는 함정 — PBO의 null은 1이 아니라 0.5입니다. 제로 엣지 전략 200개에서 최고 인샘플 연율화 샤프 1.98은 아웃오브샘플에서 0.06으로 무너지고 PBO = 0.476: 동전 던지기, 완전한 과적합입니다. 진짜 엣지(연율화 샤프 2.38)를 심으면 PBO는 0.001로 떨어지고, 인샘플 3.73은 아웃오브샘플 2.34로 살아남습니다. 순수한 랜덤 워크 위의 이동평균 그리드 역시 아웃오브샘플 스킬이 전혀 없습니다 — 60개 행렬에 걸쳐 평균낸 PBO 0.463은 통계적으로 null과 구별되지 않습니다 — 그리고 하나의 대표 행렬에서는 그 신기루가 생생합니다: 최고 인샘플 샤프 2.33이 아웃오브샘플 중앙값 -0.22로 무너지고, PBO 0.573, 손실 확률 63%.
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초를 지불하게 됩니다. 경계는 저렴합니다. 세금은 그것을 건너는 방식에 있습니다.
디플레이티드 샤프 비율: 백테스트 '승자' 중 다중 검정에서 살아남는 것은 몇 개인가?
파라미터 서치는 운을 제조하는 기계입니다. 순수한 노이즈에서 — 진짜 엣지가 전혀 없는 전략 1,000개 — 최고 연간 샤프는 평균 1.63이고, 나이브 유의성 검정은 100%의 확률로 발견을 선언합니다. 통제된 실측값을 구축하여 디플레이티드 샤프 비율, Harvey-Liu 헤어컷, White의 Reality Check가 정직함을 회복시킨다는 것을 보입니다: 거짓 발견은 1.000에서 0.001-0.057로 떨어지고, 노이즈 천장 위의 진짜 엣지는 검정력 ~1로 유지됩니다 — 그리고 상관된 그리드라는 하나의 진짜 함정에서는 raw DSR이 과잉 디플레이션을 일으키며, 판정은 하나가 아니라 유효 시행 수 추정치 전체 밴드에 걸쳐 읽어야 합니다.
목적함수 설계: 최적화하는 지표가 전략을 은밀하게 고른다
"최선"의 전략을 찾으려면 먼저 "최선"이 무엇인지부터 정의해야 합니다 — 그리고 그 스칼라가 은밀하게 승자를 결정합니다. 알려진 엣지를 가진 합성 데이터(600개 시드, T=2000, 80개 임계값)에서, 나이브한 거래당 샤프는 복권을 승자로 옹립합니다: 56%의 시드에서 노출도 5% 미만인 승자를 고르고 57%에서는 퇴화합니다 — 가장 극단적인 시드에서는 8건의 거래가 인샘플 샤프 21.09를 기록했다가 아웃오브샘플에서 0.13으로 무너집니다. 정직한 수리법은 거의 시시할 정도입니다: 전체 타임라인에서 측정하면 결코 퇴화하지 않습니다(아웃오브샘플 1.71). 거래 수(conf_k) 축소와 노출 하한선으로 거래당 지표를 사후 보강할 수 있지만, 완전히 수리해도 전체 타임라인 샤프와 같아질 뿐입니다(1.70 대 1.71) — 결코 그것을 넘어서지 못합니다. 굿하트의 법칙, 백테스트 안에서, 통제된 실측값과 함께.
미래 참조 편향(Look-Ahead Bias): 한 바(bar)의 실수가 순수한 노이즈에서 Sharpe 15를 만들어내는 방법
백테스트를 조용히 부풀리는 미묘한 미래 참조 누출들에 대한 통제된 연구. 실제 엣지가 전혀 없는 상태에서, 동일 바 체결은 순수한 노이즈만으로 연율화 Sharpe +14.8을 만들어내고, 한 바 앞선 지표 엿보기는 +4.8을 만들어냅니다. 누출의 분류 체계, 측정된 규모, 그리고 돈을 잃기 전에 각 누출을 탐지하는 방법.
백테스트 엔진 속도 사다리: 노트북 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가 왜 빠진 조각이 아닌지, 그리고 대규모 파라미터 탐색의 진짜 병목이 어디에 있는지.
researcher: 사람과 AI 에이전트를 위한 검색 가능한 퀀트 리서치 아카이브
researcher.marketmaker.cc를 어떻게 구축했는가 — arXiv 논문, GitHub 저장소, 퀀트 블로그, TradingView Pine 스크립트를 아우르는 퀀트 리서치를 전체 텍스트로 검색할 수 있는 통합 아카이브. 사람은 직접 둘러보고 AI 에이전트는 MCP를 통해 질의한다.
algo-investor-skills: 사기 방지형 투자자 제안서를 만들어 주는 Claude Code 스킬
algo-investor-skills를 깊이 들여다본다 — 알고트레이딩 전략을 측정된 원시 사실에서 감사를 거친 정직 우선 투자자 제안서로 끌어올리는 Claude Code 스킬 모음이다. 조합 가능한 여섯 개의 스킬, 금융 모델 엔진, 독립 검증 증빙 패키지, 그리고 어떤 숫자도 결코 조작하지 않는 필수 회의적 투자자 감사 게이트로 구성된다.