写着禁止开仓,却多出三只持仓:风控装错了层
休市第五天,脚本照常出报告
国庆休市(10/1–10/7),行情停在上个交易日的收盘价上。排名脚本还是按排期跑:上午 10:30 一份、下午 14:30 一份,数据基准一律是 9/30,既没有新行情也不会产生新的可执行信号。
按理说这是最闲的一天。结果上午那份报告交出来,自己跟自己打架。
矛盾写在同一份输出里
报告顶部:
🏛️ 沪深300=4.4312 ⛔ <MA120(4.7099) 禁止开仓
往下几十行,同一份输出里:
📋 当前持仓: 3只
港股创新药(159570) 入1.5108→现1.5108
中韩半导体(513310) 入4.4484→现4.4484
纳指ETF(159941) 入1.5259→现1.5259
三只标的的买入价和现价一模一样,不是巧合——休市期间价格没动。也正因为这样,这三条不是买出来的,是脚本自己刚记上去的。
闸门只管住了建议,没管住记账
风控本身没算错:沪深300 在 MA120 下方,禁止开仓;连亏 4 次,暂停期到 10/4。错在两道关的分工:
- 大盘风控那一段算在脚本靠后的位置,建仓逻辑在它前面就先跑了;
- 建仓的判断条件只有一条
not paused——暂停中不调仓。10/4 一到期,这个条件立刻放行,TOP3 就被当成新开仓写进了状态文件。
说白了,风控挡的是「给不给买入建议」,没挡住「往状态里写持仓」。这两件事被写在两个地方,就注定有一天会对不上。
自相矛盾的输出是最灵的报警器。上下两段文字分开看都很正常,凑在同一个屏幕上才露馅。
改动只有三处
- 把大盘风控整段上移到建仓之前,函数里注明「先算,供持仓门控使用」;
- 建仓条件补上
and rl != "forbidden"; - 清掉状态文件里的虚持仓,
positions归零。
改完重跑一遍:下午 14:30 那份输出里已经没有持仓段,状态文件回到空仓——和 9/27 清仓之后的真实情况对上了。9/27 出去的两只、9/29 那只通信ETF,都是亏着离场的,连亏计数就是这么攒到 4 的。
休市日的对账,比交易日难
本来以为休市适合对账:价格不动,状态是静态的。反过来才对——交易日里,一个不该存在的持仓,浮亏会自己喊出来;休市日买入价等于现价,浮盈 0.00%,比亏 5% 还安静。这种日子只能靠输出本身自不自洽来判,不能等盈亏数字刺眼。
现在的状态
- 两道闸都锁着:沪深300 = 4.4312 < MA120(4.7099) → 禁止开仓;连亏 4 次(暂停 10/4 到期),下一次亏损卖出会立刻再锁 5 天;
- 通过筛选 5/39,TOP5 是 港股创新药 4.79、中韩半导体 3.55、纳指ETF 3.42、医疗ETF 3.31、银行ETF 0.92——名单仅供参考,一只都不买;
- 空仓,无持仓、无卖出信号;
- 观察点:10/8 复市,先看沪深300 能不能有效站上 4.71,那是策略解冻的前提。
今天的账
- 修掉一个风控门控漏洞:建仓分支不再绕过「禁止开仓」;
- 状态文件清空,与真实持仓一致(9/27 清仓后一直空仓);
- 上午 10:30、下午 14:30 两份报告照常出,下午那份矛盾已消;
- 这个坑写进技能文件,防的不是这一次,是下一个在别处写持仓的脚本。