윈도우 Bloomberg 뉴스 직접수집 진단·구축 지시서
0. 작업 의도
이 작업의 목적은 이메일 알림을 더 예쁘게 정리하는 것이 아니다. Bloomberg 원천에서 뉴스 전량과 본문을 먼저 확보하고, 해리 업무에 필요 없는 뉴스를 제거한 뒤, 남은 것만 요약하는 구조로 바꾸는 것이다.
해리가 원하는 결과:
- 이메일 20건 제한 없이 해당 기간 뉴스 전량 확인
- 지방채·거래량 색깔이 앞자리를 차지하기 전에 제거
- 헤드라인이 아니라 본문을 읽고 크레딧 영향을 요약
- 한국물, 실제 등급변경, 대형발행, 인수합병, 자본조달을 빠뜨리지 않음
- 지난주 잘린 약 307건을 가능하면 복구
기존 HIGRAD 메일 알림은 새 경로 검증 전까지 끄지 않는다. 직접수집이 실패했을 때의 비상 경로로 유지한다.
1. 지금 방식이 비효율적인 이유
확인한 자료: ~/knowledge-agent/200-projects/us-ig-weekly/260803_크레딧이슈.md
- 받은 메일 26통, 헤드라인 187건, 중복 제거 후 181건
- 하루 총정리 4통의 제목상 건수는 97·65·122·103건으로 합계 387건
- 메일에는 각각 20건만 들어와 합계 80건만 보였고 약 307건은 확인하지 못함
- 확인된 181건 중 미국 지방채 약 90건, 거래량 색깔 약 28건, 자동 상대가치 스크린 36건, 등급 유지·전망 안정 약 9건이 노이즈
- 실제 매매·학습에 쓸 만한 것은 10개 사건 묶음 정도였음
- 본문이 없어 등급 철회 사유, 자금조달 목적, 인수합병 영향 등을 다시 단말에서 확인해야 했음
현재 구조는 다음 세 단계에서 정보가 손실된다.
Bloomberg 검색 결과 전량
→ 이메일 생성 시 20건으로 절단
→ 지방채·색깔 뉴스가 상단 점유
→ 맥은 헤드라인만 받아 요약
바꿀 구조:
Windows Bloomberg 원천 수집
→ NSN 기준 원문 보관
→ 규칙 기반 노이즈 제거·사건 묶기
→ 본문 근거 요약
→ 해리용 일간·주간 결과만 전달
2. 현재 조사 결론 — 성공으로 포장하지 말 것
확인된 사실
- Bloomberg 공개 Core API 가이드가 열거한 서비스에는 일반적인 뉴스 검색·본문 서비스가 없다.
- 현재 열렸다고 실측된 서비스 중:
//blp/srcref는 EID별 tick size, 브로커/조건코드, 거래상태 참조 서비스다. 뉴스가 아니다.//blp/pagedata는 GPGX 번호·모니터·페이지·행을 지정해 페이지 데이터를 구독하는 서비스다. 일반 NEWS 화면이나 저장 뉴스검색을 읽는 기능으로 확인되지 않았다.//blp/mktbar,//blp/tasvc,//blp/instruments도 뉴스 검색·본문 서비스가 아니다.- Bloomberg 공식 최신 Windows C++ SDK 3.26.6.1의 배포 예제에도 뉴스 검색·본문 예제가 없다.
//blp/apiflds에는FieldSearchRequest가 있어 회사 단말의 필드 사전에서news,story,headline,NSN을 검색할 수 있다.- BLPAPI 서비스는 operation과 request/response schema를 런타임에 읽을 수 있다. 공개 문서에 없는 기능도 회사 단말이 실제 제공하는 스키마로 판정할 수 있다.
아직 확인되지 않은 것
- BLPAPI로 HIGRAD와 같은 뉴스검색 결과 전량을 가져올 수 있는지
- 뉴스 헤드라인에서 NSN과 본문을 모두 받을 수 있는지
- 발행사·주제·등급변경·날짜 조건을 서버 요청에 넣을 수 있는지
- 과거 기간을 지정해 7월 28~31일 뉴스 387건을 다시 받을 수 있는지
//blp/exrsvc가 뉴스와 관련 있는지
따라서 지금 판정은 “BLPAPI 뉴스 직접수집 가능성 미확인”이다. 아래 진단에서 실제 schema와 응답을 확보하기 전에는 NewsSearchRequest, NewsStoryRequest 같은 이름을 짐작해서 구현하지 않는다.
3. 1단계 — 회사 PC에서 기능을 확정하는 진단
news_capability_probe.py 하나를 먼저 만든다. 최종 수집기를 만들기 전 진단용이다.
3-1. 접속과 서비스 스키마 덤프
현재 스프레드 수집에 성공한 동일한 BLPAPI 접속 설정을 재사용한다. 다음 서비스의 operation, request definition, response definition을 텍스트로 저장한다.
//blp/refdata
//blp/mktdata
//blp/apiflds
//blp/srcref
//blp/pagedata
//blp/exrsvc
Python API에서 사용할 공식 introspection 경로:
for op in service.operations():
print(op.name())
print(op.description())
print(op.requestDefinition())
for response_schema in op.responseDefinitions():
print(response_schema)
각 덤프에서 대소문자를 무시하고 다음 단어를 찾는다.
NEWS, STORY, HEADLINE, NSN, SEARCH, DATE, TOPIC, SOURCE, LANGUAGE
판정:
- 검색·헤드라인·본문 operation이 실제로 있으면 그 정확한 이름과 요소만 사용
exrsvc에 관련 operation이 없으면 뉴스 경로에서 제외pagedata는 NEWS 화면이라는 이유만으로 쓰지 않음. HIGRAD 결과가 실제 GPGX 페이지 번호로 제공되는 것이 확인될 때만 재검토
3-2. Bloomberg 필드 사전 검색
//blp/apiflds의 공식 FieldSearchRequest를 다음 검색어별로 실행한다.
service = session.getService("//blp/apiflds")
request = service.createRequest("FieldSearchRequest")
request.set("searchSpec", "news") # story, headline, NSN도 각각 실행
각 결과에서 반드시 저장할 것:
- field mnemonic
- field ID
- 설명
- datatype
- static/realtime 구분
- reference data 적용 가능 여부
- history 가능 여부가 응답 설명에 있다면 그 값
후보 이름을 미리 고정하지 않는다. apiflds가 실제 반환한 mnemonic만 FieldInfoRequest로 다시 조회한다.
3-3. 알려진 NSN으로 본문 시험
다음 네 건은 맥 자료에 NSN이 남아 있어 단말 화면과 API 응답을 대조할 수 있다.
TIUUO0KJH6V7 엔비디아 CDS 급등
TJ29WO33O5C0 US스틸 등급 철회
TIWF26KJH6V7 S&P글로벌 실적 미스
TJ09ZL33O5C0 Freeport LNG 전망 상향
스키마 또는 필드 사전에서 NSN/본문 요청 경로가 확인된 경우에만 요청한다.
검증 기준:
- 헤드라인과 NSN 일치
- 본문 글자 수 기록
- 단말에서 연 기사와 첫 문단·마지막 문단 표본 일치
- 단순 1~2줄 요약, 링크, “단말에서 확인” 문구만 오면 본문 확보 실패
- 권한 오류, field not applicable, 빈 응답을 구분
3-4. 검색 조건 시험
검색 operation이 실제 schema에 존재하는 경우에만 아래 네 검색을 수행한다. 조건 문법은 스키마와 단말 도움말에서 확인한 값을 사용한다.
- 한국 발행사·한국물만
- 등급 상향·하향, 전망 변경, watch 변경만
- 신규 회사채 발행·가격 확정·수요·신규발행 프리미엄
- 인수합병·자본조달·대규모 투자·자산매각
각 검색에 대해 확인할 항목:
- 날짜 시작·종료 조건 존재 여부
- 발행사/증권 식별자 조건 존재 여부
- topic/category/source/language 조건 존재 여부
- 결과 상한
- 20건을 넘는 결과가 오는지
- pagination, continuation token 또는
PARTIAL_RESPONSE존재 여부 - 결과별 NSN, 게시시각, source, 관련 종목, headline 제공 여부
서버 검색이 없고 종목별 최근 뉴스 필드만 있으면 이를 HIGRAD 전량 대체로 포장하지 않는다. 보유·Axe 발행사 뉴스 보강용 제한 경로로 분류한다.
3-5. 과거 307건 복구 시험
날짜 범위 검색이 확인됐을 때만 다음 기간을 조회한다.
| 날짜 | HIGRAD 제목상 총건수 | 이메일 확인 | 미확인 |
|---|---|---|---|
| 2026-07-28 | 97 | 20 | 77 |
| 2026-07-29 | 65 | 20 | 45 |
| 2026-07-30 | 122 | 20 | 102 |
| 2026-07-31 | 103 | 20 | 83 |
성공 기준:
- 동일 검색조건·날짜대에서 일별 건수가 HIGRAD 제목상 건수와 대체로 일치
- 20건 초과 결과가 실제로 수집됨
- 모든 결과에 NSN 또는 안정적인 고유번호 존재
- 본문 가능 건/불가능 건 수량 구분
- 중복 제거 전·후 수량 모두 기록
검색 문법이나 권한 차이로 건수가 다르면 원인을 확인하기 전 복구 성공으로 쓰지 않는다. 날짜 검색이 없거나 상한이 20건이면 307건은 BLPAPI로 복구 못 함으로 보고한다.
4. 1단계 결과에 따른 판정
| 실측 결과 | 판정 | 다음 행동 |
|---|---|---|
| 검색+날짜+NSN+본문 모두 가능 | 직접 수집기 구축 | 아래 5~8절 그대로 구현 |
| 검색·날짜 가능, 본문 불가 | 헤드라인 전량 수집 가능 | NSN별 본문 경로를 별도 확인. 본문 없는 자동요약 금지 |
| 종목별 최근 뉴스만 가능 | 부분 보강 | PRTU·Sell Axe 발행사 모니터에만 사용. HIGRAD 대체 금지 |
| 20건 상한 또는 과거 검색 불가 | 절단 문제 미해결 | 이메일과 차이 없음. 지난 307건 복구 실패 표시 |
| 뉴스 관련 operation/field 없음 | BLPAPI 뉴스 경로 없음 | Bloomberg Help에 Desktop API 뉴스 접근·내보내기 가능 여부 문의. 단말 검색 화면의 공식 export 경로는 확인 후 별도 설계 |
5. 직접수집 가능할 때의 수집기 구조
파일명: bloomberg_credit_news.py
모듈
capability.py: 서비스·operation·field manifest 검증search.py: 기간·검색조건별 헤드라인과 NSN 수집story.py: NSN별 본문 수집normalize.py: 시간·발행사·증권·topic 정규화filter.py: 노이즈 제거와 중요도 부여cluster.py: 같은 사건의 속보·업데이트·등급사 후속보도 묶기brief.py: 본문 근거 요약export.py: 원시자료·선별결과·해리용 요약 출력
실행 방식
- Bloomberg 로그인과 Desktop API가 살아 있을 때만 실행
- 시작 시 마지막 성공시각 이후를 먼저 백필
- 과거 검색이 지원되면 10~15분 간격 증분수집
- 과거 검색이 지원되지 않으면 PC가 꺼진 시간은 자동 복구할 수 없으므로 HIGRAD 메일을 비상 보완으로 유지
- 동일 NSN은 한 번만 저장하되 수정·업데이트 시각이 있으면 revision 보존
6. 뉴스 선별 규칙
무조건 남길 것
- PRTU 보유·관심종목, Sell Axe 발행사 직접 뉴스
- 한국 발행사·한국 정부/공기업·한국계 금융기관의 외화채 뉴스
- 실제 등급 상향·하향, 전망 변경, watch 등재·해제, 등급 철회
- 대형 신규발행, 발행 취소·연기, 가격 확정, 수요, 신규발행 프리미엄
- 인수합병, LBO, 분할, 자산매각, 대규모 투자
- 채권 발행·차환·텐더·바이백·배당·자사주매입 등 자본조달과 채권자순위 변화
버릴 것
- 미국 지방정부·학교구·대학·병원·공항·수도공사 등 지방채 뉴스
- “평균 대비 거래량 2배” 같은 거래량 색깔
- 매일 반복되는 단순 스프레드 확대·축소 자동 스크린
- 등급 유지+전망 안정처럼 신용 판단이 바뀌지 않은 알림
예외: 보유·Sell Axe 발행사는 위 버림 규칙에 걸려도 별도 보유물건 모니터에 남긴다.
잠정 중요도
| 등급 | 조건 | 용도 |
|---|---|---|
| A | 보유·Axe 직접 이슈, 한국물, 실제 등급변경, 대형 M&A·자본조달 | 당일 해리 확인·본문 요약 |
| B | 대형발행·수요·NIC, 섹터 대표기업 실적·투자계획 | 주간 발표와 학습 |
| C | 배경 뉴스, 반복 업데이트 | 사건 묶음의 보조 근거 |
| DROP | 지방채, 거래량 색깔, 무변화 등급, 반복 스크린 | 저장은 원시층에만, 요약 제외 |
대형발행 금액 기준은 임의로 확정하지 않는다. 최근 US IG 주간 발행분포를 본 뒤 데스크 기준을 정한다. 그 전에는 금액 상위 10%와 10억달러 이상을 각각 표시만 하고 어느 하나를 공식 기준으로 쓰지 않는다.
7. 본문 요약 규칙
뉴스 한 건이 아니라 같은 사건을 하나로 묶어 다음 네 줄로 만든다.
[사실] 본문에서 확인된 사건과 숫자
[채권 영향] 레버리지·현금흐름·순위·공급·등급 중 무엇이 바뀌는지
[해리가 볼 것] 해당 채권 OAS, 신규발행 가격, 등급 트리거 등 다음 확인값
[근거] NSN, 게시시각, 원문 보유 여부
금지:
- 헤드라인만 보고 본문 내용을 추정
- 등급 철회 사유, 인수자금 조달, 스프레드 방향을 본문 근거 없이 단정
- 지방채·거래량 색깔을 요약 앞부분에 배치
- 한 사건의 속보와 업데이트를 여러 핵심 이슈처럼 중복 집계
GPT·Claude 요약은 규칙 필터와 본문 확보 후 실행한다. Bloomberg 본문을 외부 모델로 보내도 되는지는 회사 보안정책과 Bloomberg 계약을 먼저 확인한다. 확인 전에는 원문을 Windows 로컬에 두고, 모델에는 해리가 승인한 범위만 전달한다.
8. 저장 형식
원시층 news_raw_YYYYMMDD.jsonl
nsn, headline, body, body_status, provider, published_at, updated_at,
related_securities, issuers, topics, language,
query_name, service, request_type, collected_at,
entitlement_status, error_text
선별층 news_filtered_YYYYMMDD.jsonl
event_id, nsn_list, issuer, event_type, importance,
keep_reason, drop_reason, portfolio_match, axe_match, kp_flag,
headline, body_evidence, credit_impact, follow_up
해리용 Bloomberg_크레딧뉴스_YYYYMMDD.md
순서:
- 보유·Sell Axe 직접 이슈
- 한국물
- 등급변경
- 인수합병·자본조달
- 대형발행·수요
- 이번 주에 확인할 질문
- 수집 한계: 전체 수, 본문 성공 수, 권한·누락 수
원문 NSN은 항상 남긴다. 본문은 외부 공유 파일에 넣지 않고 Windows 내부 원시층에 보관한다.
9. 검증 조건
- 같은 기간 HIGRAD 메일보다 더 많은 헤드라인을 가져왔는지
- 한 쿼리에서 20건 초과 수집을 실제 확인했는지
- 알려진 NSN 4건 중 몇 건의 본문이 단말과 일치했는지
- 지방채와 거래량 색깔이 해리용 결과에서 0건인지
- 한국물·등급변경·대형발행·M&A·자본조달 표본을 사람이 확인했는지
- 같은 사건 중복이 하나로 묶였는지
- 권한 오류·본문 미지원·검색 상한을 정상 빈 결과와 구분했는지
- 7월 28~31일 387건/미확인 307건 복구 수량을 날짜별로 보고했는지
10. 보고 형식
다음 표로만 1차 진단 결과를 보고한다.
| 질문 | 실측 결과 | 근거 | 판정 |
|---|---|---|---|
| BLPAPI 뉴스검색 가능 | service/operation/schema | 가능/불가/부분 | |
| 본문 가능 | NSN 4건 성공 수·글자수 | 가능/불가/부분 | |
| 검색조건 가능 | 지원 조건과 결과 수 | 가능/불가/부분 | |
| 과거뉴스 가능 | 7/28~7/31 날짜별 수 | 가능/불가/부분 | |
| 20건 상한 해소 | 최대 수집 건수·pagination | 해소/미해소 | |
| 지난 307건 복구 | 복구 건수 | 복구/일부/실패 |
기능이 없거나 권한이 막히면 그 사실이 결과다. 다른 뉴스나 이메일을 대체물로 가져와 BLPAPI 성공처럼 보고하지 않는다.
공식 근거
- Bloomberg Open API Core Developer Guide — 서비스 목록과
srcref,pagedata,apiflds역할: https://data.bloomberglp.com/professional/sites/10/2017/03/BLPAPI-Core-Developer-Guide.pdf - Bloomberg BLPAPI Python
Service—operations(),getOperation(),numOperations(): https://bloomberg.github.io/blpapi-docs/python/3.24.2/_autosummary/blpapi.Service.html - Bloomberg BLPAPI Python
Operation—requestDefinition(),responseDefinitions(): https://bloomberg.github.io/blpapi-docs/python/3.24.2/_autosummary/blpapi.Operation.html - Bloomberg API Library — 현재 Windows SDK와 Desktop API 안내: https://professional.bloomberg.com/support/api-library/
- Bloomberg Terminal News — 주제별 개인화·알림 기능: https://professional.bloomberg.com/products/bloomberg-terminal/news/