174 lines
5.7 KiB
Python
174 lines
5.7 KiB
Python
import asyncio
|
|
import json
|
|
from datetime import datetime, timedelta
|
|
from server import (
|
|
inquery_stock_price,
|
|
inquery_balance,
|
|
order_stock,
|
|
inquery_order_list,
|
|
inquery_order_detail,
|
|
inquery_stock_info,
|
|
inquery_stock_history,
|
|
inquery_stock_ask,
|
|
order_overseas_stock,
|
|
inquery_overseas_stock_price
|
|
)
|
|
|
|
async def test_domestic_stock(symbol: str, name: str):
|
|
"""Test domestic stock price inquiry
|
|
|
|
Args:
|
|
symbol: Stock symbol (e.g. "005930")
|
|
name: Stock name (e.g. "Samsung Electronics")
|
|
"""
|
|
try:
|
|
result = await inquery_stock_price(symbol=symbol)
|
|
print(f"\n{name} ({symbol}):")
|
|
print(f"Current price: {result['stck_prpr']}")
|
|
print(f"Change: {result['prdy_vrss']} ({result['prdy_ctrt']}%)")
|
|
print(f"Volume: {result['acml_vol']}")
|
|
print(f"Trading value: {result['acml_tr_pbmn']}")
|
|
except Exception as e:
|
|
print(f"Error in {name} test: {str(e)}")
|
|
|
|
async def test_balance():
|
|
"""Test balance inquiry"""
|
|
try:
|
|
result = await inquery_balance()
|
|
print("\nAccount Balance Response:")
|
|
print(json.dumps(result, indent=2, ensure_ascii=False))
|
|
except Exception as e:
|
|
print(f"Error testing balance: {e}")
|
|
|
|
async def test_order_stock():
|
|
"""Test stock order"""
|
|
try:
|
|
# 시장가 매수
|
|
result = await order_stock("005930", 1, 0, "buy")
|
|
print("\nMarket Price Buy Order Response:")
|
|
print(json.dumps(result, indent=2, ensure_ascii=False))
|
|
|
|
# 지정가 매수
|
|
result = await order_stock("005930", 1, 55000, "buy")
|
|
print("\nLimit Price Buy Order Response:")
|
|
print(json.dumps(result, indent=2, ensure_ascii=False))
|
|
|
|
# 시장가 매도
|
|
result = await order_stock("005930", 1, 0, "sell")
|
|
print("\nMarket Price Sell Order Response:")
|
|
print(json.dumps(result, indent=2, ensure_ascii=False))
|
|
except Exception as e:
|
|
print(f"Error testing stock order: {e}")
|
|
|
|
async def test_overseas_order():
|
|
"""Test overseas stock order"""
|
|
try:
|
|
# AAPL 지정가 매수
|
|
result = await order_overseas_stock(
|
|
symbol="AAPL",
|
|
quantity=1,
|
|
price=150.00,
|
|
order_type="buy",
|
|
market="NASD"
|
|
)
|
|
print("\nOverseas Stock Buy Order Response:")
|
|
print(json.dumps(result, indent=2, ensure_ascii=False))
|
|
|
|
# AAPL 현재가 조회
|
|
result = await inquery_overseas_stock_price(
|
|
symbol="AAPL",
|
|
market="NASD"
|
|
)
|
|
print("\nOverseas Stock Price Response:")
|
|
print(json.dumps(result, indent=2, ensure_ascii=False))
|
|
except Exception as e:
|
|
print(f"Error testing overseas stock order: {e}")
|
|
|
|
async def test_order_list():
|
|
"""Test order list inquiry"""
|
|
try:
|
|
# 오늘 날짜로 테스트
|
|
today = datetime.now().strftime("%Y%m%d")
|
|
result = await inquery_order_list(today, today)
|
|
print("\nOrder List Response:")
|
|
print(json.dumps(result, indent=2, ensure_ascii=False))
|
|
except Exception as e:
|
|
print(f"Error testing order list: {e}")
|
|
|
|
async def test_order_detail():
|
|
"""Test order detail inquiry"""
|
|
try:
|
|
# 오늘 날짜로 테스트
|
|
today = datetime.now().strftime("%Y%m%d")
|
|
result = await inquery_order_detail("", today) # 주문번호 없이 테스트
|
|
print("\nOrder Detail Response:")
|
|
print(json.dumps(result, indent=2, ensure_ascii=False))
|
|
except Exception as e:
|
|
print(f"Error testing order detail: {e}")
|
|
|
|
async def test_stock_info():
|
|
"""Test stock info inquiry"""
|
|
try:
|
|
# 삼성전자 1주일 데이터 테스트
|
|
end_date = datetime.now().strftime("%Y%m%d")
|
|
start_date = (datetime.now() - timedelta(days=7)).strftime("%Y%m%d")
|
|
result = await inquery_stock_info("005930", start_date, end_date)
|
|
print("\nStock Info Response:")
|
|
print(json.dumps(result, indent=2, ensure_ascii=False))
|
|
except Exception as e:
|
|
print(f"Error testing stock info: {e}")
|
|
|
|
async def test_stock_history():
|
|
"""Test stock history inquiry"""
|
|
try:
|
|
# 삼성전자 1주일 데이터 테스트
|
|
end_date = datetime.now().strftime("%Y%m%d")
|
|
start_date = (datetime.now() - timedelta(days=7)).strftime("%Y%m%d")
|
|
result = await inquery_stock_history("005930", start_date, end_date)
|
|
print("\nStock History Response:")
|
|
print(json.dumps(result, indent=2, ensure_ascii=False))
|
|
except Exception as e:
|
|
print(f"Error testing stock history: {e}")
|
|
|
|
async def test_stock_ask():
|
|
"""Test stock ask price inquiry"""
|
|
try:
|
|
# 삼성전자 호가 테스트
|
|
result = await inquery_stock_ask("005930")
|
|
print("\nStock Ask Response:")
|
|
print(json.dumps(result, indent=2, ensure_ascii=False))
|
|
except Exception as e:
|
|
print(f"Error testing stock ask: {e}")
|
|
|
|
async def test_stock_market():
|
|
"""Test stock market index inquiry"""
|
|
try:
|
|
result = await inquery_stock_market()
|
|
print("\nStock Market Response:")
|
|
print(json.dumps(result, indent=2, ensure_ascii=False))
|
|
except Exception as e:
|
|
print(f"Error testing stock market: {e}")
|
|
|
|
async def main():
|
|
"""Run all tests"""
|
|
print("Starting KIS MCP Server tests...")
|
|
|
|
# Domestic stock tests
|
|
await test_domestic_stock("005930", "Samsung Electronics")
|
|
await test_balance()
|
|
await test_order_stock()
|
|
await test_order_list()
|
|
await test_order_detail()
|
|
await test_stock_info()
|
|
await test_stock_history()
|
|
await test_stock_ask()
|
|
await test_stock_market()
|
|
|
|
# Overseas stock tests
|
|
await test_overseas_order()
|
|
|
|
print("\nAll tests completed!")
|
|
|
|
if __name__ == "__main__":
|
|
asyncio.run(main())
|
|
|