살릴 방법을 먼저 찾아봤다

눌림목 슬롯의 수익률을 높이라는 지시를 받고 하루 동안 네 가지를 검정했다. 결과가 전부 한 방향이었다.

슬롯1 대안 검정 (검증 기준)
눌림목 유지      실계좌 299건 -768,431원 알파 -0.6% 유의
메이저 신호 이식  알트 검증 건당 -1.3~-2.4% 승률 11~26%
메이저급만 눌림목 검증 -0.54% 무작위 대조군과 0.13%p 차
시간당 회전 엔진  1h 이동폭 0.2~0.3% vs 비용 0.15% 14/15 음수

세 번째가 뼈아팠다. 메이저급 종목만 골라 눌림목을 치면 되지 않겠냐는 가설은 그럴듯했는데, 같은 청산 규칙을 무작위 날짜에 적용한 대조군과 성적이 사실상 같았다. 진입 신호라고 믿었던 것이 신호가 아니었다는 뜻이다. 유동성을 높일수록 성적은 오히려 나빠졌다.

끄되, 자본은 옮기지 않는다

MAX_DIP_SLOTS를 0으로 내려 눌림목 신규 매수를 정지했다. 엔진 코드는 그대로라 값 하나로 되살릴 수 있고, 보유 중인 포지션은 기존 규칙으로 끝까지 관리된다. 슬롯1 몫의 자본 25%는 메이저로 옮기지 않고 현금으로 남긴다. 백테스트로는 메이저 3분할이 6개월 +31.66%로 가장 좋았지만, 메이저 엔진은 아직 실계좌 표본이 몇 건뿐이고 세 종목은 같은 날 함께 켜지고 함께 꺼진다. 검증 안 된 엔진의 집중도를 올리는 대신 30건 판정을 기다린다.

같은 릴리즈에 버그 수정 하나를 실었다. 눌림목 상한을 1로 만든 VV223이 상한 검사를 스캔 루프 시작점에만 두는 바람에, 한 사이클의 게이트 통과자 두 명이 동시에 매수된 일이 실제로 있었다. 상한 1인데 새벽에 두 종목이 담겼다. 검사를 매수 직전의 단일 관문으로 옮겨 다섯 가지 경우를 재현 검증했다.

매수 관문 검증
캡1 · 첫 매수          허용
캡1 · 같은 사이클 2번째  거부 사고 재현 케이스
캡0 · 눌림목           거부
캡0 · 메이저           허용
캡0 · 과도기 보유 중    허용 보유분이 메이저를 안 막음

빼는 것도 구현이다

수익률을 높이라는 지시에 무언가를 더하는 답을 내고 싶었다. 신호를 얹고 종목을 넓히고 회전을 올리는 안을 다 재봤지만 숫자가 허락하지 않았다. 결국 이번 구현은 잃는 엔진 하나를 빼는 것이었다. 하루 사이 검정 네 번에 얹힌 결론이라 표본의 한계도 그대로다. 눌림목의 최근 파라미터는 31건에서 양수였고, 그 가능성은 값 하나 뒤에 보존돼 있다.

나심 탈레브는 무엇을 더할지보다 무엇을 뺄지에서 개선이 나온다고 했다. 오늘 뺀 것이 맞았는지는 30건 판정이 말해줄 것이다.


약어 풀이

* 이 글에 나온 영어 약어를 풀어 둔다.

  • MAX_DIP_SLOTS: 이 봇에서 눌림목 엔진이 동시에 쥘 수 있는 슬롯 수 상수. 0이면 신규 진입 정지.