Style Guide¶
이 문서는 kxt 한국어 문서의 작성 기준입니다. 이후 세션들이 참조하는 영구 가이드라인입니다.
Language policy¶
kxt 문서는 영어 헤딩과 한국어 본문을 사용합니다.
- 영어 사용
- 모든 헤딩(H1–H6)
- 코드 식별자, 메서드명, 파라미터명, 타입, 예외 클래스
- 고유명사(KIS, PyPI 등)
- 한국어 사용
- 본문 문장, 리스트, 표 셀, admonition 내부 설명, 비고, 경고
새 페이지를 작성할 때는 기존 페이지에서 쓰이는 영어 헤딩 어휘(Overview, Key features, Parameters, Returns, Example, Sample response, Sample event, Notes, KIS specifics, Common pitfalls, See also, Next steps, Prerequisites 등)를 재사용하세요. 새 라벨을 도입하려면 style guide를 먼저 업데이트합니다.
Voice and style¶
- 능동형을 기본으로.
~됩니다과잉 사용을 피합니다. - 번역투(
~에 의해,~을/를 가진다,~로서)를 피합니다. - 한 문장 한 아이디어. 긴 쉼표 나열은 bullet로 분해합니다.
- 기술 용어는 영어 그대로 쓰는 것이 자연스러울 때 영어를 유지합니다 (예: 타임스탬프, 페이로드, 커서, 스트림).
Page structure principles¶
- Self-contained. 앞 페이지를 읽지 않아도 이해 가능해야 합니다. 필요한 전제는 짧게 다시 언급하고 상세는 링크합니다.
- Lead paragraph 우선. 첫 1~3 문장에서 "이 페이지가 무엇을 다루는지·왜 필요한지"를 밝힙니다.
- 실행 가능한 예제. 복붙으로 바로 돌아가는 코드 조각을 최소 하나 포함합니다.
- 한 화면에 과부하 금지. 깊은 세부는 하위 페이지로 링크합니다.
Unified API method page template¶
모든 메서드 페이지는 아래 구조를 따릅니다.
- H1: 메서드명(코드 식별자 그대로). 예:
get_bars. - H2 순서 (REST 메서드 페이지):
## At a glance## Signature## Parameters## Returns## Example## Sample response## Notes## KIS specifics## Common pitfalls## See also
- Streaming 메서드 페이지: 위와 동일하되
## Sample response대신## Sample event를 사용합니다. - 각 섹션 내부 본문은 한국어로 서술하며, 필드명·타입·예외는 영어 코드 식별자를 유지합니다.
Public input naming policy¶
kxt의 모든 public 메서드는 primitive-first 입력을 1차 형태로 받습니다. 이 규칙은 시세·호가·체결·스트리밍 뿐만 아니라 계좌(account), 트레이딩(order submit/cancel/modify), 주문 이벤트 스트림(stream_order_events, stream_order_updates, stream_fill_updates) 전 surface에 공통 적용됩니다.
- 종목 입력은 심볼 문자열(
"005930") —InstrumentRef(symbol=...)가 아님. - 계좌 입력은
account_no/account_product_code문자열 kwargs —AccountSummary(...)구성이 아님. - HTS ID 입력은
hts_id문자열 kwarg — request DTO 구성이 아님. -
그 외 필드(price, quantity, limit_price, timeframe, start/end 등)도 전부 primitive kwargs.
-
권장: 첫 위치인자에 종목 코드 문자열을 그대로 넘깁니다.
await client.get_quote("005930") await client.get_bars("005930", timeframe="day", start=..., end=...) async for event in client.stream_trades("005930"): ... await client.submit_order( symbol="005930", side=OrderSide.BUY, order_type=OrderType.LIMIT, quantity=Decimal("1"), limit_price=Decimal("70000"), ) await client.get_buying_power(instrument="005930", price=Decimal("70000")) async for event in client.stream_order_events(): ... -
응답 모델은 그대로
InstrumentRef/AccountSummary/ProviderOrderRef등을 유지합니다. 입력은 primitive-friendly, 출력은 broker-neutral structured DTO라는 비대칭이 의도적인 설계입니다. - 내부적으로
*Request/InstrumentRef/AccountSummaryDTO가 존재하지만, 사용자 문서의 입력 예제에서는 가르치지 않습니다. 이들은kxt.requests/kxt의 power-user alias로만 유지합니다. *Cursor예외: 서버가 발급하는 연속 토큰(AccountOverviewCursor,OrderHistoryCursor,BarCursor등)은 다음 페이지 요청 시 호출자가 그대로 재전달해야 하므로 입력 예제에서 노출이 허용됩니다.
Public import policy¶
from kxt import ...—KISClient, 응답·이벤트 DTO, enum, 에러, value object(InstrumentRef,AccountSummary,OrderCorrelationKey,ProviderOrderRef등). 사용자가 읽는 타입만 노출합니다.from kxt.requests import ...—*Request,*Cursor,*Subscription,OrderInstruction,OrderAmendment,ProviderRef등 power-user 입력 DTO. 일반 호출은 primitive kwargs로 충분하므로 top-level에서 의도적으로 제외했습니다.from kxt.models import ...— 전체 DTO를 한 번에 가져오는 introspection용 별칭.
문서 작성 시:
- Primary 예제는 항상 primitive 형태로 작성합니다. 종목은
symbol문자열, 계좌는account_no/account_product_code, HTS는hts_idkwargs. - Parameters 섹션의 첫 항목(종목 기반 메서드) 또는 계좌 필드(account 기반 메서드)는 primitive 타입을 우선 표기합니다 (
str,str | InstrumentRef,str | None). - 사용자용 예제에서는
*Request(...),InstrumentRef(...),AccountSummary(...),ProviderRef(...)를 입력 인자로 구성하는 형태를 보이지 않습니다. 시장 데이터·계좌·트레이딩·스트리밍 어디에서도 금지합니다. 내부 정규화 설명이나 응답 스키마 예제에서 타입명이 등장하는 것은 허용됩니다.*Cursor값은 서버 발급 연속 토큰이므로 예외입니다.
Code examples¶
- 최상위
import→async def main()→asyncio.run(main())패턴을 권장합니다. - 예제 종목은 실제 KRX 코드를 씁니다:
005930삼성전자,000660SK하이닉스. - Decimal 비교를 보여줄 때
float혼용을 피합니다.
SDK examples: env-free, explicit args only¶
SDK 코드 자체는 환경변수에 관여하지 않습니다. KISClient는 app_key, app_secret, account_no, account_product_code, hts_id를 모두 명시적 키워드 인자로만 받습니다. 따라서 문서의 SDK 예제도 같은 규약을 따릅니다.
- 금지:
os.environ,os.getenv,import os를 SDK 예제에 사용하지 마세요.KIS_APP_KEY같은 환경변수명도 SDK 예제 본문에 등장시키지 않습니다. - 권장: 자격증명은 placeholder 리터럴로 표기하거나, 호출자가 임의 경로(설정 파일·시크릿 매니저·CLI 환경 등)로 주입한다는 가정을 둡니다.
계좌·HTS ID가 필요한 메서드도 같은 방식입니다.
async with KISClient(
app_key="<APP_KEY>",
app_secret="<APP_SECRET>",
account_no="<CANO>",
account_product_code="<ACNT_PRDT_CD>",
hts_id="<HTS_ID>",
) as client:
...
환경변수 기반 흐름은 CLI 전용 관심사이며, CLI 레퍼런스와 Authentication의 CLI 섹션에서만 다룹니다.
Tables¶
- 3열 이상은 첫 행을 인간 친화적으로 정렬 (항목 | 타입 | 설명).
- 긴 설명은 표 대신 bullet로 풀어씁니다.
Admonitions¶
!!! note— 보충 정보.!!! tip— 권장 패턴.!!! warning— 잠재적 문제.!!! danger— 시크릿·보안·재무 위험.!!! info— 메타 정보(세션 로드맵 등).
Links¶
- 내부 링크는 상대 경로 마크다운. MkDocs
strict빌드가 깨진 링크를 잡습니다. - 외부 링크는 공식 문서 위주. KIS 관련 링크는 포털 루트 또는
apiservice경로.
Forbidden patterns¶
- "쉽게", "간단히" 같은 주관적 수식어 남용.
- 구현되지 않은 기능을 현재 시제로 단정.
- 영어/한국어 어절을 공백 없이 붙여쓰기 (
API를는 허용,API와같이같은 경우 공백 사용). - 이모지 (사용자가 명시적으로 요청하지 않은 한).
- Request DTO /
InstrumentRef/AccountSummary/ProviderRef구성형 입력 예제. User-facing examples never show request DTOs,InstrumentRef(...),AccountSummary(...), 또는ProviderRef(...)construction as normal input — 이는 market-data, account, trading, streaming 전 surface에 공통 적용됩니다. Use primitive-first arguments (symbol strings,account_no/account_product_codekwargs,hts_idkwarg, timeframe strings, datetime params 등). 즉,client.get_bars(BarsRequest(instrument=InstrumentRef(symbol="005930"), ...))또는client.submit_order(SubmitOrderRequest(account=AccountSummary(...), instruction=OrderInstruction(instrument=InstrumentRef(symbol="005930"), ...)))같은 코드 조각은 사용자용 문서에 올리지 않습니다. 타입 시그니처 표기, 내부 정규화 설명, 응답 스키마 예제에서 타입명이 등장하는 것은 허용됩니다. 서버 발급 연속 토큰(*Cursor)은 이어받기 용도로 입력 예제에서 노출해도 됩니다.
Adoption¶
이 가이드는 새 문서 작성과 기존 문서 정비 모두에 적용됩니다.