Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 8 additions & 5 deletions docs/api/websocket-api.md
Original file line number Diff line number Diff line change
Expand Up @@ -351,12 +351,14 @@ from kis_agent.core.client import KISClient
from kis_agent.websocket import WSAgent, SubscriptionType

async def main():
# 클라이언트 초기화
client = KISClient(
# 클라이언트 초기화 (KISConfig를 통한 설정 권장)
from kis_agent.core.config import KISConfig
client = KISClient(config=KISConfig(
app_key="your_app_key",
app_secret="your_app_secret",
account_number="your_account"
)
account_no="12345678",
account_code="01",
))

# WSAgent 생성
approval_key = client.get_ws_approval_key()
Expand Down Expand Up @@ -426,7 +428,8 @@ asyncio.run(main())
```bash
KIS_APP_KEY=your_app_key
KIS_APP_SECRET=your_app_secret
KIS_ACCOUNT_NUMBER=your_account
KIS_ACCOUNT_NO=12345678 # 종합계좌번호 앞 8자리
KIS_ACCOUNT_CODE=01 # 계좌 상품코드
```

### 로깅 설정
Expand Down
67 changes: 36 additions & 31 deletions docs/guides/getting-started.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,8 @@ pip install -e .
# .env 파일
KIS_APP_KEY=your_app_key_here
KIS_APP_SECRET=your_app_secret_here
KIS_ACCOUNT_NUMBER=12345678-01
KIS_ACCOUNT_NO=12345678 # 종합계좌번호 앞 8자리
KIS_ACCOUNT_CODE=01 # 계좌 상품코드 (주식: "01", 선물옵션: "03")
```

### 2. 설정 파일 확인
Expand All @@ -56,49 +57,53 @@ from dotenv import load_dotenv
load_dotenv()

print("App Key:", os.getenv('KIS_APP_KEY')[:10] + "...")
print("Account:", os.getenv('KIS_ACCOUNT_NUMBER'))
print("Account:", os.getenv('KIS_ACCOUNT_NO'), os.getenv('KIS_ACCOUNT_CODE'))
```

## 🔑 기본 인증

### KISClient 초기화
### Agent 초기화 (권장)

`Agent`는 KISClient·인증·각 도메인 API(StockAPI 등)를 하나로 묶은 파사드입니다.
`.env`에서 `KIS_*` 환경변수를 자동으로 읽고 싶으면 `KISConfig.from_env()`를 사용하세요.

```python
from kis_agent.core.client import KISClient

# 클라이언트 생성
client = KISClient(
app_key=os.getenv('KIS_APP_KEY'),
app_secret=os.getenv('KIS_APP_SECRET'),
account_number=os.getenv('KIS_ACCOUNT_NUMBER'),
is_real=True # 실전투자: True, 모의투자: False
from kis_agent import Agent
from kis_agent.core.config import KISConfig

# (a) 환경변수에서 자동 로드
config = KISConfig.from_env()
agent = Agent(
app_key=config.APP_KEY,
app_secret=config.APP_SECRET,
account_no=config.ACCOUNT_NO,
account_code=config.ACCOUNT_CODE,
base_url=config.BASE_URL, # 비워두면 실전투자 URL이 기본
)

# 연결 테스트
print("인증 토큰:", client.get_access_token()[:20] + "...")
# (b) 또는 명시적 매개변수
agent = Agent(
app_key=os.getenv("KIS_APP_KEY"),
app_secret=os.getenv("KIS_APP_SECRET"),
account_no=os.getenv("KIS_ACCOUNT_NO"),
account_code=os.getenv("KIS_ACCOUNT_CODE", "01"),
)
```

## REST API 사용

### 주식 정보 조회
```python
from kis_agent.stock.api import StockAPI

# 계좌 정보 설정
account_info = {
'CANO': os.getenv('KIS_ACCOUNT_NUMBER').split('-')[0],
'ACNT_PRDT_CD': os.getenv('KIS_ACCOUNT_NUMBER').split('-')[1]
}

# 주식 API 초기화
stock_api = StockAPI(client=client, account_info=account_info)

# 삼성전자 현재가 조회
price_data = stock_api.get_stock_price("005930")
print(f"삼성전자 현재가: {price_data['output']['stck_prpr']}원")

# 일일 가격 데이터 조회
daily_data = stock_api.get_daily_price("005930")
print(f"일일 데이터 건수: {len(daily_data)}개")
# Agent를 통해 주식 도메인 API 호출
price = agent.get_stock_price("005930") # 삼성전자
print(f"삼성전자 현재가: {price['output']['stck_prpr']}원")

# 기간별 일봉 데이터
daily = agent.inquire_daily_itemchartprice(
"005930",
start_date="20250101",
end_date="20251231",
)
```

### 계좌 정보 조회
Expand Down
16 changes: 10 additions & 6 deletions examples/export_trading_history.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,17 +53,21 @@ def main():
# 1. KIS 클라이언트 초기화
logger.info("KIS 클라이언트 초기화...")

KISClient(
from kis_agent.core.config import KISConfig
from kis_agent.core.constants import MOCK_BASE_URL

KISClient(config=KISConfig(
app_key=os.getenv("KIS_APP_KEY"),
app_secret=os.getenv("KIS_APP_SECRET"),
account_number=os.getenv("KIS_ACCOUNT_NUMBER"),
is_real=False, # 모의투자로 테스트
)
account_no=os.getenv("KIS_ACCOUNT_NO"),
account_code=os.getenv("KIS_ACCOUNT_CODE", "01"),
base_url=MOCK_BASE_URL, # 모의투자로 테스트
))

# 계좌 정보 설정
account_info = {
"CANO": os.getenv("KIS_ACCOUNT_NUMBER").split("-")[0],
"ACNT_PRDT_CD": os.getenv("KIS_ACCOUNT_NUMBER").split("-")[1],
"CANO": os.getenv("KIS_ACCOUNT_NO"),
"ACNT_PRDT_CD": os.getenv("KIS_ACCOUNT_CODE", "01"),
}

# 2. 날짜 설정 (최근 30일)
Expand Down
21 changes: 12 additions & 9 deletions examples/websocket_multi_subscribe.py
Original file line number Diff line number Diff line change
Expand Up @@ -120,25 +120,28 @@ async def main():

load_dotenv()

from kis_agent.core.config import KISConfig

app_key = os.getenv("KIS_APP_KEY")
app_secret = os.getenv("KIS_APP_SECRET")
account_number = os.getenv("KIS_ACCOUNT_NUMBER")
account_no = os.getenv("KIS_ACCOUNT_NO")
account_code = os.getenv("KIS_ACCOUNT_CODE", "01")

if not all([app_key, app_secret, account_number]):
if not all([app_key, app_secret, account_no]):
print(
"환경변수를 설정해주세요: KIS_APP_KEY, KIS_APP_SECRET, KIS_ACCOUNT_NUMBER"
"환경변수를 설정해주세요: KIS_APP_KEY, KIS_APP_SECRET, KIS_ACCOUNT_NO"
)
return

# 클라이언트 초기화
client = KISClient(
# 클라이언트 초기화 (실전 URL이 기본)
client = KISClient(config=KISConfig(
app_key=app_key,
app_secret=app_secret,
account_number=account_number,
is_real=True, # 실전투자
)
account_no=account_no,
account_code=account_code,
))

account_info = {"CANO": account_number[:8], "ACNT_PRDT_CD": account_number[8:]}
account_info = {"CANO": account_no, "ACNT_PRDT_CD": account_code}

# 감시할 종목 설정
stock_codes = [
Expand Down
Loading