Rockyzsu/stock / 交易边界
交易三条路线与实盘前的安全闸门
先说最重要的一句:这个仓库的交易能力停在「有代码骨架」这一级,没有一条路线是开箱可用的。三条路线分别是:①trader/auto_trader.py 用 easytrader 调券商客户端下单——缺被 .gitignore 排除的 config.py 与 user.json;②PTrade 路线——README 说是「实盘代码」,而 ptrade/ 目录里只有一个 0 字节的 __init__.py;③富途路线——futu/ 的 5 个文件只有行情订阅,没有下单代码。
本站不会演示下单,也不会给出任何关于 Rockyzsu/stock 的实盘操作指令。本页要做的是把缺口清单和风险清单摊开:你要接实盘,先得自己补什么、先得自己想清楚什么。
Rockyzsu/stock · 三条路线
Rockyzsu/stock 的三条交易路线怎么选:一条缺凭证、一条目录为空、一条只有行情
| 路线 | 代码入口 | 调用方式 | 实际能做到什么 | 缺什么 |
|---|---|---|---|---|
| ① 券商客户端下单 | trader/auto_trader.py(6,266 字节) | easytrader.use('gj_client')(备选 'ths')后 prepare('user.json');行情用 easyquotation.use('qq') | 读取券商客户端持仓、按阈值批量挂单、把持仓落 MySQL | ① config.py(auto_trader.py 第 11 行 import 它,仓库中不存在且在 .gitignore 里);② user.json 券商登录凭证;③ __init__ 里被注释掉的候选池与黑名单初始化 |
| ② PTrade 桥接 | ptrade/__init__.py(0 字节)+ monitor/server_api.py | server_api.py 取可转债快照后写 Redis 键 ptrade,由 PTrade 侧读取 | 只完成了「把快照放到一个约定位置」这一步 | ① ptrade/ 目录里没有任何实现;② server_api.py 生成的 22 个字段取值全部写成 item[''](空键),尚未填字段名;③ PTrade 侧的读取代码不在本仓库 |
| ③ 富途 OpenAPI 行情 | futu/ 5 个文件:basic_usage.py、realtime_price.py、subscribe.py、unsubscrible.py、util.py | OpenQuoteContext 订阅行情、取实时价、打印报价对象 | 只有行情与订阅,没有任何下单调用 | 需本机运行 OpenD 网关;无交易相关代码 |
把三条路线连起来看:①是三条里仅有具备下单代码的路线,但缺两个凭证文件;②是最接近「与外部实盘系统对接」的设计,但关键字段没填完;③只是行情示例。所以「Rockyzsu/stock 能接实盘吗」的准确回答是:有骨架,无一条可直接使用。
Rockyzsu/stock · 缺口清单
接入前要自己补什么:Rockyzsu/stock 的六个缺口
| 缺口项 | 源码位置 | 缺失方式 | 影响 | 怎么补 |
|---|---|---|---|---|
config.py | trader/auto_trader.py 第 11 行 from config import PROGRAM_PATH, MONGO_PORT, MONGO_HOST | 仓库中没有该文件,且 .gitignore 明确忽略 config.py | 整个模块 ImportError,无法启动 | 自己建一个 config.py,至少要定义这三个常量 |
user.json | trader/auto_trader.py 第 28 行 self.user.prepare('user.json') | 被 .gitignore 忽略,仓库中没有 | prepare() 报错,拿不到券商会话 | 用 easytrader 的方式在本机生成并妥善保管 |
| 候选池与黑名单初始化 | __init__ 中 self.stock_candidates、self.blacklist_bond 的赋值行被注释 | 代码里被注释掉了 | morning_start()、get_blacklist() 等函数一旦调用即 AttributeError | 需要先构造候选池(脚本对应函数也依赖 self.engine 等未赋值属性) |
self.engine | get_candidates()、get_market_data() 里使用 | __init__ 中从未赋值(只在 save_position() 里赋值) | 相关函数按调用顺序不同会抛 AttributeError | 在初始化阶段显式建立数据库引擎 |
| PTrade 侧读取实现 | 不在本仓库 | 本仓库只写了 Redis 写入端 | 写进去的快照没有消费者 | 需在 PTrade 环境内自行实现 |
server_api.py 的字段名 | 22 个 item[''] | 取值键是空字符串 | KeyError | 按可转债字段映射逐个填入 |
注意第 3、4 行的性质:它们不是「缺配置文件」,而是代码本身被注释掉或从未赋值——也就是说即便你补上 config.py 与 user.json,morning_start() 这类函数仍然跑不了。可运行的入口只剩 set_ceiling() 一条(依赖券商持仓 + MySQL 的 db_jisilu 表)。
Rockyzsu/stock · 安全闸门
实盘前要过哪些安全闸门:12 项中四项属于资金安全底线
| 闸门 | 为什么必须过 | 怎么建 | 不过会怎样 |
|---|---|---|---|
| ① 凭证不进版本库 | 券商账号与站点 cookie 等于账户控制权 | user.json、config.json、data.cfg、validate_key.py 全部写进 .gitignore 并本地加密备份 | 凭证泄露后可能被用于真实下单 |
| ② 先验证只读能力 | 下单是不可逆操作,先确认能正确读 | 先跑持仓查询与行情订阅,核对字段与实际账户一致 | 在错误的持仓数据上做决策 |
| ③ 本地离线跑通再联网 | 逻辑错误在离线环境里最容易发现 | 用历史数据或模拟数据走一遍完整链路 | 线上才发现逻辑问题 |
| ④ 模拟环境优先 | 模拟环境无资金风险 | 券商模拟盘、纸面交易或记录仓(recordMyChoice.py 的思路) | 直接暴露在真实资金风险下 |
| ⑤ 最小下单量人工确认 | 验证接口连通性不等于验证策略 | 先用最小交易单位,且逐笔人工确认 | 一次批量下单造成不可逆损失 |
| ⑥ T+1 与可用数量 | A 股当日买入不可卖出 | 下单前读券商返回的可用余额字段,而不是持仓数量 | 下单被拒或重复卖出 |
| ⑦ 涨跌停与废单处理 | 涨跌停时挂单可能无法成交 | 显式处理废单返回,不要假设一定成交 | 以为已成交,实际空仓或满仓 |
| ⑧ 最小交易单位 | 股票 100 股、可转债 10 张(以交易所规则为准) | 下单数量按规则取整 | 废单 |
| ⑨ 滑点与手续费 | 回测与实盘的差距主要来自这两项 | 在评估策略时显式建模 | 高估策略收益 |
| ⑩ 重复下单防护 | 网络重试极易造成重复委托 | 用订单编号做幂等,记录每笔委托状态 | 资金被重复占用 |
| ⑪ 断线与重连 | 网络断开时状态未知 | 断线后先查询委托与持仓状态,再决定是否重发 | 状态不一致 |
| ⑫ 风控熔断与人工兜底 | 程序可能进入非预期状态 | 设置单日下单笔数与总金额上限,并保留人工一键停止的开关 | 损失被放大 |
本页只列清单,不提供下单代码,也不提供实盘操作指引。这份闸门的作用是让你在动手前知道「哪些坑是已知的」——其中①④⑩⑫ 四项是资金安全底线,建议无论如何先建起来。以你的券商与交易所当前规则为准。
Rockyzsu/stock · 推进路径
为什么不建议从自动下单开始:Rockyzsu/stock 的六级能力路径
能力分级:从只读一路走到自动下单
- 级别 1 只读行情。跑通行情订阅或查询,确认数据字段与实际一致。预期输出:终端打印的现价、涨跌幅与行情软件一致。
- 级别 2 本地记录。把持仓与交割单导入本地库,长期积累自己的操作记录。预期输出:
utils/delivery_order.py把交割单写入按券商分表的数据库表。 - 级别 3 模拟与记录仓。用模拟盘或记录仓验证策略信号,不涉及真实资金。预期输出:
recordMyChoice.py持续跟踪每只自选股的收益。 - 级别 4 券商模拟/纸面交易。走券商提供的模拟环境,验证下单接口的调用链。预期输出:模拟环境里出现委托与持仓记录。
- 级别 5 小额人工确认。真实资金、最小单位、逐笔人工确认。预期输出:每笔委托都有人工确认记录。
- 级别 6 自动下单。只有在前面五级都有日志与复盘、且有熔断机制之后才考虑。预期输出:具备可审计的下单日志与人工急停能力。
Rockyzsu/stock · 与技能对照
同一批任务,Rockyzsu/stock 与 EasyClaw 各自覆盖哪些
| 任务 | Rockyzsu/stock 的现状 | EasyClaw 本机技能 | 对照结论 |
|---|---|---|---|
| 读行情 / 查指标 | datahub/ 与 monitor/ 自建脚本,需自建库与登录态 | akshare-finance、a-stock-analysis、tushare-finance、mx-data | 两边都能做;技能侧免部署 |
| 盯盘预警 | monitor/ 四类机制,需自建 cron 与推送通道 | stock-monitor-skill-0-1-0(7 类预警规则、分级预警,不支持自动下单) | 两边都能做;技能侧开箱即用 |
| 技术分析 / 形态识别 | k-line/,依赖 talib 本地 C 库 | stock-technical-mastery、chart-image(含 K 线出图) | 两边都能做 |
| 回测 | backtest/ 5 个示例,无绩效统计 | quant-analyst(回测方法、风险指标、组合优化) | 技能侧在方法论层面更完整 |
| 条件选股 | select_stock.py(导入期报错) | tonghuashun-research-assistant、iwencai、mx-select-stock | 技能侧免维护 |
| 券商客户端自动下单 | trader/auto_trader.py(缺凭证、部分函数被注释) | 本机 29 个技能中没有等价技能 | 两边都没有可用实现;这是明确的空白区 |
| 模拟交易 | recordMyChoice.py 记录选股后收益 | mx-stock-simulator(东财妙想模拟组合,支持买卖/撤单/持仓查询) | 技能侧提供了现成的模拟环境 |
| 自建落库(MySQL/Mongo/Redis/ES) | 项目核心设计的一部分 | 本机技能侧没有对应能力 | 这是自建路线的独有价值 |
这张表最值得注意的两行:「券商客户端自动下单」两边都没有可用实现——这是真实的空白区,不存在「换个工具就能自动下单」的捷径;「自建落库」是自建路线独有的价值。Rockyzsu/stock 与 EasyClaw 无已证实集成,完整对照见导航栏的「对比」页。
FAQ
关于 Rockyzsu/stock 的常见问题
Rockyzsu/stock 能直接接实盘自动交易吗?
trader/auto_trader.py 缺少 config.py(第 11 行 import)与 user.json(券商登录凭证),两者都被 .gitignore 排除;另外 __init__ 里候选池与黑名单的初始化行被注释掉,morning_start() 这类函数即使补上凭证也会因缺少属性而失败。ptrade/ 目录只有一个 0 字节文件,server_api.py 的 22 个字段取值都是空键。结论:有骨架,无一条可直接使用。easytrader 是什么?安全吗?
easytrader.use('gj_client') 后 prepare('user.json')。本站不对该库的安全性做评价,只陈述两点与仓库相关的客观事实:①它对券商客户端的版本与界面变化敏感;②它需要 user.json 这类包含登录信息的凭证文件,而仓库作者把它排除在版本控制之外(.gitignore 里有 user.json),这个处理是对的。本站不提供该库的配置教程,也不建议在真实账户上做未经充分验证的自动化下单。PTrade 路线走到哪一步了?
monitor/server_api.py 会把可转债快照写入 Redis 键 ptrade,这建立了「本仓库 → 外部 PTrade 环境」的约定通道;但 ①它生成的 22 个字段取值全部是 item[''](字段名尚未填写);②ptrade/ 目录里只有一个 0 字节的 __init__.py;③PTrade 侧的读取实现不在本仓库。所以这条路线目前只能说明「作者打算这么做」。富途接口能做交易吗?
futu/ 5 个文件只做行情:建 OpenQuoteContext、订阅与取消订阅、取实时价与报价对象。没有任何下单相关的调用。要做交易需要另外查看富途 OpenAPI 中交易部分的能力与权限要求,那不在本仓库范围内。