easytrader 远端服务模式实战交易服务端与量化策略端分离部署指南【免费下载链接】easytrader提供同花顺客户端/miniqmt/雪球的股票量化交易支持跟踪 joinquant /ricequant 模拟交易 和 实盘雪球组合项目地址: https://gitcode.com/gh_mirrors/ea/easytrader导读本文讲解 easytrader 的远端服务模式Remote Server Mode将交易服务端与量化策略端部署在不同机器上通过 HTTP 接口远程驱动券商客户端完成下单、查询等操作。读完本文你将掌握如何在固定 IP 的云服务器上启动 easytrader 交易服务如何用remoteclient在本地或任意量化平台远程调用买卖、撤单、查询资金持仓等全部交易能力并理解底层 Flask 路由与请求参数的实现细节。一、什么是远端服务模式远端服务模式的核心思想是交易与策略分离。整个系统被拆成两个物理上独立的角色角色部署位置职责交易服务端通常是有固定IP地址的云服务器运行easytrader交易服务被动或主动接收交易信号驱动交易软件完成实际下单量化策略端JoinQuant、RiceQuant、Vn.Py等物理上与交易服务端不在同一台电脑运行量化策略通过 HTTP 请求把交易指令发送给交易服务端其中交易软件包括运行在交易服务端同一台机器上的下单软件例如同花顺客户端xiadan.exe也可以是运行在另一台服务器上的雪球xq账户。这种分离模式的价值在于量化策略往往运行在云端或本地的 Python 环境里聚宽、米筐等平台而券商交易客户端如同花顺通常依赖 Windows 桌面 GUI、受限于网络与安全策略只能运行在特定的云服务器上。远端服务模式让两者各司其职策略端只需通过 HTTP 即可驱动远端的交易客户端。二、交易服务端启动服务交易服务端的启动代码非常简洁from easytrader import server server.run(port1430) # 默认端口为 1430从源码 easytrader/server.py 可以看到server.run内部基于 Flask 启动了一个监听在0.0.0.0的 Web 服务def run(port1430): app.run(host0.0.0.0, portport)几点值得注意默认端口为1430可通过port参数自定义服务监听0.0.0.0即对外网开放因此必须结合云服务器安全组/防火墙规则做好访问控制只允许可信来源访问服务端通过api.use(broker)创建券商交易对象支持的 broker 类型与本地模式完全一致见 easytrader/api.pyminiqmtQMT 量化接口xq/雪球雪球组合yh_client/银河客户端、ht_client/华泰客户端、wk_client/五矿客户端、htzq_client/海通证券客户端、gj_client/国金客户端、gf_client/广发客户端universal_client/通用同花顺客户端、ths/同花顺客户端。服务端 HTTP 接口一览服务端启动后会暴露一组 RESTful 风格的接口见 easytrader/server.py方法路径说明POST/prepare初始化并登录券商客户端body 中带broker字段成功后返回{msg: login success}GET/balance获取资金状况GET/position获取持仓GET/auto_ipo一键打新GET/today_entrusts查询当日委托GET/today_trades查询当日成交GET/cancel_entrusts查询可撤委托POST/buy买入body 携带security、price、amountPOST/sell卖出body 携带security、price、amountPOST/cancel_entrust按委托号撤单body 携带entrust_noGET/exit退出客户端软件其中/prepare的实现逻辑为从 JSON body 中取出broker字段调用api.use(broker)创建交易对象再将剩余参数透传给user.prepare(**json_data)最后把创建好的user保存在服务端的全局字典global_store中供后续请求复用见 easytrader/server.py。所有接口都经过error_handle装饰器包装一旦底层抛出异常会返回400状态码以及{error: 异常类名: 异常信息}的 JSON 错误体见 easytrader/server.py方便远端定位问题。三、量化策略端调用服务量化策略端无需安装任何券商客户端只需要通过remoteclient创建一个远端用户对象即可调用服务from easytrader import remoteclient user remoteclient.use( 使用客户端类型可选 yh_client, ht_client, ths, xq等, host服务器ip, port服务器端口默认为1430 ) user.buy(......) user.sell(......)remoteclient.use的签名定义在 easytrader/remoteclient.pydef use(broker, host, port1430, **kwargs): return RemoteClient(broker, host, port, **kwargs)RemoteClient在初始化时会做三件事见 easytrader/remoteclient.py创建一个requests.Session用于复用 TCP 连接、保持 HTTP 基本认证状态若传入了user与passwd则自动启用HTTPBasicAuth基本认证若传入auth则使用自定义的认证对象对应服务端可配合 Flask 的认证中间件使用拼接 API 基础地址默认走http://协议若传入sslTrue则切换为https://适用于反向代理强制走 HTTPS 的场景。因此完整的调用还可以这样写user remoteclient.use( yh_client, host123.45.67.89, port1430, user服务端HTTP认证用户名, # 可选 passwd服务端HTTP认证密码, # 可选 sslFalse, # 可选反向代理要求 HTTPS 时置为 True )四、登录准备prepare与本地模式一样在交易之前需要先调用prepare完成客户端登录。远端模式下prepare支持两种传参方式见 easytrader/remoteclient.py方式一直接传登录参数user.prepare(user账号, password明文密码, exe_pathrC:\htzqzyb2\xiadan.exe, comm_password通讯密码(华泰))方式二传配置文件路径user.prepare(config_path/path/to/yh_client.json)传入config_path时客户端会调用 easytrader/utils/misc.py 中的file2dict读取 JSON 配置并自动把其中的user、password填充进请求参数。仓库根目录提供了现成的配置模板例如 yh_client.json{ user: 银河用户名, password: 银河明文密码 }以及 gj_client.json{ user: 国金用户名, password: 国金明文密码 }无论哪种方式prepare最终都会把broker类型一起打包POST 到服务端的/prepare接口完成登录见 easytrader/remoteclient.py。注意服务端创建交易对象时使用的 broker 类型由remoteclient.use()的第一个参数决定登录参数只是传给客户端完成认证两者不要混淆。五、远端交易操作与查询登录成功后远端用户对象提供了与本地用户完全一致的交易与查询 API底层分别映射到服务端对应的 HTTP 接口见 easytrader/remoteclient.py。5.1 买入与卖出user.buy(162411, price0.55, amount100) # return {entrust_no: xxxxxxxx} user.sell(162411, price0.55, amount100) # return {entrust_no: xxxxxxxx}buy/sell会把security、price、amount三个参数 POST 到/buy、/sell接口见 easytrader/remoteclient.py因此远端下参数含义与本地完全一致security为证券代码price为委托价格amount为委托数量。5.2 撤单user.cancel_entrust(buy/sell 获取的 entrust_no) # return {message: success}按委托号撤单委托号来自买卖操作返回的entrust_no见 easytrader/remoteclient.py。5.3 查询资金与持仓user.balance # GET /balance返回资金列表字段如 总资产、可用资金、参考市值 user.position # GET /position返回持仓列表字段如 证券代码、证券名称、当前持仓5.4 当日委托与当日成交user.today_entrusts # GET /today_entrusts user.today_trades # GET /today_trades5.5 查询可撤委托与一键打新user.cancel_entrusts # GET /cancel_entrusts查询当日可撤委托 user.auto_ipo() # GET /auto_ipo一键打新5.6 退出客户端user.exit() # return {msg: exit success}上述返回字段的具体形态与本地模式一致可参考 docs/usage.md 中给出的balance、position、today_entrusts、today_trades等真实返回示例例如user.balance返回形如[{总资产: 50136.21, 可用资金: 28494.21, ...}]的字典列表。六、工作流程与调用链解析一次完整的远端交易请求其调用链可以概括为量化策略端 交易服务端(云服务器) ┌──────────────────┐ HTTP ┌──────────────────────────────┐ │ remoteclient.use │ ───────▶ │ Flask app (0.0.0.0:1430) │ │ user.prepare() │ /prepare│ api.use(broker) │ │ user.buy(...) │ /buy │ user.prepare(**json_data) │ │ user.sell(...) │ /sell │ global_store[user] 复用 │ │ user.balance │ /balance│ user.buy(**json_data) │ └──────────────────┘ └──────────────────────────────┘关键设计细节单用户状态保存在服务端内存/prepare成功后user对象被存入模块级字典global_store之后的买卖、查询请求都直接复用该对象见 easytrader/server.py。因此一次服务进程内通常对应一个已登录的交易账户错误以 JSON 形式回传所有接口失败时返回400状态码与{error: ...}RemoteClient会检测status_code 300并抛出异常见 easytrader/remoteclient.py可扩展的协议远端模式本质上只是把本地Trader对象的属性和方法逐个暴露为 HTTP 接口仓库测试 tests/test_easytrader.py 中验证的balance、today_entrusts、today_trades、cancel_entrust、buy、sell、auto_ipo等能力在远端模式下均有对应接口业务语义保持一致。七、部署注意事项结合 docs/install.md 中的云端部署建议远端服务模式下需要注意以下几点交易客户端环境若交易软件是 Windows 上的同花顺客户端如xiadan.exe云服务器需具备图形界面运行环境官方文档建议在云服务上部署时使用 TightVNC 等远程桌面工具自带的远程桌面可能存在兼容问题客户端设置按 docs/install.md 的要求设置客户端——系统设置中将界面不操作超时时间设为 0将默认买入/卖出价格、数量都置空客户端不能最小化、不能处于精简模式否则会导致下单价格出错或客户端超时锁定网络与安全服务默认监听0.0.0.0建议通过云安全组限制来源 IP或结合user/passwd参数启用 HTTP Basic Auth若经过反向代理强制 HTTPS可在remoteclient.use中传sslTrue登录方式部分券商专用同花顺客户端不支持自动登录需要先手动登录客户端再由服务端复用已登录窗口此时prepare的作用是让 easytrader 识别到已登录的窗口验证码若券商登录需要验证码需在服务端单独安装tesseract注意不是pytesseract保证命令行下tesseract可用也可以手动登录后由 easytrader 直接识别已登录窗口。八、最小可运行示例综合以上内容一个最小可运行的远端交易示例如下。交易服务端云服务器上运行from easytrader import server if __name__ __main__: server.run(port1430) # 默认端口 1430可自定义量化策略端策略机上运行from easytrader import remoteclient # 1. 连接远端交易服务指定券商类型 user remoteclient.use(yh_client, host服务器ip, port1430) # 2. 登录交易客户端方式一直接传参 user.prepare(user账号, password明文密码) # 方式二配置文件登录 # user.prepare(config_pathyh_client.json) # 3. 查询资金与持仓 print(user.balance) print(user.position) # 4. 交易 result user.buy(162411, price0.55, amount100) print(result) user.sell(162411, price0.55, amount100) # 5. 撤单使用买卖返回的委托号 user.cancel_entrust(xxxxxxxx)至此量化策略端与交易客户端彻底解耦策略逻辑可以运行在任意具备 Python 环境的机器上而所有涉及券商客户端的敏感操作都被收敛在固定 IP 的交易服务端这正是远端服务模式在 easytrader 生态中的核心价值所在。【免费下载链接】easytrader提供同花顺客户端/miniqmt/雪球的股票量化交易支持跟踪 joinquant /ricequant 模拟交易 和 实盘雪球组合项目地址: https://gitcode.com/gh_mirrors/ea/easytrader创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
轻量级原型工具如何支持Web应用的完整设计到开发链路 从需求被提出开始, 一直到页面上线为止, Web应用从设计再到开发的链路可以被压缩到短短几天时间之内, 不过, 前提条件是原型工具必须要覆盖这条链路的每一个具体环节, 而绝非仅仅只是停留在所谓的“画图”阶段。轻量级原型工具所具备的真正价值, 在于它能够让需求文字转变成为可… · 2026/9/24 17:01:03
Python数据分析库到底有多强?这份宝藏清单你必须收藏! 可视化与洞察,让数据自己“说话”数据整好了, 怎样呈现方可让人一眼就看懂呢? 它身为绘图的“老祖宗”, 功能极为强大且灵活。从简单的折线图、柱状图一直到复杂的3D图形, 它差不多都能够实现。然而它的API有时稍微显得繁琐 , 所以 , 在其基础之上衍生出了更优雅的… · 2026/9/24 17:01:03
Gradle构建时NPM命令失效?环境隔离与排查解决指南 如果你在命令行里手动执行npm run build一切正常,但一进 Android Studio 点 Gradle 同步或者构建,就开始报“npm 不是内部或外部命令”,或者提示“npm.ps1 无法加载文件,因为在此系统上禁止运行脚本”,那你多半不是遇到… · 2026/9/24 19:17:16
HarmonyOS ArkUI课程表双向滚动与嵌套滚动实现 做过课程表类App的都知道,这玩意儿看着简单,实际上交互细节一堆。尤其是“双向滚动”——横向要按周切换,纵向要按节次看全天安排,两个方向还得共用表头和时间轴,就像Excel里冻结首行首列一样。我在HarmonyOS 6上用Ark… · 2026/9/24 19:17:16
猪行为识别实战:YOLOv5训练1272张图达到92.6%准确率 简介:这份猪圈猪行为识别数据集面向智慧养殖、动物行为分析与计算机视觉方向的研究者及算法工程师,用于解决猪只日常行为自动监测与分类问题。数据覆盖喝、吃、睡觉、站立等典型行为类别,平均正确识别率约92.6%,可直接用于目标检测… · 2026/9/24 19:17:16
学生选课系统JavaWeb课程设计全攻略:从源码到部署避坑指南 简介:基于JavaWeb课程设计的学生选课系统源码与数据库打包,适用对象为正在完成JavaWeb课程设计的在校学生,以及希望动手实践ServletJSP开发流程的初学者。项目围绕学生选课业务,完整提供课程浏览、学生选课、退课管理等典型功能模… · 2026/9/24 19:17:16
机器学习项目怎么做才不流水账:加州房价五阶段全管道方法论 机器学习项目怎么做才不流水账:加州房价五阶段全管道方法论
很多入门项目的通病是「调个模型看个分」,报告写出来像流水账。真正的 ML 项目是一条完整的证据链:每一步有依据、每个结论有数据。本文用加州房价数据集(20640 样本8 特… · 2026/9/24 19:17:16
Java混淆工具避坑指南:从选型到keep规则实战全解析 上周群里一个小伙伴发了个崩溃日志,NoClassDefFoundError,我一眼就看出是混淆之后 keep 规则没写全。这种情况太典型了——本地跑得好好的,一打 release 包就翻车;要么类被无良混淆器“优化”掉,要么反射直接炸穿&… · 2026/9/24 19:17:03
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程 简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13
1D-CNN时间序列建模实战:从Conv1d原理到工业落地 简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26
柔软的L:汉语语流中被忽视的舌肌张力控制 1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44