|
1. 这是什么软件这是一个基于 QMT 的自动化交易工具,核心目标是: - • 从回测网站读取策略持仓建议。
- • 自动计算目标持仓并执行调仓。支持多策略,多品种。
- • 支持拆单、止盈止损、账号分时涨幅止盈。
- • 支持自动打新、尾盘逆回购、尾盘补仓。
- • 提供全局模拟模式,先演练流程再上实盘。
适合人群: - • 有 QMT 账户、希望半自动 / 自动执行策略的人。
- • 不想每天手工盯盘、希望流程可复用的人。
2. 你每天会怎么用(最短流程)- 1. 启动 QMT 客户端并确认账户可交易。
- 2. 打开本程序,检查主页面参数,填写自己的证券账号,以及 QMT 路径。
- 3. 点 “开启交易”,观察日志是否正常。
- 4. 确认策略、时间、日志都正确,不清楚的地方随时咨询。
3. 软件有三个页面,三个页面分别干什么3.1 主页面主要放交易必需参数: - • QMT 安装路径
- • 登录账号
- • 策略选择(来自策略回测网站,使用 Redis 传输)
- • 总仓位比例
- • 卖出开始时间、买入开始时间
- • 是否开启自动打新
- • 是否开启自动逆回购
3.2 扩展参数主要放进阶风控参数: - • 是否开启拆单模式
- • 是否开启按比例减仓
- • 是否开启止盈止损
- • 是否开启账号分时涨幅止盈
3.3 其他功能主要放运行日志和状态提示:
- • 自动打新日志
- • 自动逆回购日志
- • 全局模拟拦截日志
此外这里也有: 当 是否开启全局模拟 = “是” 时: - • 程序会完整走策略流程。
- • 会打印下单相关日志。
- • 但不会向柜台真正发单。
你会在日志里看到类似: [全局模拟] 拦截异步下单 ...
[全局模拟] 拦截同步下单 ...自动打新 / 逆回购结果文件也会带 模拟模式: true 标记,便于区分演练和实盘。 止损时间,即在哪个时间点执行止损。 尾盘防滑点,即在临近尾盘进行买入。 4. 核心功能说明4.1 主调仓- • 程序按选定的策略名获取到对应的目标持仓。
- • 在设定时间窗内自动买卖调仓。
- • 支持多策略合并持仓。
注意:单个标的的仓位如何计算: - 1. 先算本轮总买入资金
账户总资产 × 确定买入仓位设置的仓位比例 = 本轮计划使用的总资金。 - 2. 把总资金按策略分配
多策略场景下,先按策略数量平均分配到每个策略。
满仓的情况下,比如 10 个策略就每个策略 10% 资金。 - 3. 把单策略资金按成分股分配
单策略资金 ÷ 该策略持有标的数量 = 单标的理论资金。 - 4. 把理论资金换算成理论数量
理论数量 = 单标的理论资金 ÷ 当前标的价格。
4.2 尾盘补仓- • 为减少资金 “买不满” 的情况,比如 100% 的仓位只买得满 90%,则 14:55:00 ~ 14:56:00 会尝试补仓一次。
- • 规则是:按没买够金额的标的优先补仓,每标的补一手,补一次,不重复执行。
- • 轮动调仓在 14:54:59 截止,避免同日调仓程序和尾盘补仓程序互相打架。
4.3 自动打新- • 固定时间窗口:09:58:00 ~ 10:05:00。
- • 仅交易日执行,非交易日自动跳过。
- • 当天在窗口内如果失败,会继续重试;窗口结束后不再重试。
- • 当日任意一笔打新成功,就标记 “今日已执行”,当天不再重复下单。
- • 如果当天没有可申购标的,会记录 “今日无可申购新股 / 新债”,生成结果文件。
- • 如果到 10:05:00 仍未成功,会记录失败摘要并提示检查账户 / 网络 / 标的。
- • 当天会生成结果文件,包含成功 / 失败明细和是否模拟模式标记。
- • 关于北交所打新:当前自动打新能力以 QMT 接口返回为准。这版程序使用的申购额度接口主要返回 SH/SZ/KCB(科创)范围;如果接口没有返回北交所可申购额度,程序会判定为 “无可申购额度” 并跳过,不会盲目发单。
- • 简单理解:不是程序故意不支持北交所,而是交易柜台接口当日有没有给出北交所申购能力;接口不给,程序就不冒险下单。
4.4 自动逆回购- • 固定触发时间窗口:15:00:30 ~ 15:03:00。
- • 仅交易日执行,非交易日自动跳过。
- • 触发前会先检查是否有主交易未完成委托;如果有,逆回购本轮跳过,避免影响主交易。
- • 会自动比较两个候选标的:204001.SH 和 131810.SZ,优先选择当时价格更高的一方,尽量获取更高的收益率。
- • 长假期间,要想获取更高收益的逆回购,需要手动自己去买,要注意在程序逆回购启动前完成,把账户剩余资金占用完,避免程序默认买 1 天的逆回购。
- • 下单资金按可用资金计算:可用资金 × 0.999,再换算成 “张数” 并按 10 的整数倍取整。
- • 如果可下单张数不足 10 张,会记录 “可用资金不足” 并跳过本轮。
- • 当日成功提交一次后就标记 “已执行”,当天不再重复逆回购。
- • 如果超过 15:03:00 还未成功,会记录 “超出触发窗口” 的失败摘要。
- • 当天会生成结果文件,包含成功 / 失败明细和是否模拟模式标记。
4.5 止盈止损与账号分时曲线止盈这是两套独立风控:个股止盈止损 + 账号资金曲线止盈,可以同时开启。 个股止盈止损(针对持仓标的): - • 监控时间:交易日 09:29:50 ~ 11:31:00、12:59:00 ~ 14:40:00。
- • 触发对象:当前有持仓、且满足止盈止损涨跌幅条件的标的。
- • 止盈触发:当涨幅 >= 止盈涨幅时,按卖出价差尝试清仓卖出。
- • 回落止盈触发:当 “最高涨幅到过止盈线” 且 “从最高点回落达到 0.5%” 时触发。
- • 回落止盈当天限流:同一标的首次触发后,超过 10 分钟当天不再重复触发回落止盈。
- • 止损触发:当跌幅 <= 止损跌幅时,尝试清仓卖出。
- • 生效前检查:在触发止盈 / 止损时,对该标的先撤未完成挂单再卖出。
账号分时曲线止盈(账户级): - • 仅在交易日盘中运行,按约 10 秒采样一次账户总资产。
- • 先读取 “昨日总资产基准”(本地文件),盘后会自动更新;没有基准就只告警不执行,不影响其他线程。
- • 触发条件同时满足才执行:
- • 当日账户总涨幅 >= 账号分时涨幅设置(例如 1%);
- • 且分时曲线的斜率从正转负(即出现下跌趋势时触发减仓)。
- • 触发动作:自动把 “是否开启按比例减仓” 置为 “是”,并按 资金曲线管理减仓比例 执行一次减仓。
- • 冷却机制:3 分钟内不重复触发,防止连续抖动反复减仓。
4.6 拆单和碎股处理这部分是为了减少冲击成本、提升成交稳定性,同时尽量避免“差一点买不满 / 卖不掉”的问题。 拆单机制(大单分小单): - • 由 是否开启拆单 开关控制,开启后按 拆单_单笔最大金额 分批下单。
- • 单笔金额先按“价格 × 数量”估算,再向下取整到可交易最小单位。
- • 买卖方向都支持拆单,且买入 / 卖出使用各自的最小交易单位规则。
- • 拆单日志会打印每笔数量、价格、目标仓位,便于复盘排错。
碎股处理(重点): - • 常见场景:调仓后剩余少量零头(例如可转债剩 7 股,不足标准一手)。
- • 程序在 目标仓位 = 0(清仓) 时,若当前持仓小于最小卖出单位,会按当前持仓量直接尝试卖出,不再因为取整变成 0 而卡住。
- • 这个逻辑主要用于清理尾巴仓位,减少长期遗留碎股。
5. 交易所与最小下单量适配软件已适配: - • 上海(SH),包括科创板
- • 深圳(SZ),包括创业板
- • 北交所(BJ)
6. 完整参数说明(全部)下面把当前版本会用到的参数一次性讲全,按 config.json 和 config3.json 分开说明。 6.1 config.json(主交易参数)- • qmt安装路径:QMT 交易端用户目录路径,必须真实可用。
- • 登陆账号名:证券账号,用于读取账号策略和交易。
- • 总仓位比例:总资金用于策略交易的比例,1.0 表示 100%。
- • 开始调仓时间:设置轮动卖出开始时间,程序会自动补随机秒,随机秒数的意义是避免所有人同时下单。
- • 尾盘买入时间:设置轮动买入开始时间,程序会自动补随机秒。
- • 不卖出名单:手工写入标的代码,实现无论怎么都不卖出。
- • 不买入名单:手工写入标的代码,实现无论怎么都不买入。
- • 是否阅读免责声明:启动前检查项,通常保持 “是”。
- • 策略选择:Redis 中选中的策略列表(可多选)。
- • 是否开启自动打新:是否自动执行打新流程。
- • 是否开启自动逆回购:是否自动执行逆回购流程。
- • 是否开启全局模拟:是否只演练流程而不真实发单。
- • 是否开启拆单:是否启用拆单模式。
- • 拆单_单笔最大金额:拆单时单笔金额上限。
6.2 config3.json(风控与减仓参数)- • 是否开启按比例减仓:是否启用按比例减仓逻辑。
- • 减仓到哪个比例:按比例减仓后保留的仓位比例,比如 30% 表示保留 30% 仓位,改动后会立马执行减仓,不需要重启程序。
- • 是否开启账号分时涨幅止盈:是否启用账号分时涨幅止盈逻辑。
- • 账号分时涨幅设置:触发资金曲线管理的涨幅阈值。
- • 分时涨幅减仓到哪个比例:触发后减仓到的比例。
- • 是否开启止盈止损:是否启用盘中的止盈止损。
- • 止盈涨幅:达到该涨幅触发止盈。
- • 止损跌幅:达到该跌幅触发止损,一般不开启。
6.3 时间参数的重点规则- • 卖出开始时间不能晚于买入开始时间,否则会弹窗报错并阻止开启交易。
- • 尾盘补仓时间窗固定为 14:55:00 ~ 14:56:00,并且当日只执行一次。
|