Source code for pyqqq.datatypes

from dataclasses import dataclass
from enum import Enum
from decimal import Decimal
from typing import Optional
import datetime as dtm


[docs] class OrderSide(Enum): SELL = 1 """ 매도 """ BUY = 2 """ 매수 """
[docs] class OrderType(Enum): LIMIT = 0 """ 지정가 """ LIMIT_IOC = 11 """ 지정가, 즉시(일부)체결 그리고 잔량취소 """ LIMIT_FOK = 12 """ 지정가, 즉시 전량 체결 또는 전량취소 """ LIMIT_CONDITIONAL = 2 """ 조건부지정가, 지정가 주문을 넣고 장 마감까지 체결되지 않은 경우 동시호가 가격으로 체결 시킴 """ MARKET = 1 """ 시장가 """ MARKET_IOC = 13 """ 시장가, 즉시 (일부)체결 그리고 잔량취소 """ MARKET_FOK = 14 """ 시장가, 즉시 전량체결 또는 전량취소 """ PRIMARY_PRICE = 3 """ 최우선지정가, 반대방향의 1차호가로 주문 제출 """ BEST_PRICE = 4 """ 최유리지정가, 같은방향의 1차호가로 주문 제출 """ BEST_PRICE_IOC = 15 """ 최유리지정가, 즉시 (일부)체결 그리고 잔량취소""" BEST_PRICE_FOK = 16 """ 최유리지정가, 즉시 전량체결 또는 전량취소""" PRE_MARKET = 5 """ 장전단일가, 장전 단일가 주문 """ AFTER_MARKET = 6 """ 시간외종가, 시간외 종가 주문 """ AFTER_MARKET_SINGLE_PRICE = 7 """ 시간외단일가, 시간외 단일가 주문 """ SELF_STOCK = 8 """ 자사주, 자사주 매수 또는 매도 주문 """ SELF_STOCK_S_OPTION = 9 """ 자사주 S옵션, 자사주 매수 또는 매도 주문 """ SELF_STOCK_MONETARY_TRUST = 10 """ 자기주식금융신탁 """ MOO = 31 """ Market On Open, 해외 주식 주문 유형 (매도시에만 가능)""" LOO = 32 """ Limit On Open, 해외 주식 주문 유형 """ MOC = 33 """ Market On Close, 해외 주식 주문 유형 (매도시에만 가능) """ LOC = 34 """ Limit On Close, 해외 주식 주문 유형 """
[docs] class OrderRequestType(Enum): NEW = 1 """ 신규주문 """ MODIFY = 2 """ 주문수정 """ CANCEL = 3 """ 주문취소 """
[docs] class TransactionStatus(Enum): ORDER = 1 """ 주문 """ EXECUTION = 2 """ 체결 """
[docs] @dataclass class StockPosition: """ 주식 보유 종목 정보를 담는 데이터 클래스입니다. """ asset_code: str """ 종목 코드 """ asset_name: str """ 종목 이름 """ quantity: int """ 보유 수량 """ sell_possible_quantity: int """ 매도 가능 수량 """ average_purchase_price: Decimal """ 평균 매입 가격 """ current_price: Optional[int | Decimal] = None """ 현재 가격 """ current_value: Optional[int | Decimal] = None """ 현재 가치 """ current_pnl: Optional[Decimal] = None """ 현재 손익률 """ current_pnl_value: Optional[int | Decimal] = None """ 현재 손익 금액 """
@dataclass(kw_only=True) class OverseasStockPosition(StockPosition): """ 해외 주식 보유 종목 정보를 담는 데이터 클래스입니다. """ exchange: str """ 거래소 """ currency: str """ 통화 """
[docs] @dataclass class StockOrder: """ 주식 주문 정보를 담는 데이터 클래스입니다. """ order_no: str """ 주문 번호 """ asset_code: str """ 종목 코드 """ side: OrderSide """ 주문 방향 """ price: int | Decimal """ 주문 가격 """ quantity: int """ 주문 수량 """ filled_quantity: int """ 체결 수량 """ pending_quantity: int """ 미체결 수량 """ order_time: dtm.datetime """ 주문 시각 """ filled_price: Optional[int | Decimal] = None """ 체결 가격 """ current_price: Optional[int | Decimal] = None """ 현재 가격 """ is_pending: Optional[bool] = None """ 미체결 여부 """ org_order_no: Optional[str] = None """ 원주문번호 """ order_type: Optional[OrderType] = None """ 주문 유형 """ req_type: Optional[OrderRequestType] = None """ 주문 요청 유형 """
@dataclass(kw_only=True) class OverseasStockOrder(StockOrder): """ 해외 주식 주문 정보를 담는 데이터 클래스입니다. """ exchange: str """ 거래소 """ currency: str """ 통화 """ reject_reason: Optional[str] = None """ 거부 사유 """ order_kr_time: Optional[dtm.datetime] = None """ 한국 기준 주문 시각 """
[docs] @dataclass class OrderEvent: asset_code: str """ 종목 코드 """ order_no: str """ 주문 번호 """ side: OrderSide """ 매도 / 매수 """ order_type: OrderType """ 주문 유형 """ quantity: int """ 주문 수량 """ price: int """ 주문 가격 """ event_type: str """ 이벤트 유형 - accepted, executed, cancelled, rejected """ account_no: Optional[str] = None """ 계좌 번호 """ filled_quantity: Optional[int] = None """ 체결 수량 """ filled_price: Optional[int] = None """ 체결 가격 """ filled_time: Optional[dtm.datetime] = None """ 체결 시각 """ org_order_no: Optional[str] = None """ 원주문번호 """ average_purchase_price: Optional[Decimal] = None """ 평균 매입 가격 """ @staticmethod def with_pending_order(account_no: str, order: StockOrder): """ 미체결 주문 정보로 이벤트 생성 Args: account_no (str): 계좌 번호 order (StockOrder): 주문 정보 """ return OrderEvent( asset_code=order.asset_code, order_no=order.order_no, side=order.side, order_type=order.order_type, quantity=order.quantity, price=order.price, status="accepted", account_no=account_no, filled_quantity=order.filled_quantity, filled_price=order.filled_price, filled_time=None, org_order_no=order.org_order_no, )
[docs] @dataclass class TradingHistory: """거래내역 정보를 담는 데이터 클래스입니다""" date: str """ 거래일자 (YYYYMMDD) """ order_no: str """ 주문번호 """ side: str """ 매도:sell / 매수:buy """ asset_code: str """ 종목코드 """ quantity: int """ 수량 """ filled_price: int """ 체결가격 """ average_purchase_price: Optional[float] = None """ 평균 매입가 """ tax: Optional[float] = None """ 제세금 (증권거래세+지방소득세) """ fee: Optional[float] = None """ 수수료 """ pnl: Optional[float] = None """ 손익금액 """ pnl_rate: Optional[float] = None """ 손익률 """ executed_time: Optional[int] = None """ 체결시간 """ partial: Optional[bool] = None """ 일부체결 여부 """