Quant Trading Bot Devlog

Read in English

"[260924] 야간 실행 시각 조정과 보조 카드 상시운용 설계 검토"

검증해보니 시각 조정만으로는 원래 목표를 이루지 못했고, 보조 카드 상시운용 자문에서는 예전에 참고했던 성능 수치가 오독이었다는 것도 확인했습니다.

야간 실행 시각을 옮긴 이유

이 봇은 매일 밤 그날 나온 뉴스와 시황을 모아 다음 거래일 종목 분석을 준비합니다.

문제는 주말이나 휴장일에 나온 뉴스가 이 준비 과정에 제대로 반영되지 못한다는 점이었습니다. 실행 시각이 "마지막 거래일 저녁"으로 고정돼 있다 보니, 그 이후 휴장 기간에 나온 소식이 다음 실행 때 제대로 안 들어오는 경우가 있었습니다.

그래서 실행 시각을 "다음 거래일 전날 저녁"으로 옮기는 작업을 했습니다. 코드 수정과 함께, 감시 로직이 지연된 실행을 놓치던 회귀도 하나 발견해서 같이 고쳤습니다. 테스트도 전부 통과했고 커밋까지 마쳤습니다.

그런데 검증해보니 목적을 달성 못 했다

커밋을 마친 뒤 외부 자문을 받아 다시 코드를 추적해봤는데, 뜻밖의 사실을 발견했습니다.

실행 시각을 아무리 늦춰도, 뉴스를 모으는 쪽 로직이 애초에 "마지막 거래일까지"로 수집 범위를 딱 고정해두고 있었습니다. 이건 나중에 다른 지표와 비교할 때 시점이 어긋나지 않게 하려고 일부러 그렇게 설계해둔 것이었는데, 이번 목적과 충돌한다는 걸 놓치고 있었습니다.

결국 실행 시각을 옮겨도 휴장일 뉴스는 여전히 수집 범위 밖입니다. 지금 커밋으로 얻은 건 GPU 점유 시각이 뒤로 밀린 것과, 밀린 작업을 더 안정적으로 따라잡는 정도의 효과뿐이었습니다.

원래 원하던 "휴장일 뉴스 반영"을 이루려면 뉴스 수집 범위를 거래일 기준에서 따로 떼어내는 별도 작업이 필요하다는 걸 확인했습니다. 이 부분은 이번 주 범위를 벗어나는 작업이라 별도로 결정하기로 했습니다.

마침 이번 주는 연휴로 며칠 휴장이 이어지는 구간이라, 같은 날짜 데이터를 괜히 다시 돌리지 않기로도 정리했습니다. 이미 나온 산출물이 다른 검증에 쓰이고 있어서, 새 정보 없이 재실행하면 오히려 혼선만 생기기 때문입니다.

보조 카드를 상시 운용하려는 설계도 다시 들여다봤다

지금은 메인 카드 한 장이 매일 밤 도는 핵심 작업을 도맡고, 보조로 들인 카드는 가끔 실험용으로만 씁니다.

이 보조 카드를 상시로도 같이 굴리려는 목표가 있어서, 오늘 외부 자문을 두 건 받았습니다.

첫 번째는 잠금 구조 얘기였습니다. 지금은 어떤 카드를 쓰든 상관없이 전체를 하나로 묶어 잠그는 방식이라, 보조 카드만 쓰려는 작업도 메인 카드가 바쁘면 무조건 막힙니다.

카드별로 따로 잠그는 2단 구조로 바꾸면 이 문제는 풀리는데, 더 중요한 발견은 따로 있었습니다. 기존 코드 중 일부가 "메모리가 부족하면 관련 프로세스를 넓게 정리한다"는 방식으로 짜여 있어서, 자칫하면 메인 작업을 정리하는 과정에서 보조 카드 쪽 프로세스까지 함께 죽일 수 있는 지점이 있었습니다.

상시 운용을 시작하기 전에 이 부분부터 먼저 좁혀야 한다는 걸 확인했습니다.

두 번째는 보조 카드의 서빙 설정 얘기였습니다. 예전에 다른 가속 경로 조합이 더 빠르다고 참고했던 수치가 있었는데, 다시 원문을 추적해보니 사실 그 수치는 전혀 다른 상황(다른 모델이 동시 요청을 여러 개 받았을 때 성능이 무너진 사례)을 잰 것이었습니다.

원래 참고하려던 조합이 더 빠르다는 근거가 아니었던 셈입니다. 그래서 그 조합을 서두르기보다, 지금 쓰는 빌드 자체가 두 달 넘게 업데이트를 안 받은 상태라는 걸 먼저 바로잡기로 했습니다. 최신 소스로 다시 빌드하는 게 우선순위로 정리됐습니다.

두 자문 모두 설계와 방향만 정리된 상태고, 실제 구현은 아직 시작 전입니다.

그 외

품질을 의심받던 로컬 모델 하나를 실제 프로덕션 모델과 같은 조건으로 다시 채점해 비교하는 작업도 백그라운드로 돌리기 시작했습니다. 안전하게 재생하는 도구에 그 모델도 태울 수 있게 기능을 넓혔고, 소규모 검증을 통과한 뒤 본 비교를 진행 중입니다.

결과는 다음에 정리하겠습니다.

성능 측정 도구에서 버그도 하나 잡았습니다. 실행 이름에 마침표가 들어가면 재등록 과정이 조용히 죽는 문제였는데, 이번에 처음 실전에서 걸려서 바로 고쳤습니다.

휴장일에 실거래 타이머가 괜히 경보를 울리는 사소한 문제도 하나 확인했습니다. 안전장치 자체는 정상 작동해서 실제 주문에는 영향이 없지만, 경보만 시끄럽게 울리는 상태라 알림 쪽을 조용히 넘어가도록 고칠 계획입니다.

앞으로

오늘 두 건 다 비슷한 패턴이었습니다. 코드 수정과 테스트까지 다 끝낸 뒤에도, 실제로 원했던 효과가 나는지 한 번 더 추적해보니 생각과 다른 지점이 나왔습니다.

당장 커밋을 되돌릴 만큼 나쁜 결과는 아니었지만, "고쳤다"와 "원하던 걸 이뤘다"가 항상 같은 말은 아니라는 걸 다시 확인한 하루였습니다.