https://minstack.tistory.com/7
[채권 1] K-Bond 메신저 장외호가 DB 쌓기
보호되어 있는 글입니다. 내용을 보시려면 비밀번호를 입력하세요.
minstack.tistory.com
1편에서 장외채권 호가를 MySQL에 실시간으로 쑤셔넣는 데 성공하였다.
이제 본격적으로 '내용물'을 분석할 차례.
국고, 통안 그리고 기타 잡것들
장외 호가창에는 국고, 통안, 공사채, 은행채, 회사채 등 온갖 종목들이 뒤엉켜 올라온다.
무턱대고 이 호가들을 5열 종대로 나래비 세울 수는 없는 노릇.
가장 만만한 놈부터 각개격파 들어간다.
크레딧물은 호가에 종목명(그것도 약칭 예. 롯캐(롯데캐피탈), 엔솔(LG에너지솔루션))만 덜렁 올라오기도 하고,
종목 갯수만 2~3만개는 될거라 현 단계에서 코드로 파악하기는 아직 어려움.
얘들은 일단 재껴두고 국고, 통안부터 조진다.
1. 통안채 먼저 조지기
제일 만만한 통안채부터.
- 통당: 가장 최근 발행한 통안채 2년물
- 통딱: 오늘 막 발행한 통안채 (신선도 100%)
- 구통: 직전 통당
- 구구통: 구통의 전임자
- 삼통: 통안채 3년물
- 구삼통: 삼통의 전임자
더 자세한 내용은 아래 기사 참고.
https://news.einfomax.co.kr/news/articleView.html?idxno=4168728
새 통안채 3년물 별명은 '삼통'…이유 있는 채권시장의 은어들 - 연합인포맥스
(서울=연합인포맥스) 이민재 기자 = 서울 채권시장에서 최근 처음 발행된 통화안정증권(통안채) 3년물에 '삼통'이라는 별명이 붙었다.통안채 2년물만 보유하던 별칭을 통안채 3년물도 갖게 되면
news.einfomax.co.kr
여튼 이런 놈들은 그냥 저 단어만 포함되면 바로 통안채로 분류 가능,
tong_alias_keywords = {'구통', '구구통', '통당', '삼통', '통딱', '구삼통'}
tong_keywords = tong_alias_keywords | {'통안', '토앋ㅇ'}
for kw in tong_keywords:
if kw in msg_clean:
alias = kw if kw in tong_alias_keywords else None
return alias, '통안채'
# 날짜형 통안채도 존재함: 23.03.20통
if re.search(r"\d{2}\.?\d{1,2}\.?\d{0,2}통", msg_clean):
return None, '통안채'
요약:
- 전문용어는 그대로 alias로 쓰고 '통안채'로 분류
- YY.MM.DD통 형식도 '통안채'로 분류
- 토앋ㅇ 같은 기괴한 오타도 포함 (현실은 가끔 공포임)
2. 국고채는 조금 더 복잡하다
기본적으로 국고 약칭은 YY-XX 형식이다.
예: 25년에 발행된 세 번째 국고채 → 25-3
alias_matches = re.findall(r"\d{2}-\d{1,2}", msg)
regex로 '-' 앞뒤 숫자 형식이면 일단 국고 후보 등극.
하지만 문제는...
- SK이노베이션25-2 팔자
이런 놈도 잡혀버린다. 이건 회사채지 국고 아님.
2-1. Whitelist 기반 정밀 타격
따라서 국고만 따로 걸러내려면 국고 전체 리스트가 필요하다.
외부에서 이를 확보하는 방법은,
내 짬밥으로 보건대 금융투자협회 채권정보센터가 가장 쉽다.
금융투자협회 채권정보센터
www.kofiabond.or.kr

여기서 전체 국고 종목을 Excel로 다운받고 우측에 약칭 + 중분류를 수기로 매핑 후 BOND_MASTER 테이블에 넣어놓는다.
어차피 국고 3, 6, 9, 12월에 발행하니까 앞으로 3개월은 놀아도 된다.
참고로 국고채도 종류 졸라게 많다.
국고채, 원금분리, 이자분리, 국민주택1종, 국민주택2종, 물가연동, 재정증권, 외국환평형기금채권, (최근 새로생긴) 개인투자용국채
일단 순수 국고채만 조진다.

alias_whitelist = {entry["alias"] for entry in whitelist_entries}
BOND_MASTER를 Whitelist에 리스트업 하고,
여기에 포함된 약칭은 좀 더 국고채 유력후보.
2-2. 국고인 척 하는 첩자들
- 국주 25-2 팔자
→ 이건 ‘국민주택채권’이다. 국고 아님.
이런 걸 걸러낼 낚시 접두어 리스트를 만들고 걸러낸다.
company_keywords = {
'국주', '외평', '이노베이션', '삼성', '현대', 'SK', 'LG', '롯데'
}
- 경험 상 국주, 외평이 낚시 95% 이상.
- 나머지는 일단 넣어봄.
앞 단어 기준으로 거르는데, 좀 더 자세하게는 이렇게 처리했다.
valid_preceding_words = {
'사자', '팔자', '사요', '매수', '매도', '관심', '거래', '교체', '국고'
}
tokens = msg.split()
for i, token in enumerate(tokens):
token_clean = re.sub(r"[^\d\-]", "", token)
if token_clean == alias:
if i > 0:
preword = tokens[i - 1].strip().replace(".", "")
if preword in company_keywords:
break
if re.fullmatch(r"[가-힣]+", preword) and preword not in valid_preceding_words:
break
return alias, '국고채'
이 코드들을 함수로 싸서 is_kooktong() 으로 이름 붙여준다.
KBOND_MESSAGE.CONTENT 컬럼을 is_kooktong() 함수에 통과시키면 국고, 통안 판별해 줌.
3. 추출 결과 MySQL DB 별도 테이블에 저장

테이블 리스트:
- KBOND_MESSAGE: 원본 메시지 저장용
- KBOND_QUOTE: 실제 분석 결과 저장용 (별도 테이블)
KBOND_QUOTE에는 다음을 저장한다:
- id: 원본 메시지 ID (kbond_message.id와 FK로 연결)
- alias: 추출된 약칭 (ex. 25-3)
- bond_type: '국고채' 또는 '통안채'
- parse_status: 분석 상태 (VALID, UNPARSED 등)
SELECT * FROM kbond_quote WHERE bond_type = '국고채' AND alias = '25-3';
가격이나 방향은 아직 모르더라도,
이제 특정일자에 25-3 국고 호가가 몇 번 튀어나왔는지는 파악 가능하다.
이런 것도 쌓이면 신호가 될 수 있지 않을까?
마무리
1편 내용이 갈치 가운데 등뼈를 들어내는 수준이었다면,
이번 2편 내용은 고등어 살에 가시를 발라낸 수준 정도로 평가한다.
다음은 청어 잔가시.
국통의 가격과 방향을 파악해야 한다.
헬게이트를 열고 깊은 심연으로 들어갈 차례.
야 블로그 매일쓰기 진짜 어렵다.
'Trading & Coding' 카테고리의 다른 글
| [채권 3+초고급엑셀 2] 국채 Tenor별 상대가치분석 자동화 구현(Overview) (5) | 2025.08.19 |
|---|---|
| [엑셀 1] 함수 안먹힐 때, 쉼표 포함 숫자 1초 변환법(텍스트 나누기 활용) (7) | 2025.08.12 |
| [채권 1] K-Bond 메신저 장외호가 DB 쌓기 (3) | 2025.06.27 |
| [데이터수집] ccxt로 binance 1분봉 실전 수집기 만들기 (0) | 2025.06.22 |
| [Backtest] ATR기반 Trailing Stop전략: 한 줄 버그가 전략을 속임 (3) | 2025.06.15 |