vnpy_esunny10 是 VeighNa 框架的易盛启明星 V10 底层接口封装
(API-only Python binding),只导出底层 C++/pybind11 封装,不包含任何 gateway。
本项目不发布到 PyPI,仅供学习和接口研究使用,通过源码安装。
使用前请先明确:
- 这不是官方绑定,仅供学习和接口研究,不应直接用于生产环境。
- 仓库只提供 VeighNa 框架使用的底层接口封装,不提供 gateway。
- 当前只支持
Linux x86_64,不提供Windows动态库。
当前仓库对应的官方 SDK 版本为:
- 交易 API:
1.0.1.19 - 行情 API:
1.0.0.7
本项目没有刻意追求和 vnpy_ctp 保持同一套绑定层实现风格,而是更偏向
“强类型 + 显式字节语义”。这些差异是有意为之,主要目的是减少 C++ 层的
生命周期管理和编码假设风险,把字符串解释权留给 Python 业务层。
- 回调任务队列使用
enum class+TaskPayload = std::variant<...>保存已经拷贝的具体 POD/字符串值,而不是vnpy_ctp常见的Task { void* task_data, void* task_error }裸指针模型。 - 这样做的重点不是“语法更新”,而是用值语义替代
new/delete、强制类型转换和手工释放,让回调转发链路更安全、更直接。 - 本项目不在 C++ binding 层做 Unicode decoding,不假设柜台返回值一定应该先被转成 Python
str。 - 接口字段遵循显式映射:
char -> Python int,char[]/const char* -> Python bytes;请求入参也保持同样规则,由 Python 业务层自行决定何时、按什么编码.decode(...)。 - 这和
vnpy_ctp常见的 C++ 层toUtf()/string路线不同。这里刻意不把编码策略写死在 binding 层,目的是在面对不同柜台、不同部署环境时更保险。
如果你已经习惯 vnpy_ctp 的接口风格,需要额外注意:
- 回调里看到的账号、合约、时间戳、路径、地址等文本字段,很多会是
bytes,需要在 Python 业务层自行.decode(...)。 - 单字符枚举或标志位字段通常是整数,而不是长度为 1 的字符串。
- 输入侧同样如此,例如地址、路径、合约号等参数应传
bytes,而不是默认传str。
示例:
api.setHostAddress(b"10.0.0.1", 12345)
api.subscribe(b"SHFE|cu2505")
contract: bytes = data["ContractNo"]
contract_text = contract.decode("utf-8", errors="ignore")
direct: int = data["Direct"]获取源码:
git clone https://github.com/lostleaf/vnpy_esunny10_api.git
cd vnpy_esunny10_api构建需要 Python ≥ 3.10 和 uv 包管理器。 从仓库根目录执行:
uv sync
uv run python setup.py build_ext --inplace构建完成后会在 vnpy_esunny10/api/ 下生成编译后的 .so 扩展模块,测试是否成功:
uv run python -c "from vnpy_esunny10 import MdApi, TdApi; print(MdApi, TdApi, MdApi.getApiVersion())"如果一切正常,输出类似:
<class 'vnpy_esunny10.api.vnesunny10md.MdApi'> <class 'vnpy_esunny10.api.vnesunny10td.TdApi'> b'Version:V1.0.0.7-20240410'
vnpy_esunny10/api/include/:官方头文件vnpy_esunny10/api/libdstar*.so:官方 Linux 动态运行库vnpy_esunny10/api/vnesunny10/:生成后的 pybind11 源码script/:最小示例脚本和配置模板
script/md_login_demo.py自包含脚本,读取script/md_demo_config.json里的行情接入参数,不需要账号。script/td_login_demo.py读取script/td_demo_config.json,导入兜底逻辑由共享 helpertd_demo_helpers.py提供。账号和密码默认是占位值,运行前必须自行填写。script/td_first_change_pwd.py首次登录改密码示例,同样依赖td_demo_helpers.py,读取script/td_demo_config.json中的旧密码,新密码通过命令行--new-password传入。
常用运行方式:
uv run python script/md_login_demo.py --config script/md_demo_config.json
uv run python script/td_login_demo.py --config script/td_demo_config.json
uv run python script/td_first_change_pwd.py --config script/td_demo_config.json --new-password YOUR_NEW_PASSWORDscript/td_demo_config.json 中的 password 表示当前登录密码:
- 对
script/td_login_demo.py,它就是正常登录使用的密码。 - 对
script/td_first_change_pwd.py,它是首次登录时的旧密码,修改后的新密码由--new-password指定。
TD 示例默认仍链接正式库 libdstartradeapi.so。
如果要连接穿透式测试环境,需要先手工用libdstartradeapi_test.so
替换 vnpy_esunny10/api/ 下正在使用的libdstartradeapi.so。
易盛启明星V10测试环境.txt官方测试环境接入参数原文副本。易盛启明星V10交易API使用说明.md官方交易 API 使用说明。
更多项目开发约定见 AGENTS.md。
本项目基于 MIT 协议开源。