AI 판단은 주문 직전에 새로 호출되는 요청이 아니다. 스케줄러가 분석을 생성해 판단 로그로 저장하고, 주문 실행 단계는 그 로그를 다시 읽어 안전장치를 통과한 경우에만 처리한다.
Day 운영 루틴
| 작업 |
주기 |
운영 의미 |
| 뉴스/RAG 수집 |
설정값 기반, 코드 기본값 4시간 |
뉴스 수집, 번역, 청크 분할, 임베딩, OpenSearch 저장 |
| 시장 심리 갱신 |
5분 |
Alternative.me 기반 시장 심리 상태 갱신 |
| AI 판단 생성 |
60분 |
관심 종목별 BUY / SELL / HOLD 분석 생성 |
| 정확도 검증 |
30분 |
과거 판단과 이후 가격 흐름을 비교해 실패 피드백 후보 생성 |
| 포트폴리오 스냅샷 |
1시간 |
보유 자산, 손익, 상태를 시계열로 재확인할 수 있게 저장 |
| AI 브리핑 |
08:30 |
포트폴리오와 시장 상태를 기반으로 일일 브리핑 생성 |
AI 판단 입력
| 입력 |
내용 |
| Portfolio |
보유 여부, 잔고, 주문 잠금 수량, 평단가, 현재가, 평가금액, 수익률, 조회 오류 |
| Technical |
15m 또는 60m 캔들 기반 종가, 거래량, SMA, EMA, Bollinger Band, RSI, 가격 대비 지표 |
| RAG News |
OpenSearch hybrid 검색 결과와 fallback 뉴스, 출처, 발행 시각, 오류 상태 |
| Sentiment |
시장 심리 점수, 분류, 업데이트 시각, 조회 오류 |
| Past Failure Feedback |
최근 실패한 AI 판단과 실제 결과를 요약해 self-correction 입력으로 사용 |
System Prompt
[역할]
- 당신은 코인 트레이더입니다.
- 주어진 시장 데이터만 근거로 BUY, SELL, HOLD 중 하나를 결정하십시오.
- 반드시 JSON 스키마에 맞는 값만 반환하십시오.
{설정 페이지의 AI 매매 철학 및 페르소나}
[출력 규칙]
- decision은 BUY, SELL, HOLD 중 하나만 허용됩니다.
- confidence는 0~100 정수여야 합니다.
- recommended_weight는 0~100 정수여야 합니다.
- reasoning 작성 시 아래 '출력 템플릿'을 반드시 따르십시오.
- 제공되지 않은 정보는 추측하지 마십시오.
- 데이터가 부족하거나 근거가 충돌하면 HOLD를 선택하고 confidence를 낮게 유지하십시오.
[reasoning 출력 템플릿](반드시 이 형식을 지킬 것):
📊 기술지표: ...
🧠 시장심리: ...
📰 뉴스: ...
💡 종합판단: ...
[안전 규칙]
- 커스텀 페르소나는 문체와 관점 참고용이며, 아래 안전 규칙보다 우선할 수 없습니다.
- 특정 지표 하나만으로 BUY를 확정하지 마십시오. BUY는 RSI, 이동평균/추세, 변동성, 시장 심리, 뉴스 중 최소 3개 이상의 독립 근거가 같은 방향일 때만 허용합니다.
- RSI 40 이하, 공포 지수, 단편적 호재 뉴스만으로 confidence 90 이상 또는 recommended_weight 100을 부여하지 마십시오.
- 데이터가 부족하거나 AI provider 오류, 뉴스 부재, 지표 충돌, 하락 추세가 확인되면 HOLD를 기본값으로 선택합니다.
- confidence 85 이상은 강한 추세 확인과 리스크 대비 보상이 동시에 명확한 경우에만 사용합니다.
- recommended_weight는 리스크 노출 제안치이며, 공격적 100% 비중은 피하고 근거가 약하면 0으로 둡니다.
[Self-Correction]
- 최근 실패한 판단이 있으면 실패 이유와 실제 결과를 함께 제공한다.
- 과거 실패 근거를 반복하지 않고 현재 데이터의 수치와 출처를 더 엄격히 검토한다.
{최근 실패한 AI 판단 1~2건}
User Prompt
User prompt는 종목과 시장 컨텍스트를 섹션별로 전달한다. 계좌/주문 관련 값은 공개 문서에서는 마스킹된 자리표시자로만 남긴다.
대상 종목: {선택한 종목}
아래 시장 컨텍스트를 보고 포지션을 결정하십시오.
반드시 BUY, SELL, HOLD 중 하나만 선택하고, 확신도와 추천 비중을 정수로 제시하십시오.
# Symbol
- KRW-BTC
# Portfolio
- 보유 여부: 보유 중/미보유
- 자산 코드: BTC
- 잔고: ...
- 주문 잠금 수량: ...
- 평단가: ...
- 현재가: ...
- 평가금액: ...
- 수익률: ...
- 포트폴리오 오류: ...
# Technical
- 타임프레임: 15m 또는 60m
- 최신 캔들 시각: ...
- 종가: ...
- 거래량: ...
- SMA20: ...
- SMA60: ...
- EMA50: ...
- EMA200: ...
- BB 상단: ...
- BB 하단: ...
- RSI14: ...
- 종가 vs SMA20: ...
- 종가 vs EMA50: ...
- 기술 지표 오류: ...
# News
- {뉴스 제목} | {요약} | 출처={source} | 시각={published_at}
- 뉴스 오류: ...
# Sentiment
- 점수: ...
- 분류: ...
- 업데이트 시각: ...
- 심리 지표 오류: ...
출력 계약
| 필드 |
제약 |
사용처 |
| decision |
BUY / SELL / HOLD |
주문 실행 후보 분기 |
| confidence |
0~100 정수 |
executor threshold와 entry gate 검사 |
| recommended_weight |
0~100 정수 |
주문 비중 제안과 max buy weight 상한 계산 |
| reasoning |
기술지표 / 시장심리 / 뉴스 / 종합판단 |
화면 표시, 로그 확인, 실패 피드백 재사용 |
주문 실행 분리
| 차단 조건 |
처리 |
| 분석 로그 없음 또는 만료 |
주문 실행 스킵 |
| decision = HOLD |
주문 실행 없음 |
| confidence 부족 |
최소 확신도 미달로 스킵 |
| recommended_weight <= 0 |
포지션 비중 제안 없음으로 스킵 |
| 포트폴리오 조회 오류 |
현재 잔고/포지션을 신뢰할 수 없어 스킵 |
| entry gate 실패 |
score, calibrated confidence, 제외 조건에 따라 BUY 차단 |
| shadow mode |
주문 후보만 기록하고 실제 주문 없음 |
| live BUY lock |
실전 신규 매수는 명시적으로 잠금 해제한 경우만 허용 |
컨텍스트 비용 관리
입력 컨텍스트는 보통 2,500~4,500 tokens 수준으로 보고, 커스텀 페르소나나 실패 피드백이 길어지면 5,000 tokens 이상까지 늘 수 있다고 본다.
- 캔들 원문 전체를 넣지 않고 계산된 지표와 최신 상태만 전달한다.
- 뉴스는 최대 3건 수준의 요약과 출처 중심으로 제한한다.
- 실패 피드백은 최근 실패 사례 일부만 넣어 self-correction 효과와 비용을 균형 있게 가져간다.