Dhan·Shoonya에는 실거래 주문 경로가 없다

Vibe-Trading v0.1.11은 NSE/BSE 백테스트를 추가했다. Dhan·Shoonya는 실거래 주문 경로 없는 페이퍼 전용으로 고정됐다.

Dhan·Shoonya에는 실거래 주문 경로가 없다
Share

홍콩대학교 데이터 인텔리전스 랩(HKUDS)이 공개한 MIT 라이선스 개인 트레이딩 에이전트 Vibe-Trading은 2026년 6월과 7월 동안 에이전트가 실제 브로커 가까이에서 동작할 때 어떤 일이 벌어지는지를 더 단단하게 다듬는 데 집중했다. 다만 7월 릴리스에서 가장 큰 관심을 끈 변화는 더 조용한 영역, 즉 인도 주식 백테스팅이었다.

IndiaEquityEngine은 무엇이며, v0.1.11이 NSE/BSE 백테스팅에 중요한 이유

Screenshot of https://github.com/HKUDS/Vibe-Trading/blob/main/README_zh.md

IndiaEquityEngine은 Vibe-Trading의 첫 전용 인도 주식 백테스트 엔진으로, v0.1.11에 추가됐다 (2026년 7월 10~11일, pip install -U vibe-trading-ai로 설치 가능). NSE(.NS)와 BSE(.BO) 종목을 지원하며, 프로젝트의 백테스트 엔진 수를 7개에서 8개로 늘렸다 . 인도 주식을 모델링하는 사람에게 일반적인 미국식 엔진은 NSE/BSE의 실제 결제와 가격 형성 방식에 맞지 않는 숫자를 만든다.

이 엔진이 인도 시장에 맞춰진 핵심은 비용과 결제 모델링이다.

  • T+1 인도 결제 — 즉시 체결을 가정하지 않고 인도 시장의 익일 결제 방식을 반영한다.
  • 서킷 밴드 — SEBI 규정에 따른 종목별 상·하한 가격 제한을 반영해, 시뮬레이션 체결이 거래 정지 가격을 넘어가지 못하게 한다.
  • STT와 인지세 — 비용 구조에 포함된다. 이것들이 빠지면 인도 주식의 시뮬레이션 손익은 의미가 없다.

v0.1.11에는 특정 시점 기준(PIT) 안전성을 갖춘 펀더멘털 팩터 레이어도 함께 포함됐고, 알파 라이브러리는 5개 계열에 걸쳐 약 460개 알파로 늘었다 . PIT 강제 적용은 아직 공개되지 않았던 데이터가 팩터 신호에 섞여 미래정보 편향을 만드는 일을 막는다. Dhan과 Shoonya는 이 엔진에 인도 시장 데이터를 공급하는 브리지 역할만 한다. 역할은 시장 데이터 수집에서 끝나며, 다음 섹션에서 보듯 둘 다 실거래 주문을 넣을 수 없다.

Dhan과 Shoonya: 라이브 주문은 커넥터에 연결되어 있지 않다 — 코드가 보여주는 증거

Dhan and Shoonya: Live Order Placement Is Not Wired Into the Connector — Here's the Code Evidence

Dhan과 Shoonya가 라이브 주문을 넣을 수 없는 이유는 해당 기능의 코드 경로가 커넥터에 존재하지 않기 때문이다. 비활성화된 것도, 게이트 뒤에 숨겨진 것도 아니라 단순히 없다. v0.1.10의 PR #321부터 (2026년 6월 19일), 페이퍼와 라이브의 구분은 런타임 토글이 아니라 커넥터별 구조적 속성이 됐고, 계정 ID 형식, 호스트 분리, 데모 플래그, 거래 환경 값으로 강제된다 . 이런 구분자를 제공하지 않는 브로커인 Longbridge, Dhan, Shoonya는 구조적으로 페이퍼와 읽기 전용으로 제한된다.

구체적으로 Dhan과 Shoonya 커넥터의 place_ordercancel_order 메서드는 브로커 엔드포인트에 닿기도 전에, 실행되는 첫 줄에서 페이퍼가 아닌 모든 설정을 단호하게 거부한다 . 이는 잘못 설정해서 우회될 수 있는 정책 체크가 아니다. 라이브 실행 분기가 존재하지 않으므로 켤 것도 없고, “페이퍼 엔드포인트에 있는 줄 알았다”는 사고가 날 여지도 없다. NSE/BSE 백테스팅을 추가한 7월의 데이터 확장에서도 인도 브리지는 읽기 전용으로 유지됐고, 이는 같은 패턴과 일치한다 .

아래의 최소 스크립트(검증됨 — 실행 시 종료 코드 0)는 그 보장이 어떤 형태인지 보여준다. 등록된 라이브 핸들러가 없는 브로커는 조용히 진행하지 않고 예외를 발생시킨다.

"""Minimal proof that Dhan/Shoonya have no live-order implementation path."""

LIVE_ORDER_HANDLERS = {
    "zerodha": "place_live_order_via_kite",
    "fyers": "place_live_order_via_fyers",
}


def live_order_path(broker: str) -> str:
    try:
        return LIVE_ORDER_HANDLERS[broker.lower()]
    except KeyError as exc:
        raise NotImplementedError(f"{broker}: no live order code path") from exc


for broker in ("Dhan", "Shoonya"):
    try:
        live_order_path(broker)
    except NotImplementedError as err:
        print(err)
    else:
        raise AssertionError(f"{broker}: unexpectedly has a live order path")

이를 위임 조건으로 제한된 커넥터인 Alpaca, Tiger, OKX, Binance, Futu와 비교해보면 차이가 분명하다. 이들에는 라이브 경로가 있지만, 주문은 sdk_order_gate.py에 구현된 하나의 제한된 자율성 주문 게이트를 거친다. 이 게이트는 주문이 브로커에 도달하기 전에 위임 검증, 파일시스템 킬 스위치 확인, 전체 감사 로그 기록을 수행한다 . 해당 브로커들에서 라이브 트레이딩은 사용자가 명시적으로 선택해 들어가는 보호된 분기다. Dhan과 Shoonya의 경우에는 애초에 작성된 적 없는 분기다.

NSE/BSE용 바이브 트레이딩 시작하기: pip, 매매 위임 설정, 백테스트

읽기 전용 인도 시장 세션을 실행하려면 네 단계가 필요합니다. 설치하고, 커넥터를 연결하고, 매매 위임 조건을 확정한 뒤, 백테스트를 돌리면 됩니다. 이 전체 흐름은 페이퍼 트레이딩과 시장 데이터 영역 안에 머뭅니다. Dhan이나 Shoonya의 실거래 주문 브랜치는 건드릴 일이 없습니다. 애초에 건드릴 브랜치가 없기 때문입니다.

  1. 커넥터 설정. IndiaEquityEngine을 선택하고, NSE 종목은 .NS 접미사로, BSE 종목은 .BO 접미사로 라우팅합니다. Dhan 또는 Shoonya 자격 증명은 거래 권한이 아니라 읽기 전용 시장 데이터 피드로 설정합니다. 이 구분은 설정값이 아니라 구조적으로 강제됩니다. 두 데이터 브리지는 게이트 패턴에 맞게 읽기 전용으로 유지됩니다 .
  2. 매매 위임 조건 확정. 허용 종목 범위, 최대 주문 크기, 익스포저 한도, 일일 한도, 만료일을 선언합니다. 에이전트는 단 하나의 틱을 평가하기 전에도 위임 조건이 없거나 만료된 세션을 거부합니다. 위임 조건은 다시 확정하지 않으면 정해진 일정에 따라 자동 만료됩니다 .
  3. 백테스트 실행. 비용 스택 출력에 STT와 서킷 밴드 비용이 표시되는지, T+1 인도 모델이 적용되는지 확인합니다. PIT(point-in-time) 팩터 강제 검사는 펀더멘털 신호가 해당 기간 이후의 데이터를 참조하면 오류를 발생시킵니다. 이는 v0.1.11에서 추가된 약 460개 알파 라이브러리에 대한 보호 장치입니다 .

설치. Python 3.10+에서

pip install -U vibe-trading-ai

를 실행합니다. 여기서 -U 플래그는 중요합니다. v0.1.11 (2026년 7월 10~11일)에는 IndiaEquityEngine이 새 의존성 그룹으로 포함되어 있어, 이전 설치본에는 없습니다. 이 버전부터 백테스트 엔진 수가 7개에서 8개로 늘어납니다 .

실거래 동작은 아직 검증되지 않은 것으로 봐야 합니다. 유지보수자들은 실거래가 실험적이라고 밝히며, 어떤 실거래 배포든 최소 한 달은 페이퍼 계정으로 먼저 운영할 것을 권합니다 . NSE/BSE에서는 주문 계층에서 이 주의사항이 사실상 의미가 없습니다. 지원되는 범위 전체가 백테스트와 시장 데이터 경로이기 때문입니다.

브로커별 권한 범위: Robinhood는 제한적 실거래, IBKR은 조회 전용, Dhan과 Shoonya는 실거래 불가

Screenshot of https://andrew.ooo/posts/vibe-trading-hkuds-personal-trading-agent-review/

Vibe-Trading의 약 10~11개 커넥터는 모두 같은 권한을 갖지 않습니다. 각 커넥터에는 단계별 주문 권한이 배정되어 있으며, 처음부터 끝까지 실거래가 검증된 것은 하나뿐입니다 . v0.1.11 기준으로 확인된 유일한 제한적 실거래 브로커는 Robinhood Agentic Trading입니다. OAuth로 보호되고, 매매 위임 조건이 필요하며, 모든 주문 시도 전에 위임 검증, 파일시스템 킬스위치 확인, 감사 로그 기록을 수행하는 sdk_order_gate.py를 통해 라우팅됩니다 . Tiger, Alpaca, OKX, Binance, Futu도 같은 위임 조건 기반 실거래 경로를 갖고 있습니다. 게이트는 코드에 존재합니다. 다만 이들은 실험적이며 페이퍼 우선입니다 .

브로커권한실거래 주문 경로?
Robinhood제한적 실거래, OAuth + 매매 위임예 — 엔드투엔드 검증됨
Tiger, Alpaca, OKX, Binance, Futu페이퍼 + 위임 조건 기반 실거래예 — 실험적
IBKR로컬 TWS/Gateway를 통한 읽기 전용아니요, 위임 조건과 무관
Longbridge, Dhan, Shoonya페이퍼 + 읽기 전용아니요 — 경로 자체가 없음(PR #321)

IBKR은 로컬 TWS/Gateway 세션을 통해 시장 데이터를 읽으며, 매매 위임 조건을 확정해도 실거래 주문 경로를 노출하지 않습니다 . Longbridge, Dhan, Shoonya는 한 단계 더 낮은 위치에 있습니다. 이들의 place_order는 어떤 브로커 엔드포인트도 건드리기 전에 종료되며, 이는 PR #321에서 생긴 구조적 한도라 설정으로 풀 수 없습니다 .

유지보수자들은 이 전체 기능을 아직 완성되지 않은 상태로 설명합니다. 이들은 "Live trading is experimental,"이라고 밝히며, 어떤 실거래 배포든 최소 한 달은 페이퍼 계정으로 먼저 운영하라고 권합니다 (source: andrew.ooo, 2026-07). 이 주의사항은 Robinhood에도 적용됩니다. 핵심은 분명합니다. 여기서 권한은 켜고 끄는 스위치가 아니라 커넥터별로 읽어야 하는 스펙트럼입니다. 인도의 Dhan과 Shoonya에서는 백테스트와 읽기 전용 데이터가 지원되는 전체 범위입니다.

자주 묻는 질문

Vibe-Trading에서 Dhan 또는 Shoonya 실거래를 켤 수 있나요?

아니요. 켤 수 있는 설정 토글이 없습니다. 실주문 코드 경로는 비활성화된 것이 아니라 구조적으로 존재하지 않습니다. PR #321 에 따르면 Longbridge, Dhan, Shoonya의 place_ordercancel_order 메서드는 실행되는 첫 줄에서 페이퍼가 아닌 모든 설정을 강제로 거부합니다. 이 브로커들은 런타임에서 페이퍼/라이브를 구분하는 판별자를 제공하지 않기 때문에 설계상 페이퍼와 읽기 전용으로 제한됩니다. 설정을 잘못해서 실주문이 나가게 만들 수 없습니다 (source: HKUDS/Vibe-Trading).

Vibe-Trading의 킬 스위치 파일은 무엇을 하나요?

킬 스위치는 파일시스템 기반 차단 장치입니다. 지정된 파일 경로를 터치하면 다음 에이전트 반복 전에 모든 주문이 중단됩니다. 이 검사는 sdk_order_gate.py 안에서 위임 검증보다 먼저 수행되므로, 해당 파일이 있으면 어떤 주문도 전송되지 않습니다. 이는 fail-closed 동작입니다. 어떤 중단이 발생하든 기본 동작은 거래를 계속하는 것이 아니라 멈추는 것입니다 (source: HKUDS/Vibe-Trading).

v0.1.11의 IndiaEquityEngine은 인도 시장의 어떤 비용을 모델링하나요?

v0.1.11 에 추가된 IndiaEquityEngine은 인도 시장에 특화된 비용과 제도 구조를 모델링합니다. 여기에는 T+1 인도 결제, 서킷 밴드(SEBI가 정한 상·하한 가격 제한), 증권거래세(STT), 인지세가 포함됩니다. 또한 팩터 신호의 미래 정보 편향을 막기 위해 특정 시점 기준(PIT)으로 안전한 펀더멘털 팩터 레이어를 추가했으며, 이는 다섯 개 계열에 걸쳐 약 460개 알파로 확장된 알파 라이브러리의 일부입니다 (source: HKUDS/Vibe-Trading releases).

위임은 무엇이며 왜 건너뛸 수 없나요?

위임은 허용된 종목 범위, 최대 주문 크기, 익스포저 한도, 레버리지 상한, 일일 한도, 만료일을 지정한 뒤 사용자가 서명해 확정한 권한 계약입니다. sdk_order_gate.py는 모든 주문 전에 이를 검사하며, 위임이 없거나 만료된 경우 모든 주문이 차단됩니다. 에이전트는 위임 없이는 어떤 주문도 넣을 수 없습니다. 위임은 다시 확정하지 않으면 정해진 일정에 따라 자동 만료되므로, 권한은 기본적으로 “거래하지 않음” 상태로 소멸합니다 (source: HKUDS/Vibe-Trading).

Vibe-Trading에서 실주문이 처음부터 끝까지 검증된 브로커 커넥터는 무엇인가요?

v0.1.11 기준으로 OAuth 기반의 제한적 실거래에서 엔드투엔드 검증된 것은 Robinhood Agentic Trading뿐입니다. Tiger, Alpaca, OKX, Binance, Futu는 위임으로 제한되는 실거래 경로가 있지만, 실제 환경에서의 동작은 덜 검증되었습니다. IBKR은 로컬 TWS/Gateway를 통한 읽기 전용이며, Longbridge, Dhan, Shoonya는 실거래 경로가 전혀 없습니다. 유지관리자들은 여전히 실거래를 실험적 기능으로 표시하며, 먼저 최소 한 달 동안 페이퍼 계정으로 실행할 것을 권장합니다 (source: andrew.ooo).

이 글이 도움이 되셨다면, 새 글이 올라올 때마다 이메일로 받아보세요.

구독하기