프로젝트

AI Trading Bot 개발기 — Day 4

sewoo-jjang 2026. 3. 24. 00:49

Claude API 연동 시작

이번 작업의 출발점은 트레이딩 LLM을 OpenAI 계열에서 Claude API로 바꾸는 것이었다. 기존에는 gpt-4.1-mini를 사용하고 있었지만, 뉴스와 시장 맥락을 조금 더 안정적으로 해석할 수 있는지 보기 위해 Anthropic Claude Sonnet 계열을 붙여보기로 했다. (실제로 클로드가 투자관련에서 수익률을 가장많이 올렸다는 발표도 있기때문에..)

처음에는 연결이 순조롭지 않았다. API 키는 정상인데도 400, 404 에러가 반복됐고, 문제를 추적해보니 콘솔에서 보이는 모델 이름과 실제 API에서 요구하는 모델 ID가 다르다는 점이 원인이었다. 크레딧 상태와 모델 식별자까지 하나씩 맞춰가며 설정을 정리한 뒤에야 비로소 fallback이 아니라 실제 Claude 응답이 판단에 들어오기 시작했다.

Claude 토큰 사용량 최적화

최적화를 하고 토근 사용량이 눈에띄게 줄어들었음을 확인할 수 있다.

Claude로 바꾸고 나서 바로 느껴진 문제는 토큰 사용량이었다. 멀티코인 구조로 심볼별 판단을 하기 시작하니 호출 횟수와 프롬프트 길이가 함께 늘어났고, 그대로 두면 운영 비용빠르게 커질 수밖에 없었다.

그래서 가장 먼저 손본 건 프롬프트와 응답 길이였다. 시장 요약 텍스트는 핵심 지표만 남기고 최대한 압축했고, reasoning도 최대 3줄만 허용하도록 제한했다. 또 max_tokens 값을 낮춰서 입력과 출력 양쪽 모두 토큰 사용을 줄였다. 즉 모델 자체를 낮추지 않고도, 똑같은 Claude를 조금 더 가볍게 돌릴 수 있도록 구조를 정리한 셈이다.

멀티코인 판단 구조 개편

가장 중요한 구조 변경은 판단 로직 자체였다. 이전에는 실제 운용 대상이 여러 종목이어도 판단 근거는 사실상 ETH/USDT 하나를 대표 심볼로 삼아 만들어졌다. 그래서 리포트에는 늘 ETH 기준 reasoning이 찍히는데, 실제 주문은 BTC나 TRX로 나가는 식의 어색한 구조가 있었다.

이 문제를 해결하기 위해 BTC/USDT, ETH/USDT, TRX/USDT 각각에 대해 개별 모델 출력과 개별 LLM 판단을 생성하도록 엔진을 바꿨다. 이제는 심볼별로 BUY/HOLD/SELL, confidence, reasoning이 따로 기록되고, 실제 멀티자산 실행기도 그 판단 결과를 그대로 받아 주문을 집행한다. 즉 “ETH를 보고 판단했는데 TRX를 산다” 같은 구조적 불일치를 해소하는 작업이었다.

실제 운용 종목 정리

이전까지는 BTC/ETH/SOL/XRP/TRX 다섯 종목을 같이 운용하고 있었지만, 실제로는 너무 넓게 퍼진 느낌이 강했다. 리포트 해석도 복잡해지고, 전략 엣지가 뚜렷하지 않은 상황에서 종목 수가 많아질수록 오히려 평범한 시장 노출에 가까워질 수 있었다.

그래서 실거래 유니버스를 BTC/USDT, ETH/USDT, TRX/USDT 세 종목으로 축소했다. 관련 자산 컨텍스트와 벤치마크 기준도 여기에 맞춰 정리했다. 이렇게 하면서 전략이 어떤 종목에 집중하고 있는지 훨씬 더 명확하게 볼 수 있게 됐다.

►추가로 밴치마크도 BTC/ETH/TRX세 종목을 동일한 개수로 구매했다는 가정으로 변경하였다.

주문 사이징 조정

한 번 매수할 때 너무 소액으로만 들어가는 느낌도 문제였다. 그래서 최소 주문 금액을 현금의 25%로 올리고, 총 포지션 상한은 계좌의 60%로 두는 식으로 조정했다. 반대로 예전의 고정 주문 상한 금액은 사실상 비활성화했다.

즉 이제는 “현금의 일정 비율 이상은 들어가되, 전체 계좌 대비 과도한 익스포저는 막는다”는 방향으로 정리한 것이다. 여기에 진입 후보 threshold와 청산 threshold도 조금씩 손보면서, 지나치게 HOLD만 반복하거나 반대로 너무 잦은 청산이 나오지 않도록 맞춰가고 있다.

웹훅 실패 원인 추적과 안정화

운영 중에 Discord 웹훅 전송이 실패하는 문제도 있었다. 처음에는 단순히 webhook 실패 경고만 보였는데, 실제 원인을 추적해보니 discord.com DNS 해석 실패가 여러 번 발생하고 있었다.

그래서 모든 웹훅 전송 스크립트에 재시도 로직을 추가하고, curl stderr를 로그에 남기도록 바꿨다. 또 예전 실패 흔적이 계속 현재 경고처럼 보이는 문제도 줄이기 위해, 상태 리포트의 경고 판정은 최신 실행 구간만 보도록 조정했다.

밴치마크 결과

현 밴치마크 그래프는 약 3일정도 돌려놓은 상태다.

최신 그래프 기준으로 보면, 현재 전략은 BTC/ETH/TRX 3종목 균등보유 벤치마크보다 확실히 우위에 있다. 전략 누적수익률은 약 +2.49%, 같은 기간 3종목 균등보유 벤치마크는 약 -0.70% 수준으로, 최종 초과수익은 약 +3.19%p에 이른다. 즉 단순히 시장을 따라간 것이 아니라, 같은 종목을 아무 판단 없이 보유했을 때보다 눈에 띄게 더 나은 성과를 냈다고 볼 수 있다.

특히 이번 결과에서 중요한 점은 전략이 단순 방어만 한 것이 아니라는 점이다. 이전까지는 벤치마크가 크게 빠지는 동안 현금 비중을 높게 유지하며 손실을 피한 효과가 강했다면, 이번 구간에서는 전략 수익률 자체가 플러스 구간으로 확실히 올라섰다. 반면 벤치마크는 마지막 반등이 나오긴 했지만 여전히 마이너스권에 머물고 있다. 즉 이번에는 “덜 잃어서 상대적으로 좋아 보이는” 수준을 넘어서, 실제 절대 수익에서도 우위를 만들었다는 점이 더 긍정적이다.

초과수익 그래프를 보면 중간 이후부터 거의 대부분 구간에서 +1%p 이상 우위를 유지했고, 최근에는 +3%p 수준까지 벌어졌다. 이는 전략이 단순히 한두 번 우연히 맞은 것이 아니라, 하락 구간 방어와 이후 반등 대응 모두에서 일정 수준 이상 유효하게 작동하고 있다는 신호로 볼 수 있다. 물론 더 긴 기간 검증은 필요하지만, 현재까지의 비교만 놓고 보면 이 전략은 3종목 균등보유 대비 분명히 의미 있는 초과성과를 만들어내고 있으며, 최근 구간에서는 방어력을 넘어 실질적인 알파까지 보여주고 있다고 해석할 수 있다.

하지만 아직 실질적인 투자로 이어지기엔 밴치마크 기간이 부족하다는 생각이 들어 1주일정도 더 지켜볼 예정이다.

이번 구간의 의미

전체적으로 이번 작업은 단순히 “모델을 Claude로 바꿨다”에서 끝나지 않았다. Claude API 연동, 토큰 사용량 최적화, 종목별 개별 판단 구조, 3종목 운용 정리, 벤치마크 기준 변경, 주문 사이징 조정, 리포트/차트/웹훅 안정화까지 한 흐름으로 이어졌다.

아직 완전히 끝난 시스템이라고 보긴 어렵지만, 적어도 이제는 어떤 종목을 왜 사고 파는지, 벤치마크 대비 현재 성과가 어떤지, 그리고 운영 중 실패가 왜 생기는지를 이전보다 훨씬 더 명확하게 볼 수 있는 상태가 됐다. 이전보다 실험용 봇의 느낌은 줄고, 실제 운영 가능한 구조에 더 가까워졌다는 점에서 의미가 큰 구간이었다.

'프로젝트' 카테고리의 다른 글

AI Trading Bot 개발기 — Day 5  (0) 2026.04.01
AI Trading Bot 개발기 — Day 3  (0) 2026.03.19
AI Trading Bot 개발기 — Day 2  (0) 2026.03.18
AI Trading Bot 개발기 — Day 1  (0) 2026.03.10