为什么会有这个问题
最近在设计多策略自动交易时,碰到一个很现实的问题:
竞价策略、十点半策略、两点半策略的出票时间不同。先出票的策略如果把资金用完,后面的机会就无法参与;但给每个策略固定预留资金,某个策略当天没出票时又会造成资金闲置。
整理了一套自己正在验证的方案:所有实盘策略共享一个资金池,同时为晚到策略软预留一个单票额度。
一个具体例子
假设账户总资产为 20万元:
参数 配置 换算金额 全局仓位上限 60% 12万元 自动策略共享比例 50% 6万元 单票资金上限 全局资金池的20% 2.4万元 计算方式:
策略共享资金池 = 总资产 × 全局仓位 × 策略共享比例 单票资金上限 = 总资产 × 全局仓位 × 单票比例 当前阶段可用资金 = 策略共享资金池 - 一个单票软预留代入上面的参数:
策略共享资金池:200000 × 60% × 50% = 60000元 单票资金上限:200000 × 60% × 20% = 24000元 开盘阶段先使用:60000 - 24000 = 36000元这样,早盘策略不会一次吃完整个资金池,后续至少还保留一只股票的额度。
“软预留”与固定预留的区别
预留的2.4万元不绑定某个固定策略:
- 十点半策略有合格候选,就由十点半策略使用;
- 十点半没有候选,额度继续留给两点半策略;
- 后续策略都没有候选,当天保持现金;
- 不为每个后续策略分别预留一份,避免资金大量闲置。
我觉得它介于“先到先得”和“每个策略固定分仓”之间:既给晚到策略留机会,也不会把账户切成很多互不流通的小资金池。
实现时容易忽略的几个细节
1. 同一股票命中多个策略
同一只股票可能同时被竞价多头、晨星或阿尔法命中。单票额度应按证券代码合并计算,不能让每个策略分别获得一个20%上限。
例如:
策略A计划买入 16000元 策略B计划买入 14000元 单票上限 24000元 最终合计最多 24000元同时要保留全部命中来源,方便后续比较究竟是哪套策略贡献了收益。
2. 多票必须稳定排序
多只股票争抢剩余资金时,应先按固定规则排序,例如:
- 策略优先级;
- 策略评分;
- 信号实际发现时间;
- 股票代码作为最后的稳定排序条件。
否则并发执行时,可能每次都是不同股票先拿到资金。
3. 下单前重新检查资金
策略规划出来的额度只是预算。真正发单前仍应重新检查:
- 券商实时可用资金;
- 已成交的策略持仓;
- 尚未完成的买入委托;
- 当前股票已占用的策略成本;
- 全局仓位和单票上限。
4. 重试必须幂等
每笔交易生成稳定的
intent_id。网络超时、进程重启或定时任务重复触发时,先检查同一意图是否已经提交,避免重复买入。5. 人工持仓是否占用策略额度
我的倾向是:
- 已认领为策略操作的人工持仓:计入策略资金池;
- 普通人工中长线持仓:不占策略额度;
- 但券商真实可用现金始终是最终限制。
还没有完全想清楚的地方
目前最大的争议可能是:晚到策略真的值得固定保留一个单票额度吗?
另一种方案是根据各策略的历史收益、最大回撤和近期表现动态分配权重。但这样容易把历史最优参数带进实盘,也可能在策略刚好进入回撤期时追涨杀跌式调整权重。
暂时感觉“共享资金池+一个单票软预留”更简单,也更容易解释和审计。
大家同时运行多个策略时,采用的是哪一种?
- 每个策略固定分仓;
- 所有策略先到先得;
- 按历史表现动态分配;
- 共享资金池加软预留;
- 还有更合适的处理方式?
欢迎讨论,特别想听听大家在不同出票时间、同票多策略命中、资金并发占用这几个问题上的处理经验。
晚到策略的问题今天测试了,下周再观察一下,后续应该可以控制到 29 分之前都能出票。
资金分配,如果是各个策略都要考虑的话,建议用给权重。比如策略 A 占用 2 成资金,策略 B 效果好就占用 3 成资金。(都是按可用资金算)
每个策略尽可能不超过 3 成仓位,更避免单钓一只,风险太大了。历史中每个策略都有 T+1亏损15% 左右的记录。
其他的环节属于量化交易系统的设计和风控,细节太多了要一点点调优
看了下涉及到的东西确实好复杂,持续跟进佬的帖子。
最后由 adachishimamura 编辑于 2026-10-17 22:09学习一下,感觉资金不太好分
我们是一个总资金池加单票上限,晚到的策略排队或者降仓位,不搞软预留,容易算重复。另外留个总仓位阀门,几个策略同时亏的时候能救一命。