미국주식 티커 하나를 입력하면 Float(유동주식)과 공매도 비율, 최근 3개월 뉴스, 최근 3개월 SEC 공시를 한 화면에 모아 보여주는 데스크톱 리서치 도구입니다. LOG_01의 자동매매 엔진이 실행을 담당한다면, 이 도구는 그 실행 이전에 항상 거치는 관찰 단계를 압축해둔 것입니다.
01왜 만들었나
Float, 공매도 비율, 뉴스, SEC 공시를 매번 서로 다른 사이트에서 하나씩 찾아보는 과정을 한 화면으로 모았습니다. 프로그램을 켤 때마다 로그인 창에서 이메일 하나를 입력받아 이후 모든 SEC 요청의 User-Agent로 자동 사용하고, Finnhub·Azure Translator API 키도 선택 입력받아 이후 요청에 재사용합니다.
02구조 — 조회 한 번, 백그라운드 스레드 하나
조회 버튼을 누르면 별도 스레드에서 yfinance의 Ticker.get_info()를 호출해 floatShares·shortPercentOfFloat을 가져옵니다. 야후 응답이 가끔 비어오는 경우를 대비해 1회 재시도하고, 결과는 self.after(0, ...)로 메인 스레드에 넘겨 화면을 갱신합니다 — LOG_01의 트레이딩 엔진과 동일한, GUI를 막지 않는 스레드 패턴입니다. floatShares가 없으면 ETF이거나 잘못된 티커로 보고 안내창을 띄웁니다.
03뉴스는 두 곳에서, 실제로 관련 있는 것만
야후파이낸스와 Finnhub Stock News API 양쪽에서 최근 3개월 뉴스를 각각 조회합니다. 제목에 티커 또는 회사명이 단어 경계로 실제 포함된 것만 남기고 나머지는 버립니다 — 회사명은 "NVIDIA Corporation" → "NVIDIA"처럼 법인 접미사를 뗀 코어네임으로 비교해, 관련 없는 뉴스가 섞이는 걸 막습니다. Finnhub는 기간 내 뉴스를 개수 제한 없이 반환하기 때문에(인기 종목은 수백 건) 최신순 25건까지만 잘라 번역·표시 시간을 줄입니다.
# 티커 또는 회사명(접미사 제거)이 단어 경계로 실제 포함된 제목만 통과 pattern = re.compile(r"(?<![a-z0-9])" + re.escape(ticker_clean) + r"(?![a-z0-9])") # "NVDA"가 다른 단어의 일부로 우연히 걸리는 오탐을 여기서 차단
04번역은 계정별 키로
뉴스·공시 제목은 MS Azure AI Translator 무료 티어(월 200만자, 영구 무료)로 한글 번역합니다. 계정마다 발급받는 키를 쓰기 때문에 구글 번역 비공식 엔드포인트처럼 공용 IP가 차단당할 위험이 없습니다. 키를 비워두면 원문을 그대로 보여주고, 번역이 실패해도 조용히 원문을 반환합니다 — --windowed exe는 콘솔이 보이지 않으므로 실패 사유는 별도 로그 파일에 남깁니다.
05SEC 공시 — "없음"과 "못 봄"을 구분하기
SEC 조회 결과는 세 가지 상태로 나눕니다: 그 기간에 실제로 공시가 없는 것(정상, 빈 목록), SEC 서버 접근이 막히거나 네트워크 오류로 조회 자체에 실패한 것(403/429 등), 티커가 SEC 등록 목록에 없는 것. 이 셋을 뭉뚱그리면 "공시가 없나보다"로 잘못 읽히기 쉬워서, 화면에 상태별로 다른 안내 문구를 띄웁니다. 최근 제출 목록에 10-K가 한 번이라도 있으면 미국기업으로 보고 10-K/10-Q/8-K를, 없으면 외국기업(FPI)으로 판단해 20-F/6-K를 대신 조회합니다.
06슬롯 6개 — 즉석 워치리스트
조회한 결과를 우측 슬롯(1~6) 중 빈 자리에 저장해두고, 버튼 클릭 한 번으로 다시 불러봅니다. 정식 워치리스트 기능 없이도 그날 보고 있는 종목 몇 개를 잠깐 붙여두는 용도로 씁니다. S/F 칸을 누르면 창 "항상 위"를 켜고 끌 수 있어, 다른 창들 사이에서도 계속 보이게 고정해둘 수 있습니다.
07지금 이 자리
버전 1.2.7. 매매 판단 이전에 늘 거치는 관찰 과정 자체를 도구로 옮겨온 것이라, LOG_01의 자동매매 엔진과 한 쌍으로 씁니다. 지금은 새 기능을 더하기보다, 이 관찰 습관을 그대로 유지하며 필터링 정확도와 조회 속도를 다듬는 단계입니다.