""" 키움증권 웹소켓 실시간 데이터 타입 상수 """ # 실시간 데이터 타입 REALTIME_TYPES = { '04': '잔고', '00': '주문체결', '0A': '주식기세', '0B': '주식체결', '0C': '주식우선호가', '0D': '주식호가잔량', '0E': '주식시간외호가', '0F': '주식당일거래원', '0G': 'ETF NAV', '0H': '주식예상체결', '0J': '업종지수', '0U': '업종등락', '0g': '주식종목정보', '0m': 'ELW 이론가', '0s': '장시작시간', '0u': 'ELW 지표', '0w': '종목프로그램매매', '1h': 'VI발동/해제' } # 실시간 데이터 필드 매핑 (잔고 04 기준) BALANCE_FIELDS = { '9201': '계좌번호', '9001': '종목코드', '917': '신용구분', '916': '대출일', '302': '종목명', '10': '현재가', '930': '보유수량', '931': '매입단가', '932': '총매입가', '933': '주문가능수량', '945': '당일순매수량', '946': '매도/매수구분', '950': '당일총매도손익', '951': 'Extra Item', '27': '매도호가', '28': '매수호가', '307': '기준가', '8019': '손익률', '957': '신용금액', '958': '신용이자', '918': '만기일', '990': '당일실현손익(유가)', '991': '당일실현손익율(유가)', '992': '당일실현손익(신용)', '993': '당일실현손익율(신용)', '959': '담보대출수량', '924': 'Extra Item' } # 주식체결 필드 (0B) STOCK_TRADE_FIELDS = { '9001': '종목코드', '900': '종목명', '10': '현재가', '11': '전일대비', '12': '등락율', '27': '매도호가', '28': '매수호가', '15': '거래량', '13': '누적거래량', '14': '누적거래대금', '16': '시가', '17': '고가', '18': '저가', '25': '전일대비구분', '26': '전일거래량대비', '29': '거래대금증감', '30': '전일거래량대비', '31': '거래회전율', '32': '거래비용', '311': '종목코드명', '567': '체결강도', '568': '체결구분', '569': '체결시간', '570': '체결수량', '571': '체결가격', '572': '체결구분', '573': '체결시간', '574': '체결수량', '575': '체결가격' } # 주식호가 필드 (0C) STOCK_QUOTE_FIELDS = { '9001': '종목코드', '900': '종목명', '27': '매도호가1', '28': '매수호가1', '29': '매도호가2', '30': '매수호가2', '31': '매도호가3', '32': '매수호가3', '33': '매도호가4', '34': '매수호가4', '35': '매도호가5', '36': '매수호가5', '37': '매도호가6', '38': '매수호가6', '39': '매도호가7', '40': '매수호가7', '41': '매도호가8', '42': '매수호가8', '43': '매도호가9', '44': '매수호가9', '45': '매도호가10', '46': '매수호가10', '47': '매도호가수량1', '48': '매수호가수량1', '49': '매도호가수량2', '50': '매수호가수량2', '51': '매도호가수량3', '52': '매수호가수량3', '53': '매도호가수량4', '54': '매수호가수량4', '55': '매도호가수량5', '56': '매수호가수량5', '57': '매도호가수량6', '58': '매수호가수량6', '59': '매도호가수량7', '60': '매수호가수량7', '61': '매도호가수량8', '62': '매수호가수량8', '63': '매도호가수량9', '64': '매수호가수량9', '65': '매도호가수량10', '66': '매수호가수량10' } # 주식기세 필드 (0A) STOCK_TREND_FIELDS = { '9001': '종목코드', '900': '종목명', '10': '현재가', '11': '전일대비', '12': '등락율', '27': '매도호가', '28': '매수호가', '15': '거래량', '13': '누적거래량', '14': '누적거래대금', '16': '시가', '17': '고가', '18': '저가', '25': '전일대비구분', '26': '전일거래량대비', '29': '거래대금증감', '30': '전일거래량대비', '31': '거래회전율', '32': '거래비용', '311': '종목코드명', '567': '체결강도', '568': '체결구분', '569': '체결시간', '570': '체결수량', '571': '체결가격', '572': '체결구분', '573': '체결시간', '574': '체결수량', '575': '체결가격' } # 필드 매핑 딕셔너리 FIELD_MAPPINGS = { '04': BALANCE_FIELDS, '0B': STOCK_TRADE_FIELDS, '0C': STOCK_QUOTE_FIELDS, '0A': STOCK_TREND_FIELDS } def get_field_name(type_code: str, field_code: str) -> str: """실시간 데이터 타입과 필드 코드로 필드명을 반환""" if type_code in FIELD_MAPPINGS: return FIELD_MAPPINGS[type_code].get(field_code, field_code) return field_code def get_type_name(type_code: str) -> str: """실시간 데이터 타입 코드로 타입명을 반환""" return REALTIME_TYPES.get(type_code, type_code)