한 줄로
자동매매 봇을 두 AI 에이전트(Codex와 Bunny)에게 번갈아 리뷰시켰다. 지적은 원장에 새 항목만 적고, 각 항목은 근거를 직접 확인해 판정했다. 라운드 3~9를 돌리는 동안 실주문 API(8502)와 DB(5432)가 모든 네트워크 경로에 열려 있던 것을 찾아 127.0.0.1에서만 접속되게 막았다. 반대로 Bunny의 주장 9건은 로그·DB·코드로 반박됐다.
교차 리뷰 루프
여기서 말하는 교차 리뷰 루프는 세 부분으로 이뤄진다.
-
리뷰어 둘: 작업 워크스페이스에 Codex 페인(
wS:p5)과 opencode 페인(wS:p6)을 새로 띄워 같은 코드를 두고 토론하게 했다. -
원장: 지적 사항은
.omc/review-ledger.md에 적는다. 이미 적힌 것은 다시 적지 않고 새 항목만 추가한다. 이 파일은 커밋하지 않았다. - 판정: 리뷰어의 말을 그대로 받아들이지 않는다. 항목마다 근거를 직접 확인해 판정한다.
종료 조건은 단순하다. 두 에이전트가 모두 ‘새 항목 없음’이라고 답하면 끝낸다.
실제로 겪은 것
첫 프롬프트에 Codex가 업데이트됐다
첫 프롬프트가 업데이트 안내 화면에 들어갔다. 그 바람에 Codex가 0.160.0에서 0.160.1로 의도치 않게 업데이트됐다.
라운드 3~9, 그리고 반박된 주장 9건
라운드 3부터 9까지 진행했다. 두 에이전트가 모두 ‘새 항목 없음’이라고 답한 시점에 루프를 끝냈다.
Bunny가 내놓은 주장 중 9건은 로그·DB·코드로 확인한 결과 반박됐다. 그중 4건은 Bunny 스스로 철회했다. 리뷰어가 낸 항목을 전부 고칠 일로 받지 않고, 근거를 대조해 거른 것이다.
고친 것 (auto-trading PR #93~#107, cron-job PR #39~#41)
남은 항목은 PR로 고쳐 머지하고 배포했다.
보안
- 실주문 API(8502)와 DB(5432)를 127.0.0.1에서만 접속되게 막았다. 둘 다 원래 모든 네트워크 경로에 열려 있었다.
- 로그에 봇 토큰이 찍히지 않게 가렸다.
엔진·손절
- 개장 첫 봉 오판과 장외 체결로 만든 봉을 제거했다(#94).
- 손절 상태 파일을 원자적으로(저장 도중 깨지지 않게) 저장한다.
- 계좌 조회가 실패하면 실시간 매매 시작을 보류한다.
- 시세 재연결 중에 같은 종목을 두 번 사던 틈을 막았다.
리스크
- 한도를 바꾸면 실행 중인 엔진에 바로 반영된다.
- 일일 한도 복원에 실패한 날에는 신규 매수를 잠근다.
배포
- 코드 폴더를 운영 컨테이너에 직접 연결하던 것을 끊었다.
- 엔진이 실제로 떴는지 헬스체크하고, 실패하면 직전 이미지로 자동 롤백한다.
- 꺼진 뉴스 레이어 때문에 기동이 2분 넘게 걸리던 문제를 해결했다.
기록·백업
- 필터 차단 사유를 RSI·거래량·MACD로 나눠 기록한다.
- 3분봉에 KST 시간대를 넣었고, 15분봉 수집은 중단했다.
- 평일 16:10에 로컬 백업 폴더로 백업한다(14일 보관). 다른 DB에 복원해 행 수가 일치하는 것까지 확인했다.
리뷰 항목이어도 바꾸지 않은 것
전략에 관한 항목은 근거가 없어서 그대로 뒀다.
- 등급별 매수 비중: A·B 등급은 15% 상한에 걸리고, C 등급은 평균 9.6%다. 상한을 올릴 근거가 없다.
- 개장 직후 매도: 전략 매도는 원래 09:18 이후에만 돈다.
- 합의 보정 감쇠: 이 보정을 없애 보는 반사실 계산(그 보정이 없었다면 어땠을지 다시 계산하는 것)에서도 예측력이 좋아지지 않았다.
- 고정 손절 백테스트: 판정할 수 없었다. 매수 기준 0.25로는 2년 동안 거래가 0건이었다.
작업 중 낸 실수 2건
둘 다 발견한 뒤 바로 바로잡았다.
- DB 컨테이너를 다시 만들 때 셸이 명령을 잘못 해석해 15:31~15:34에 DB가 약 3분 꺼졌다. 장 마감 후였고 데이터는 그대로다.
- 백업 plist가 없는 스크립트를 가리키고 있었다. 이건 Codex가 최종 점검에서 찾았다. 고친 뒤 예약 경로로 실제 실행해 동작을 확인했다.
마무리 점검
17:41에 다시 점검했다. 엔진은 healthy였고, 포트는 로컬에서만 열려 있었고, DB 오류는 0건이었다.
남은 것
- API 로그인 인증은 아직 붙이지 않았다.
- #94, #102, #105, #106, #108은 다음 장중에 실제 동작을 확인해야 한다.