토스증권 Open API로 전략 매수와 자동매매 루프를 만들기 위한 Python SDK입니다.
tossinvest-strategy는 단순한 API 호출 래퍼보다 한 단계 더 나아가, 사용자가 직접 만든 투자 전략을 StrategyManager와 Scheduler에 연결해 계속 실행할 수 있도록 돕습니다.
계좌 조회, 주문, 시장 데이터 같은 기본 API는 물론이고, 전략 상태 저장과 거래 이력 관리까지 SDK 안에서 함께 다룰 수 있습니다.
자세한 개발/운영 기준은 PROJECT_GUIDE.md를 참고하세요.
- 🧩 전략 중심 구조:
BaseStrategy,BaseStrategyConfig를 상속해 나만의 매수/매도 전략을 만들 수 있습니다. - 🔁 계속 실행되는 자동매매 루프:
StrategyManager가 여러 전략을 관리하고,Scheduler가 시장 시간에 맞춰 반복 실행합니다. - 💾 상태 저장/복구: 장시간 실행과 재시작을 고려해
StrategyState,TradeHistory로 전략 상태와 거래 이력을 보존합니다. - 📈 토스증권 Open API 래퍼: 계좌, 주문, 시장, 캘린더, 종목, 랭킹, 지표, 조건주문 API를 Python 객체로 호출합니다.
- ⚡ 실시간 WebSocket: 체결, 호가, 내 주문 이벤트를 인증된 연결로 구독합니다.
- 🧪 샘플 전략 포함: 매일 특정 조건에서 주식을 모으는
StockAccumulationStrategy예제를 제공합니다.
- PyPI 프로젝트 설명에 0.2.0의 REST OpenAPI, WebSocket, 실시간 설치 및 사용 예시를 반영
- TossInvest REST OpenAPI
1.2.14반영 및 거래소별 전체 종목 조회client.stock.list()추가 - AsyncAPI
1.2.2기반client.realtime추가: 체결, 호가, 내 주문 구독, ACK/에러 수신, keepalive, 수동 재연결 - REST/AsyncAPI 명세 버전과 공식 소스 URL을 SDK에 포함하고 동기화 도구 제공
pip install tossinvest-strategy실시간 WebSocket을 사용하려면 선택 의존성을 설치합니다.
pip install "tossinvest-strategy[realtime]"Python import 이름은 패키지명과 다릅니다. 코드에서는 tossinvestsdk를 사용합니다.
from tossinvestsdk import TossClient
client = TossClient()
prices = client.market.price(["AAPL", "MSFT"])
portfolio = client.account.portfolio()
open_orders = client.order.open_orders()
print(prices)
print(portfolio)
print(open_orders)client.realtime은 REST 인증 토큰을 재사용합니다. 구독 변경은 토스증권 프로토콜의 선언형 전체 교체 규칙에 맞춰 처리됩니다.
from tossinvestsdk import TossClient
with TossClient() as client:
realtime = client.realtime.connect()
realtime.subscribe_trades(["TQQQ", "SOXL"], market="US")
realtime.subscribe_orderbooks("005930", market="KR")
while True:
message = realtime.receive()
if message.type == "message":
print(message.topic, message.data)realtime.ping()으로 keepalive를 보내고, 연결이 끊긴 뒤에는 realtime.reconnect()로 인증과 마지막 구독 집합을 복원할 수 있습니다. 공개 체결 연결만 확인하려면 다음 예제를 사용합니다.
python examples/realtime_smoke.py --symbol TQQQ --market US아래 예시는 삼성전자(005930) 현재가가 250,000원 미만이면 하루 한 번 1주를 시장가로 매수하는 샘플 전략입니다.
from tossinvestsdk import TossClient, Scheduler, StrategyManager
from tossinvestsdk.strategy.samples import (
StockAccumulationConfig,
StockAccumulationStrategy,
)
client = TossClient()
manager = StrategyManager(client, market="KR")
manager.add(
StockAccumulationStrategy(
StockAccumulationConfig(
symbol="005930",
target_price=250000,
quantity=1,
)
)
)
Scheduler(client, manager, market="KR").run_forever(interval=30)이 구조를 그대로 활용하면 삼성전자뿐 아니라 여러 종목, 여러 전략을 하나의 실행 루프에서 함께 운용할 수 있습니다.
핵심 패키지는 tossinvestsdk입니다.
| 영역 | 설명 |
|---|---|
TossClient |
인증, 토큰, HTTP 요청, API 객체를 묶는 진입점 |
client.account |
계좌, 잔고, 포트폴리오 조회 |
client.order |
매수/매도 주문, 주문 조회/취소 |
client.market |
가격, 캔들, 호가, 시장 시간 조회 |
client.stock |
종목 정보 및 거래소별 전체 종목 조회 |
client.realtime |
체결, 호가, 내 주문 이벤트 WebSocket 구독 |
client.ranking |
랭킹 API |
client.indicator |
지표 API |
client.conditional |
조건주문 API |
StrategyManager |
여러 전략 관리 |
Scheduler |
시장 시간 기반 반복 실행 |
StrategyState / TradeHistory |
전략 상태와 거래 이력 저장 |
SDK는 기본적으로 실행 중인 메인 스크립트와 같은 디렉터리의 credentials 파일을 읽고, 토큰 캐시는 token.json에 저장합니다.
이 저장소에는 실제 인증 정보가 아니라 샘플 파일만 포함합니다.
credentials.example: 사용자가 복사해서 채워 넣을 인증 파일 템플릿token.example.json: 토큰 캐시 구조 예시
Windows PowerShell 예시:
Copy-Item credentials.example credentialscredentials 파일 형식:
client_id: your_client_id
client_secret: your_client_secret
명시적으로 경로를 넘길 수도 있습니다.
from tossinvestsdk import TossClient
client = TossClient(
credential_file="config/credentials",
token_file="state/token.json",
)환경변수도 지원합니다.
TOSSINVEST_CREDENTIAL_FILE=config/credentials
TOSSINVEST_TOKEN_FILE=state/token.json이 저장소는 자동매매 프로그램 전체가 아니라 SDK 배포에 필요한 패키지, 문서, 예제, 테스트만 포함합니다.
포함되는 것:
tossinvestsdk*패키지- 전략 작성용 base class와 manager/scheduler
- 샘플 전략
StockAccumulationStrategy - 예제 코드와 문서
- 테스트와 배포 전 검증 스크립트
포함하지 않는 것:
- 실제
credentials,token.json strategy_state/,trade_history/,logs/- 개인 전략, 백테스트 데이터, 로컬 운영 스크립트
build/,dist/,*.egg-info, 캐시 파일
개발 중에는 프로젝트 루트에서 editable 설치를 사용합니다.
pip install -e ".[dev]"테스트 실행:
python -m pytestSDK 배포 전 검증:
python scripts/preflight.py
python scripts/preflight.py --with-wheelpreflight는 컴파일, pytest, OpenAPI 커버리지 점검, SDK 요청 smoke check, 패키지 포함 파일 검사를 실행합니다.
전략 회계 기준이 바뀌었거나 수수료/세금 반영 방식이 달라졌다면, 실거래 자동매매를 계속 실행하기 전에 상태 파일을 점검해야 합니다.
먼저 dry-run으로 차이를 확인합니다.
python scripts/reconcile_strategy_state.py TQQQ SOXL주문 상세 API를 이용해 보정하고 실제 상태 파일에 반영하려면 다음처럼 실행합니다.
python scripts/reconcile_strategy_state.py TQQQ SOXL --use-api --write--write를 사용하면 기존 상태 파일의 백업 .bak 파일을 먼저 생성합니다.
PROJECT_GUIDE.md: 프로젝트 구조, SDK 사용 흐름, 전략/상태/운영 지침docs/REALTIME.md: 실시간 WebSocket 상세 사용법docs/API_COVERAGE.md: REST OpenAPI 지원 범위와 명세 버전docs/API_COVERAGE.md: OpenAPI 전체 지원 점검 요약docs/LOGGING_AND_ERRORS.md: 로깅, 재시도, 예외 정책docs/INTEGRATION_CHECKLIST.md: 실제 계정 기반 read-only/live-order 점검 절차docs/RELEASE_CHECKLIST.md: 배포 전 체크리스트docs/PYPI_RELEASE.md: PyPI/TestPyPI 배포 절차
이 SDK는 자동매매와 주문 생성을 도울 수 있는 도구입니다. 실제 주문 전에는 반드시 소액 또는 read-only 흐름으로 충분히 검증하고, 사용하는 전략의 손실 가능성을 직접 이해한 뒤 실행하세요.