inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

베개투자법 완성: 아침이 설레는 AI 주식 완전 자동매매 Claude 바이브코딩

점수 로직 고도화와 실제 계좌 연동

연동 문제

1

구구구구

작성한 질문수 4

0

현재 섹션 7까지는 전부 들었는데 따로 모의투자 매매도 안되고 llm쪽 슈퍼베이스 데이터도 안들어가서 문의드려요. 클로드는 아래처럼 말해주는데 이해가 잘 안돼서요ㅠㅠ

env에는 아래값들 전부 넣어줬습니다.

KAGGLE_USERNAME=
KAGGLE_API_TOKEN=
KAGGLE_KERNEL_SLUG=
KAGGLE_NOTEBOOK_DIR=

SLACK_WEBHOOK_URL=
SLACK_NOTIFY_LEVEL=info

USE_SCORING_V2=true

아래는 제가 클로드에게 모의투자 계좌 연동했는데 왜 안사는지 질문한 내용입니다.


결론: 계좌 연동 문제 아닙니다. LLM 최종 검토에서 전부 거부당하고 있습니다.

stock_scheduler.log를 보면 시스템은 오늘 끝까지 정상으로 돌았습니다.

21:00:00 Daily Pipeline 시작

21:00:04 [2/4] Kaggle 예측 push → 21:08:14 완료 (482초)

21:10:32 [4/4] LLM 최종 검토 + KIS 매수 주문 시작

21:10:37 현재 보유/주문 중인 종목 수: 0

21:10:38 매수 후보 6개 → LLM 최종 검토 시작

21:11:31 LLM 검토 결과 매수 대상이 없습니다. ← 여기서 끝

어제도 똑같았습니다: 후보 7개 → LLM 전원 HOLD. 이틀 연속 매수 0건이고, trade_records 테이블도 0행입니다.

즉 데이터 수집 → ML 예측 → 기술지표 → 점수 산출까지 다 통과해서 후보 6개가 올라왔는데, 마지막 LLM 관문(llm_review_service.py)이 6개를 전부 HOLD 처리했습니다. LLM은 거부권만 있어서(코드 주석 49번 줄) 여기서 막히면 주문이 아예 안 나갑니다.

"시간이 지나야 하냐" — 반은 맞습니다

매수 경로가 두 개입니다.

┌─────────────────────────┬────────────────────────────────┬───────────────────┐

│ 경로 │ 실행 시각 │ 오늘 결과 │

├─────────────────────────┼────────────────────────────────┼───────────────────┤

│ 일일 파이프라인 │ 매일 KST 21:00 │ 실행됨 → LLM 전원 │

│ (force=True) │ │ HOLD │

├─────────────────────────┼────────────────────────────────┼───────────────────┤

│ 스케줄러 자동매수 │ 평일 10:30~10:35 ET = KST │ 아직 안 옴 (28분 │

│ │ 23:30~23:35 │ 뒤) │

└─────────────────────────┴────────────────────────────────┴───────────────────┘

지금 23:01 KST(10:01 ET)라 두 번째 시도가 곧 있습니다. 오늘 매수 성공이 0건이라 lastbuy_date가 갱신되지 않았으므로(scheduler.py:811-815) 23:30에 정상적으로 재시도됩니다. 다만 그 시도도 똑같은 LLM 관문을 통과해야 합니다. 지금 상태면 또 막힐 가능성이 큽니다.

LLM이 왜 다 거부하나 — 프롬프트가 종목을 실제보다 나쁘게 보여주고 있습니다

코드를 보니 LLM에게 넘어가는 데이터에 문제가 두 개 있습니다.

1. v2 모드인데 프롬프트는 v1 키를 읽습니다 (제일 큼)

llm_review_service.py:110:

(예측상승률: {c.get('rise_score', 0)}, 기술: {c.get('tech_score', 0)}, 거래량: {c.get('volume_score', 0)}, ADX: {c.get('adx_score', 0)}, VIX: {c.get('vix_score', 0)})

이 다섯 키는 compute_v1()만 만듭니다. USE_SCORING_V2=true인 지금은 compute_v2()가 v2_factors만 넣기 때문에 전부 없는 키 → 기본값 0으로 출력됩니다. LLM은 매 종목마다 이렇게 봅니다:

- 종합점수: 0.8532

(예측상승률: 0, 기술: 0, 거래량: 0, ADX: 0, VIX: 0)

종합점수는 양수인데 근거 점수가 전부 0인 모순된 데이터입니다. "데이터가 이상하면 HOLD" 성향의 프롬프트(138번 줄 "시스템 오류 가능성 → HOLD")와 만나면 전멸이 자연스럽습니다.

2. RSI 라벨이 틀렸습니다

llm_review_service.py:103은 RSI가 50~65일 때만 "(강세 진입)"이라 쓰고, 30~50이면 "(매수구간 아님)"으로 표기합니다. 그런데 사전필터(scoring_service.py:42)는 RSI ≤ 65를 전부 매수 구간으로 봅니다. 지금 DB의 25개 종목 중 16개가 RSI 30~50 구간이라, 시스템이 통과시킨 종목을 프롬프트가 "매수구간 아님"이라고 LLM에게 일러바치는 셈입니다.

여기에 ADX가 20 미만인 종목이 13/25라 "(추세 약함)"까지 붙으면, LLM 입장에서 HOLD를 안 낼 이유가 없습니다.

근거를 DB에서 못 보는 이유도 찾았습니다

llm_decision_logs 테이블이 0행입니다. 판단 이유가 하나도 안 남아 있어요. 원인은 저장 코드가 실제 테이블에 없는 컬럼 3개를 쓰기 때문입니다:

column llm_decision_logs.earnings_date does not exist (42703)

column llm_decision_logs.days_to_earnings does not exist

column llm_decision_logs.earnings_estimate does not exist

llm_review_service.py:36-38이 실적 정보를 upsert에 넣는데, create_all_tables.sql:203-219의 테이블 정의에는 그 컬럼들이 없습니다. 매번 예외가 나고 except가 삼켜서(42-43번 줄) 조용히 넘어갑니다.

지금 바로 확인할 곳

.env에 Slack 웹훅이 설정돼 있으니, 오늘 21:11에 온 Slack 메시지를 보시면 LLM이 6개 종목을 각각 왜 HOLD했는지 이유가 그대로 적혀 있습니다.

- "오늘의 LLM 판단" 류 메시지가 왔다면 → LLM이 정상 응답했고 실제로 전부 거부한 것

- "LLM 장애" 알림이 왔다면 → API 호출 자체가 실패해서 Fail-Close로 막힌 것 (llm_review_service.py:264-275)

python run.py를 띄운 터미널 창에도 LLM HOLD: 종목명(티커) - 이유 가 줄줄이 찍혀 있습니다. 이건 print라서 로그 파일에는 안 들어갑니다.

---

원인 확인만 요청하셨던 흐름이라 코드는 아직 손대지 않았습니다. 위 세 가지(프롬프트 v2 대응, RSI 라벨, llm_decision_logs 컬럼)를 고치면 LLM이 제대로 된 데이터를 보고 판단하게 됩니다. 고쳐드릴까요?

python 머신러닝 aws FastAPI 퀀트 cloud-computing claude

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. 구구구구님.

모의투자 주문이 실행되지 않고 llm_decision_logs에도 데이터가 저장되지 않는 문제와 관련해 아래 기존 답변들이 도움이 될 수 있습니다.

코드 관련

해당 답변에서는 다음 내용을 다루고 있습니다.

  • .env에 API 키와 계좌 정보를 설정하는 방법
  • localhost:8000/docs에서 Swagger UI에 접속하는 방법
  • 자동 매수·매도 스케줄러를 중지하고 데이터 수집 및 예측만 수행하는 방법
  • start_scheduler(), start_sell_scheduler()를 주석 처리해 자동 주문을 비활성화하는 방법
  • 모의투자 계좌 연동 후에도 주문이 실행되지 않을 때 확인할 설정

현재 Claude가 분석한 것처럼 후보 종목이 생성된 뒤 LLM 최종 검토 단계에서 모두 HOLD 처리되는 경우, KIS 계좌 연동까지 도달하지 않아 주문이 발생하지 않을 수 있습니다. 또한 llm_decision_logs 테이블에 데이터가 없다면 LLM 판단 결과 저장 과정에서 오류가 발생했을 가능성이 있으므로, Supabase의 테이블 스키마와 코드의 upsert 컬럼명이 일치하는지 확인해 보셔야 합니다.

모의투자 주문이 불가한 계좌입니다.

모의투자 계좌 자체의 설정 문제를 확인할 때 참고할 수 있는 답변입니다. 한국투자증권 사이트에서 모의투자 참가 신청을 완료했는지, 모의투자용 API 키와 계좌 정보가 올바르게 연결되었는지 점검하는 내용이 안내되어 있습니다.

추가로 LLM 호출 중 JSON 파싱 오류나 응답이 잘리는 문제가 발생하는 경우에는 아래 답변도 참고해 주세요.

pipeline/run-buy-pipeline 실행시 “LLM호출전체실패”에러발생

Unterminated string 오류가 발생할 때 Anthropic API 잔액과 max_tokens 설정을 확인하고, LLM 응답이 중간에 잘리지 않았는지 점검하는 방법이 설명되어 있습니다.

다만 현재 상황은 LLM 호출 자체가 실패했다기보다, 후보 종목이 생성된 후 LLM이 HOLD를 반환하고 로그 저장 과정에서도 컬럼 불일치가 발생한 상황으로 보입니다. 따라서 먼저 Slack 메시지와 실행 터미널에서 실제 LLM 판단 사유를 확인한 뒤, llm_review_service.py에서 사용하는 컬럼과 Supabase llm_decision_logs 테이블의 컬럼 구성이 일치하는지 확인해 보시는 것을 권장드립니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

5-21 질문이요!

0

15

2

매수 실행 시점 관련

0

28

0

Opus/Sonnet 버전 관련 문의

1

45

2

섹션2 질문이요

1

45

2

섹션1.9 질문입니다!

1

66

3

Kaggle 노트북(predict.ipynb) 관련

1

50

2

git bash .env

1

51

1

알파벤티지 sleep(5) 관련 문의

1

69

2

실전 계좌에서 운영하고 계신 분 계신가요?

1

65

2

클로드

1

56

2

pip install -r requirements.txt

0

64

2

명령 프롬프트

0

58

2

slack 알림 연동 강의 관련

1

80

2

supabase_key 관련

1

87

3

python run.py 실행시 에러 문제

1

101

2

커서창

1

69

2

cursor 환경

1

72

2

개발 환경 준비와 프로젝트 구조 강의 관련

1

64

2

저장 공간

1

69

2

colab 코드 실행시 error

1

58

2

llm_decision_logs 저장 실패(실적 컬럼 불일치)를 어떻게 해결할까요?

2

91

4

kaggle notebook에 service key 설정이 누락된 것 같습니다

1

75

2

주말에 실행할 경우 update_economic_data_in_background에 로직 변경 필요성

1

61

1

프로그램 실행시간에 대한 질문

1

65

2