AI

Claude 자가개선 루프는 65번 중 5번만 반영됐다

반영된 커밋은 전부 전략 수치 조정이었고, 하나는 사람이 정한 손절 하한을 되돌렸다. 그래서 자동매매 봇의 자가개선을 PR 전용으로 바꿨다 (#120)

한 줄로

자동매매 봇에 붙여 둔 자가개선 루프는 65번 돌아서 끝까지 반영된 것이 5번(8%)뿐이었다. 그 5번도 전부 전략 수치를 조정한 커밋이었고, 그중 하나는 사람이 일부러 정한 값을 되돌렸다. 그래서 루프가 직접 배포하지 못하게 하고, 검증을 통과하면 PR만 만들도록 바꿨다(#120).

자가개선 루프와 “사람 승인” 기준

여기서 자가개선 루프는 Claude가 매매 엔진의 결함이나 개선점을 찾아 코드를 고치고, 검증을 통과하면 반영까지 하는 무인 루프다. 21:05에는 결함을 탐지하고, 21:35에는 무인 실행이 돈다.

이번에 자동화 원칙을 한 문장으로 정했다.

돈이 나가거나 외부로 나가는 순간에는 사람이 승인한다.

새 자동화는 이 원칙에 따라 네 가지로 점검한다.

  1. 입력이 기록되는가
  2. 결과를 사람이 확인할 수 있는가
  3. 되돌릴 수 있는가
  4. 돈이나 외부로 나가는 순간에 사람의 승인이 있는가

이 기준에 걸린 곳이 두 군데였다. 하나는 플레이리스트 봇의 유튜브 자동 업로드고, 다른 하나가 이 글에서 다루는 자동매매 봇의 자가개선 루프다. 매매 코드를 고치고 배포하는 일은 곧 돈이 나가는 방식을 바꾸는 일인데, 그 사이에 사람이 없었다.

실적: 65번 중 5번

원칙만으로 결정하지 않고 지난 실적을 먼저 봤다.

  • 65회 실행 중 끝까지 반영된 것은 5회(8%) 였다.
  • 반영된 커밋은 전부 전략 수치 조정이었다.
  • 중요한 수정(#50·#77·#107)은 모두 사람이 직접 만든 PR이었다.

루프가 실제로 해낸 일은 결함 수정이 아니라 파라미터 손질이었다. 정작 중요한 수정은 루프 바깥에서 사람이 했다.

c25b173: 사람이 정한 값을 되돌린 커밋

수치 조정 중 하나인 c25b173은 두 값을 바꿨다.

항목 이전 c25b173 이후
손절 하한 6% 5%
하락장 문턱 0.70 0.40

두 값 모두 사람이 정해 둔 것이었는데 루프가 되돌렸다. 루프가 고칠 수 있는 범위와 사람이 고정한 범위를 나누는 장치가 없었다는 뜻이다. 앞의 네 가지 점검에 대 보면, 이 변경은 사람의 승인 없이 매매 규칙에 반영됐다.

바꾼 것 (#120)

  • 검증을 통과하면 auto-improve/<시각> 브랜치에 PR만 만든다.
  • 머지와 ./deploy.sh는 사람이 한다.
  • 루프에 있던 git clean -fd를 없앴다.
  • .omc/는 정리 대상에서 뺐다.
  • 원장은 147행까지 복구했다.

이렇게 하면 결과를 사람이 확인할 수 있고, 마음에 들지 않으면 PR을 닫으면 된다. 네 가지 점검 중 “사람이 확인할 수 있는가”, “되돌릴 수 있는가”, “사람 승인이 있는가”가 PR 하나로 해결된다.

추세 필터에 관해서도 정정할 것이 하나 있었다. 추세 필터 완화(close >= MA20 × 0.98)가 #119 브랜치에 섞여 들어가 있었다. 이 완화는 유지하기로 했고, 섞여 들어간 사실은 PR 설명에 정정으로 적었다.

4주 뒤 판단 기준

PR 전용으로 바꾼 것이 끝은 아니다. 4주 동안 PR 병합률을 본다.

  • 병합된 PR이 0~1건이면 Claude가 코드를 고치는 부분은 끄고, 21:05 결함 탐지만 남긴다.
  • 전략 개선은 루프에 맡기기 전에 엣지 재검정이 먼저다.

판단 시점은 11월 초다. 수치를 이리저리 바꿔 보는 것은 전략에 실제 엣지가 있는지 확인한 다음에 할 일이라고 봤다.

아직 남은 구멍

바꾼 당일 밤 21:35 무인 실행이 두 가지 수치 변경을 제안했다.

  • volume_filter_mult 0.8 → 0.5
  • trailing_stop_pct 0.05 → 0.07

이번에도 수치 조정이다. 그리고 이 실행의 요청 프롬프트에는 아직 “사람 확인 없이 자동 배포” 라는 문구가 남아 있다. 브랜치와 배포 단계는 PR 전용으로 막았지만 루프에 주는 지시문은 옛 상태 그대로다. 실행 경로와 프롬프트를 둘 다 고쳐야 정책이 일관되게 적용된다.

정리

  • 자가개선 루프는 65회 중 5회(8%)만 반영됐고, 반영분은 전부 수치 조정이었다.
  • 중요한 수정(#50·#77·#107)은 사람이 만든 PR이었고, c25b173은 사람이 정한 손절 하한과 하락장 문턱을 되돌렸다.
  • “돈이 나가는 순간에는 사람이 승인한다”는 기준에 맞춰 루프는 auto-improve/<시각> 브랜치에 PR만 만들고, 머지와 ./deploy.sh는 사람이 맡는다.
  • 4주 동안 병합률이 0~1건이면 코드 수정은 끄고 21:05 결함 탐지만 남긴다.
  • 21:35 실행 프롬프트에 남은 “사람 확인 없이 자동 배포” 문구는 아직 고치지 않았다.