Files
QuantEngineByItz/prompts/capture_parse_prompt.md
T
2026-06-18 01:47:50 +09:00

10 KiB
Raw Blame History

HTS 캡처 파싱 프롬프트

HTS 캡처 이미지가 제공되면 이 프롬프트를 분석보다 먼저 실행한다. 출력 순서: ① 화면판별 → ② 검증 → ③ 충돌감지·캡처우선 선언 → ④ TSV붙여넣기 → ⑤ account_snapshot 상태갱신 → ⑥ 현금요약 → ⑦ 인라인재산출 → ⑧ 다음단계

기본 완료 조건

작업 완료는 다음 4개가 함께 있어야 한다.

  • YAML 증빙
  • 코드 증빙
  • 데이터 실체 증빙
  • 검증 증빙

하나라도 빠지면 완료로 보지 않는다.


STEP 1 — 화면 종류 판별

화면 판별 기준 사용 가능 여부
보유종목 화면 종목명·수량·평단·평가손익이 있음 잔고 원장으로 사용
현금/예수금 화면 예수금·D+2·주문가능금액이 있음 현금 원장으로 사용
자동투자/적립식 화면 월 납입금액·약정일이 있음 잔고 원장 사용 금지 (AS006)
미체결 화면 주문종목·미체결수량이 있음 open_order_amount 참조용

화면 판별 결과를 첫 줄에 명시한다. 예: [보유종목 화면 확인] 일반계좌


STEP 2 — 검증 (출력 전 필수)

규칙 ID 확인 내용 실패 시
AS001 숫자 앞의 라벨 확인 (수량: X주, 평단: X원) parse_status = CAPTURE_READ_FAILED
AS002 holding_quantity 정수 확인 (소수 불가) CAPTURE_READ_FAILED
AS003 market_value ≈ holding_quantity × current_price (오차 1% 이내) DATA_CONFLICT 표시
AS004 현금 필드 0 이상 CAPTURE_READ_FAILED
AS006 자동투자 화면 여부 확인 CAPTURE_PROVIDED_BUT_NOT_HOLDINGS

검증 결과를 한 줄로 출력: [검증] AS001 OK | AS002 OK | AS003 OK (오차 0.3%) | parse_status = CAPTURE_READ_OK


STEP 2b — 캡처 vs JSON/account_snapshot 충돌 감지 (캡처 우선)

출력 조건: GatherTradingData.json 또는 account_snapshot 데이터가 이번 대화에 업로드되어 있을 때

기존 시장 데이터(JSON data.data_feed의 Account_Holding_Qty·Account_Avg_Cost)와 캡처값을 종목별로 비교한다.

[충돌 감지 결과]
ticker | 항목            | JSON/GAS값 | 캡처(실시간) | 차이     | 우선권
000660 | holding_quantity | 80주           | 100주       | +20주    | ★캡처우선
000660 | average_cost     | 175,000원      | 170,000원   | -5,000원 | ★캡처우선
012450 | holding_quantity | 20주           | 20주        | 없음     | 일치

캡처 우선 규칙:

  • 캡처값 ≠ GAS값 → 캡처가 정답. 이후 모든 분석은 캡처값 기준으로 진행.
  • GAS값은 account_snapshot 붙여넣기 전 상태의 오래된 값임.
  • JSON에 Account_Parse_Status=MANUAL_ENTRY/STALE_MANUAL/""인 종목도 캡처가 있으면 캡처우선.
  • 충돌 없으면: [충돌 없음] 모든 종목 일치

주의: 충돌 종목에 대해 이후 분석에서 GAS의 Profit_Pct·Weight_Pct·Sell_Qty 등은 재산출 대상. 재산출 방법은 STEP 7 참조.


STEP 3 — account_snapshot 탭 붙여넣기 표

출력 조건: 보유종목 또는 현금 화면이 CAPTURE_READ_OK일 때

붙여넣기 방법: Google Sheets → account_snapshot 탭 → A3 셀 선택 → Ctrl+V

TSV(탭구분) 형식으로 출력한다. 각 행은 account_snapshot 탭의 1개 데이터 행이다. 현금 전용 행은 ticker·name·holding_quantity 이하 종목 컬럼을 빈칸으로 두고 현금 컬럼만 채운다.

[account_snapshot 탭 — A3 셀에 붙여넣기]
captured_at	account	account_type	ticker	name	holding_quantity	available_quantity	average_cost	total_cost	current_price	market_value	profit_loss	return_pct	immediate_cash	settlement_cash_d2	available_cash	open_order_amount	monthly_contribution_limit	monthly_contribution_used	parse_status	user_confirmed	stop_price	highest_price_since_entry	entry_date	entry_stage	position_type	last_updated

컬럼 순서 고정 — 27컬럼 (변경 금지): captured_at | account | account_type | ticker | name | holding_quantity | available_quantity | average_cost | total_cost | current_price | market_value | profit_loss | return_pct | immediate_cash | settlement_cash_d2 | available_cash | open_order_amount | monthly_contribution_limit | monthly_contribution_used | parse_status | user_confirmed | stop_price | highest_price_since_entry | entry_date | entry_stage | position_type | last_updated

작성 규칙:

  • captured_at: 첫 번째 컬럼. YYYY-MM-DD HH:MM 형식. 화면 시각 기준. 없으면 당일 날짜.
  • ticker: 6자리 문자열 (예: 000660). 이름만 보이면 종목코드로 변환. 불확실하면 빈칸.
  • holding_quantity: 정수만. 소수점 불가.
  • available_quantity: 매도가능수량 (HTS 화면에 표시되는 경우). 없으면 빈칸.
  • average_cost / current_price / market_value / total_cost: 원 단위 정수 (콤마 없이).
  • total_cost: 매입금액 = holding_quantity × average_cost. HTS에서 직접 읽으면 그 값 사용.
  • profit_loss: 평가손익 (원). HTS 화면 값 직접 사용. 없으면 빈칸.
  • return_pct: 수익률 %. 예: 7.5 (% 기호 제외). 없으면 빈칸.
  • 현금 필드: 보유종목 화면에서 현금이 보이지 않으면 빈칸 (0으로 채우지 않음).
  • parse_status: 검증 통과 시 CAPTURE_READ_OK, 실패 시 CAPTURE_READ_FAILED.
  • user_confirmed: 항상 Y (붙여넣기 행위 자체가 사용자 확인임).
  • 선택 포지션 상태 6컬럼(stop_price~last_updated)은 캡처에서 확인되지 않으면 빈칸. 기존 값을 보존해야 하면 STEP 4에서 해당 셀만 수정.

출력 예시 (27컬럼 — 탭으로 구분):

[account_snapshot 탭 — A3 셀에 붙여넣기]
2026-05-18 09:30	일반계좌	일반계좌	000660	SK하이닉스	100	100	170000	17000000	181900	18190000	1190000	7.0	3500000	4200000	3500000	0			CAPTURE_READ_OK	Y						
2026-05-18 09:30	일반계좌	일반계좌	012450	한화에어로스페이스	20	20	980000	19600000	1216000	24320000	4720000	24.1					0			CAPTURE_READ_OK	Y						
2026-05-18 09:30	일반계좌	일반계좌		현금				3500000	4200000	3500000	0			CAPTURE_READ_OK	Y						

STEP 4 — account_snapshot 선택 포지션 상태 갱신 표

출력 조건: stop_price, highest_price_since_entry, entry_stage, position_type, last_updated 갱신이 필요한 경우

붙여넣기 방법: 아래 표를 참고해 account_snapshot 탭에서 ticker 행을 찾아 해당 선택 열만 수정. 보유수량·평단은 STEP 3의 account_snapshot TSV가 담당한다. positions 탭은 사용하지 않는다.

[account_snapshot 탭 — 해당 ticker 행의 아래 선택 열을 수동 수정]
ticker	stop_price	highest_price_since_entry	entry_stage	position_type	last_updated

작성 규칙:

  • stop_price가 비어 있으면 GAS가 ATR 기반으로 추정한다. 수동 입력을 강제하지 않는다.
  • last_updated = 오늘 날짜 YYYY-MM-DD.
  • position_typecore 또는 satellite. 비어 있으면 GAS가 satellite로 간주한다.

STEP 5 — 현금 요약 (1줄)

[현금 요약] 즉시현금: X원 | D+2현금: X원 | 주문가능: X원 | 미체결: X원
→ settings 탭 settlement_cash_d2_krw에 X원 입력 필요

D+2현금을 settings 탭에 수동 입력해야 GAS가 매수 가능 금액 계산에 사용한다.


STEP 6 — 다음 단계 안내 (항상 출력)

[다음 단계]
1. account_snapshot 탭 A3에 위 표 붙여넣기
2. 필요한 경우 account_snapshot 탭에서 ticker별 stop_price·highest_price_since_entry·last_updated 선택 열만 수정
3. settings 탭 settlement_cash_d2_krw = [D+2현금 값] 입력
4. GAS runDataFeed() 재실행 → xlsx 원본 갱신 확인
5. `npm run convert-data-json` 실행 후 갱신된 `GatherTradingData.json` 업로드 후 분석 요청

STEP 7 — 충돌 종목 인라인 재산출 (캡처 우선 적용)

출력 조건: STEP 2b에서 충돌 종목이 1개 이상 발견된 경우

GAS 재실행 전이라도 캡처값으로 핵심 지표를 직접 재산출해서 분석에 사용한다. JSON/GAS의 해당 종목 계좌 값은 무시하고 아래 재산출값으로 교체한다.

재산출 항목

항목 재산출 공식 필요 입력
Profit_Pct (현재가 - 캡처평단) / 캡처평단 × 100 캡처평단, JSON Close
Unrealized_PnL (현재가 - 캡처평단) × 캡처수량 캡처수량·평단, JSON Close
Weight_Pct (현재가 × 캡처수량) / 총자산 × 100 캡처수량, JSON Close, 총자산
Sell_Qty 캡처수량 × Sell_Ratio_Pct / 100 (반올림) 캡처수량, GAS Sell_Ratio_Pct
매도가능수량 캡처 available_quantity 있으면 상한 적용 캡처 available_quantity

출력 형식

[캡처 우선 재산출] — GAS 재실행 전 임시값
ticker | 항목          | GAS값(무효) | 캡처재산출값 | 비고
000660 | Profit_Pct    | +4.2%      | +6.9%       | 평단 변경(175000→170000)
000660 | Unrealized_PnL| 3,360,000원 | 1,190,000원 | 수량 변경(80→100)
000660 | Weight_Pct    | 7.8%       | 9.7%        | 수량 변경
000660 | Sell_Qty      | (미산출)    | 25주        | TRIM_25(25%) × 100주

재산출 불가 항목 (GAS 의존): SS001_Grade, RW_Partial, Flow_Credit, Final_Action 등 시장데이터 기반 점수. 이 항목들은 JSON 시장데이터 값을 그대로 사용하되, 수량·손익 계산만 캡처값으로 교체한다.


오류 처리

상황 출력
이미지 흐림·잘림으로 숫자 판독 불가 해당 필드 빈칸 + parse_status=CAPTURE_READ_FAILED
종목코드 불확실 ticker 빈칸 + name만 기재 + 경고 메모
AS003 오차 > 1% DATA_CONFLICT 표시 후 계속 기재 (사용자 확인 후 사용)
자동투자 화면 parse_status=CAPTURE_PROVIDED_BUT_NOT_HOLDINGS + 보유수량 기재 금지
JSON 미업로드 STEP 2b 생략, STEP 7 생략. 캡처값 단독으로 진행.