返回首页

SITE CHANGELOG

更新日志

这里记录网站已经完成的功能、修复、回退和安全边界调整。未实现的想法不会写在这里,后续计划会单独维护。

记录数量135
最近更新2026-09-05 12:46
交易边界只分析,不下单
2026-09-05 12:46修复

修复:合约清单查询失败之后,站上就永远空着了

昨晚 19:31 起,站上一张合约都没有,一直空到今天。行情连接是正常的,是「向交易所要合约清单」这一步在失败,而失败之后没有任何东西会再试一次。

  • 查询合约清单只在两种时候发生:新建连接,和换月份。所以一次失败的查询会让这条链**永远**停在零张合约上——不会自愈,也不会报错,页面就是空的。
  • 现在把「查询失败」和「查到零个」分成两个信号。后者是这个月真的到期了,交给自动滚月;前者是网络或接口的问题,只该再试一次:15 秒后重试,还失败就 30 秒、1 分钟、2 分钟,最多 5 分钟一次。
  • 这两件事此前只写在给人看的那句中文警告里,没有任何代码能对它做出反应。
影响

空的那段时间(09-04 19:31 到重新上线)没有行情数据,历史库那两天也没有记录,补不回来。

2026-09-05 12:48修复

修复:连接正常但一张合约都没有时,系统完全看不见

昨天刚上线的「行情停滞」判断,恰好漏掉了昨晚这种情况——它比对的是交易所时间戳,而零张合约意味着一个时间戳都没有。

  • 判断逻辑读「最后一笔报价是什么时候」,读不到就回答「不知道」,不算故障。这个保守做法本身是对的(刚启动的进程不该立刻掀自己的连接),但零张合约刚好落进这个缝里,于是十八个小时里没有任何东西说过一句话。
  • 现在多一条判断:连接已经建立超过十分钟、按交易时段推算应该在开盘、而合约数是 0——这不是「还在加载」。会报警告,并且自动重建连接,最多半小时一次。
  • 「字段没带这个数」和「明确是 0」分开处理。混在一起会把每一个健康的行情源都判成故障。
  • 页面上的提示会区分是哪一种:报价不再推送,还是合约清单要不到。两者排查方向不一样。
影响

只加判断和提示,不改任何计算。

2026-09-05 12:50修复

修复:连着两次部署会让收盘全量扫描跑两遍

昨天下午两次部署都落在扫描窗口(15:05–20:30)里,而「今天扫过没有」只记在进程内存里,一重启就忘了。

  • 结果是十七分钟内把四千个合约的订阅突发打了两遍。十九分钟后行情源的合约查询开始全面失败——因果没有百分之百坐实,但这是当时唯一的异常动作。
  • 现在「今天扫过了」落盘记一笔,重启之后读回来。用单独一张表,不是去看采样表里的最新日期——那张表实时采样每几分钟就写一次,周一上午它就等于今天,会把当天的扫描整个跳过。
  • 同时把扫描本身放缓:每批订阅从 500 个降到 200 个,每批之间让行情源喘一口气。扫描多花几十秒,换掉的是一整晚的行情。
影响

全量扫描的结果不变,仍然是每个交易日收盘后一次、覆盖所有挂牌月份的所有行权价。

2026-09-04 18:40界面

弹窗里只有一天数据时,说清楚而不是画一条平线

刚开始记录的合约只有一个点,画出来是一条直线,容易被当成「这几天没变化」。

  • 只有一天记录时不画图,改成一句说明:攒够两天就有曲线。
  • 一条记录都没有时的说明也改了。原来写的是「这个库从每天收盘各记一笔开始攒」,现在会说明每天收盘会把所有挂牌月份的每个行权价都记一笔,明天再来看就有第一个点。
影响

只改弹窗里的文字和空状态,数据没有变化。

2026-09-04 18:38功能

所有挂牌月份、所有行权价,每天收盘各记一笔

此前收益率曲线只记「当前订阅的月份」,所以主力有曲线、远月没有——一张合约要等到有人点开它的那天,才开始攒历史。

  • 线上实测的差距:沪铜 2610 从 08-27 起就在订,攒了 6 天;沪银 2612 和沪深300 2610 是 09-02 才被点开的,只有 1 天。目录里一共 41 个月份,被订着的只有 12 个。
  • 现在每个交易日收盘后(15:05 到 20:30 之间)会向交易所要一次全部在挂期权的清单,把每一张的收盘报价读下来,算出占资和年化各记一笔。没订过的月份从这次上线之后开始,也会一天一个点地长。
  • 为什么不是一直订着:全部月份估计四千张合约以上,光白银一个月就有 530 张,而页面上只显示你选中的那个月。长期订着等于全天扛着整个交易所的期权行情,其中 99% 没有人在看。日线序列一天只要一个读数,收盘那一笔又恰好是最该留的(开盘价差最宽,期权上尤其不可信)。
  • 扫完会把行情连接重建一次,把临时订上的那几千个合约放掉——这是唯一干净的退订方式,而且此时已经收盘,没有数据可丢。
  • 新鲜度换了一套判断。实时链路的规则是「报价年龄小于 60 秒」,收盘后一律算过期、不写库;这条规则对收盘快照恰恰是错的——15:00 的收盘价在 18:00 读到,年龄三小时,但它就是今天的收盘。扫描改判「这笔报价的时间戳落在今天」,顺带也挡住了休市日:休市日读到的是上一个交易日的时间戳,一行都不会写。
  • 存储上限相应提高(40 万行 / 48MB → 120 万行 / 320MB),并且把数据库的实际体积报进健康检查,涨得比预期快的时候能提前看见。到期 30 天后清理这一条没有变。
  • 顺带的好处:同档位可比样本一下子多了几倍,「比同档位过去 N 天里的 X 天都高」那个分位会更快达到 30 天的起算门槛。
影响

只增加记录范围,不改任何计算口径——远月和主力走的是同一套公式、同一份配置,曲线之间可比。已有的历史不受影响。

2026-09-04 18:20修复

修复:行情断了两个交易日,而系统全程判成「休市」

09-02 收盘之后行情就没再更新过,09-03、09-04 两天的数据全部没有进来。连接、线程、心跳一路正常,所以没有任何东西发现它已经死了。

  • 现象是一条「半死」的连接:TCP 还连着,心跳每 10 秒一次,一次报错都没有,但交易所那边的报价再也没有送进来过。站上原来的判断逻辑写得很明确——连接正常而报价不动,就是休市——这个判断在这种情况下正好反过来。
  • 确认它不是休市:外部行情显示 09-03 沪铜收 108410、涨 300,而我们库里 09-02 的收盘正是 108110,对得上。所以 09-03 确实开市,是我们没收到。
  • 现在加了一层按交易时段的判断:在可能开盘的时间段里,报价连续十分钟不动就主动把行情连接掀掉重建。重建这件事本来就每天在做(换月、断线都会走同一条路),只是此前没有任何条件会触发它。
  • 刻意不引入节假日表:节假日每年才公布一次,写进代码里会悄悄过期。这里只用「星期几 + 几点」这种不会过期的条件,而且只用来决定「要不要重连一次」——放假那天误重连的代价是一次握手,真断流那天不重连的代价是一整个交易日的数据。
  • 午休和上午的小节休息都单独留了出来,并且要求「已经进入当前这一段十分钟」才开始计时——否则每天 13:00 一开盘就会误判一次。
  • 重连不是无限重试:连着几次重连之后交易所时间戳还是不动,间隔会翻倍(10 分钟 → 20 → 40 → 80),所以真碰上休市日,一天也就多几次握手。
影响

这两天缺的历史数据补不回来(行情源只提供实时报价),从这次修复上线之后开始正常记录。

2026-09-04 18:22功能

行情长时间不更新时,页面上会直说

原来只有「休市」和「连接中断」两种说法,这次那个故障两种都不像,页面于是一直显示「通常是非交易时段或休市日,不是故障」。

  • 多了一档提示:连接正常,但按交易时段推算现在应该在开盘,报价却长时间没动。会写清停了多久、最后一笔停在哪一刻。
  • 措辞是提示而不是报错,并且明说「如果今天休市,忽略即可」——休市日会命中同样的条件,这一点没法从这里分辨,与其猜错不如说清楚。
  • 运维告警同步加了一条同口径的警告。它不会升级成「需要立刻处理」那一档:那一档是留给连接真的断了的,混进来会让人开始忽略告警。
影响

只是多一句说明,不改任何计算。

2026-08-31 02:40修复

修复:保证金率提示里的「去填写」按钮在白色和玻璃黑档下是隐形的

上一条刚上线的提示,按钮复用了站上通用的主按钮样式,而那个样式用渐变铺底——在它前面写的纯色底盖不住,结果是透明底配白字。

  • 白色档下就是白底白字,按钮完全看不见;玻璃黑下勉强能读到字但没有按钮形状;只有纯黑档正常,因为那一档有条规则把渐变底整个关掉了,反而露出了纯色。
  • 改成给这个按钮自己的类名,不去和通用样式抢优先级。同时写死纯色底和「不要渐变底」两条——只写前者的话,任何用渐变铺底的邻居规则都能从背后盖过来。
  • 这条是自查发现的:上一轮刚把「三档配色要各验一遍」写进项目交接文档,起因正是历史弹窗只在纯黑档验收、而另外两档是半透明的。这次照着自己写的规矩查了一遍,当场撞上同一类问题。
影响

只修按钮的可见性,提示的文字和行为没有变化。

2026-08-31 02:05功能

没填保证金率时,页面上直接提示你去填

保证金率不是脚注,是每个人都要做一次的设置:没填的话,站上每一个「占资」和「年化」对你来说都是偏高的。

  • 站上的保证金按交易所公式估算,其中的期货保证金率取 12%。各品种的真实费率并不相同,期货公司还会在交易所标准上加收——所以没填之前,占资和年化会比实盘乐观。
  • 原来这件事只写在悬停解释和历史弹窗的折叠说明里,等于只有已经起疑的人才看得到。现在没填时页面上直接给一条提示,点「去填写」会展开设置并把光标放进那个输入框。
  • 填上就自动消失,不需要手动关。不想填的可以按「不再提示」,关掉之后记住,不会反复弹。
  • 用中性强调色而不是警告红:这不是出错了,是一件还没做的设置。红色会让人以为站坏了,而它只是需要一个数字。
影响

只加提示,不改任何计算。默认行为和原来一致——不填仍然按 12% 估算。

2026-08-31 01:10界面

历史弹窗里加了「口径与实盘差异」

有人报「计算的收益率和软件实盘我测算的不相符」。公式是对的,差在保证金那个估算值——但站上原来没有任何地方说明这件事,对不上的时候不知道从哪查起。

  • 弹窗底部新增一段折叠说明,直接把这张合约自己的分子分母摆出来:占资 = 权利金 ÷ 保证金,比如「6,625 ÷ 163,555(估算)」。只给一个比例的话,对不上时没法判断问题在分子还是分母。
  • 并点明三处会造成差异的地方:保证金是按交易所公式估算的(费率取自设置里的「期货保证金率 %」,把交易软件里的真实数字填进去就对得上);交易所公式用结算价而站上用最新价,收盘后差得最明显;手续费和滑点完全没有计入。
  • 默认折叠。它是「对不上的时候来看」的东西,不是每次都要读的——摊开会把曲线和三个数挤出屏幕,而那才是点开弹窗要看的。
影响

只加说明,任何数字和口径都没有变化。

2026-08-31 00:20修复

修复:历史弹窗是半透明的,后面的报价会透上来

有人报「这个弹窗很不错,但有点看不清」。它压在期权链上,而后面那几十行数字直接透过来了。

  • 浮层原来用的是通用面板底色,而白色档那个是 rgba(255,255,255,.70)、玻璃黑是 rgba(9,12,20,.66)——两档本来就是玻璃材质。浮层要压住数据,就不能是半透明的。
  • 我自己截图验收时用的是纯黑档,而那一档的面板底色恰好是实心的 #0a0a0a,所以没看出来。三档配色里有两档有问题,我只看了没问题的那一档。
  • 现在浮层用一个专门的实心底色,三档各给一个值,并加重了投影让它从密集的数字上浮起来。
  • 纯黑档单独处理:那一档按设计不用投影,而卡片和表格底色都是纯黑,只靠边框分隔——把这一个浮层的边框提亮了一档,不影响别处。
影响

只改这个弹窗的底色和投影,内容和数字没有变化。

2026-08-30 23:40修复

保证金率可以自己填了,「保证金」列默认打开

有人报「计算的收益率和软件实盘我测算的不相符」。逐项验过公式没错,差在输入:期货保证金率是写死的 12%,而铜、银、金、原油四个品种共用这一个数。

  • 以线上白银 ag2610 行权价 14100 的看跌为例:名义 16116×15=241,740,×12%=29,008.8;虚值额 (16116−14100)×15=30,240,×0.5=15,120;两者取大得 14,504.4,加权利金 1,087.5,每手 15,591.9,五手 77,959.5——站上算的和公式完全一致。
  • 但真实保证金率不是 12%。同样这张合约,按期货公司常见的 15% 算,保证金变成 111,143,占资从 6.97% 掉到 4.89%。这个量级足以解释「和实盘不符」。
  • 设置里新增「期货保证金率 %」。留空跟随服务端估算值;把你交易软件里的那个数填进来,保证金、占资、年化三列就会和实盘对上。
  • 它和「保证金上浮 %」不是一回事,可以叠加:上浮乘的是算完之后的保证金(期货公司按比例加收),保证金率改的是公式里的那个率(交易所标准本身)。
  • 「保证金」列改成默认打开。占资 = 权利金 ÷ 保证金,两个数都摆出来,对不上的时候一眼就能看出是分子还是分母的问题——原来只显示比例,想查都没处下手。
  • 股指期权不受这个输入影响:中金所的系数是公开发布的,站上直接用 0.13,不是估算。
影响

默认行为和原来一致(不填就还是 12%)。填了之后保证金、占资、年化三列会变——那是修正,原来的偏乐观。

2026-08-27 18:10功能

点开「占资」或「年化」,看这一格自己的历史走势

期权链上每一格占资和年化都可以点开:一条日线走势、历史最高最低、当前值,以及它在同档位里的分位。

  • 点击而不是悬停。每一格都要发一次请求,而链上有 26~80 行——悬停的话,光把鼠标从表头挪到表尾就会打出几十个请求,而你只想看一个。
  • 分位用的是海外 IVP 那种排序法:「比同档位过去 40 天里的 31 天都高」。刻意不写成「处于 78% 分位」——百分数看着精确,但读的人无从判断它拿多少样本算的;把分母说出来,30 个样本和 300 个样本的可信度差别就摆在脸上。
  • 曲线和最高/最低/当前按这张合约自己算,分位按**可比档位**算(同品种、同虚值度、同剩余天数区间),弹窗里分别标清楚。
  • 为什么分位不能跟自己比:年化 = 占资 × 365 ÷ 剩余天数。同一张合约同一段时间,占资的「当前」正好是历史最低,年化的「当前」正好是历史最高——市场什么都没变,两个数却说着相反的话。跟自己比的分位反映的是「离到期还有多久」,不是「贵不贵」。
  • 同档位样本不足 30 天时不给分位,只给曲线。和隐波分位同一条规矩:几个点算出来的分位,和一年算出来的长得一模一样,却同样自信。
  • 数据是从今天开始攒的,每天收盘各记一笔。所以头一个多月里曲线只有几个点、分位那一块是空的——这不是坏了。
影响

只读新增。期权链上的任何数字和口径都没有变化。

2026-08-27 16:20修复

月份条不再挂着已到期的月份,剩余天数也补上了

中金所 2608 明明 8 月 21 日就到期了,月份条上还挂着,点进去一片空白。

  • 根子是前端自己抄了一份合约挂牌规则(后端那份的 TypeScript 版)。日历规则算得出「这个月存在」,算不出「它还能不能交易」——后者要么问交易所,要么等实时数据。
  • 现在月份条由后端的月份目录说了算,前端那份复刻不再参与判断。同一件事只有一个地方算,不会再裂。
  • 已经证明没有挂牌期权的月份不再显示;后端订过的月份带上剩余天数;交易所新挂的月份会自动出现,不需要改代码。
  • 后端没订过的月份照常显示,只是没有天数。这一档刻意和「已到期」分开:后端同时只订两三个月份,把「不知道」当成「死了」会把一整排活着的远月藏起来——比多显示一个死月份糟得多。
  • 没订过的月份不按日历估天数。商品期权的最后交易日是「交割月前一月的倒数第五个交易日」,需要交易日历;估出来的数会在移仓那几天恰好错得最厉害,而那正是最需要它的时候。
  • 正在显示的那个月份即使已到期也留在条上,标成已到期。不留的话会出现一个幽灵状态:页面底下写着「当前显示:沪铜2609」,而它的按钮已经不见了——看得到名字却点不到、也切不走。
影响

只改月份条显示哪些月份,任何报价和口径都没有变化。

2026-08-27 15:50修复

后端会自己滚过已到期的月份了

线上实测:交易日内、重启 171 秒后,合约总数 0——七个默认月份全部已到期,而后端还订着它们。

  • 沪铜 2609 的期权 8 月 25 日就停止交易了,中金所 2608 是 8 月 21 日第三个星期五。而全站唯一的滚月逻辑在浏览器里:后端只有在有人开着页面时才会离开死月份,而且只滚那个页面正在看的品种。
  • 比空页面更要紧的是两个历史库——它们都只在标的有新鲜行情时才记录,后端停在死月份上时一行都不记。这两个库要攒几个月才有意义,而它们的积累被悄悄绑在了「有没有人开着浏览器」上。
  • 现在后端每分钟自查一次:某个在订月份查得到、但一张未到期期权都没有,就滚到该品种的下一个月。上线后实测一个周期内 0 张 → 1078 张,七个品种全部滚到活月份。
  • 查询失败不算到期。查失败是网络或接口的问题,按它滚月会把一个活得好好的月份丢掉——这两种情况在数据源那一层就分开了。
  • 已经滚过的月份记下来,不会再滚回去。挂牌表按当前日期算,月底时前一个月会从表里掉出去,没有这份记忆会在两个月份之间来回横跳。
影响

重启或换月之后不再需要有人打开页面才恢复;两个历史库的积累也不再依赖这个。

2026-08-25 21:45修复

波动率历史库已经在记了;顺带修掉一个会让人以为它是空的读数

历史库在服务器上开起来了,从 08-22 开始积累,现在盘上 292 行,六个标的都有,采样间隔实测 900/901 秒。

  • 间隔分布里只有 900 和 901 两个常见值,更大的几个(1800 / 8101 / 22501 / 197101)分别对应午休、隔夜和周末——休市不采样这条按设计生效了。
  • 但状态里的「样本数」会骗人:它和「已跟踪标的数」都只在写入成功时被顺带填上,从不在打开数据库时读一次。于是刚重启的后端拿着几个月的历史,却报样本数 0。
  • 今天下午就撞上了:盘上已有 292 行,重启后的 26 分钟里一直报 0,直到下一次采样落库。看上去和「库是空的」一模一样,我据此判断错了一次。
  • 现在打开数据库时直接把两个数从盘上读出来。顺带修好另一件:采样间隔原来撑不过重启——「没有上一次时间戳」被当成「该采了」,所以开市期间重启会在上一行之后几秒又写一行,破坏分位数假设的等距采样。
影响

只改状态读数和采样间隔的判断,已经记下来的数据不受影响。

2026-08-22 01:40修复

修复:期权链左边(CALL)缺一列「占资」

右边 PUT 有「占资」,左边 CALL 没有。两侧本该是完全对称的。

  • 列的定义其实是对称的——同一个数组,PUT 侧取它的倒序。问题出在样式表:轨道宽度是手写的常数,而且写了四份互不相同的(1216 / 1040 / 1100 两处),实际列宽合计是 1196px。
  • 工作台上生效的是 1100px,比实际少 96px。CALL 侧是右对齐的,网格比自己的盒子宽出来的这 96px 正好把最内侧那一列推出可视区——实测只剩 2 像素,所以看起来就是「没有这一列」。PUT 侧是左对齐,溢出朝外,所以完全看不出问题。
  • 现在轨道宽度由列定义算出来发布成一个变量,样式表只引用它。手写常数还有一个更根本的毛病:可选列(保证金、接货金额)一打开总宽就变,写死的数字必然过期。
  • 原来是有哨兵测试的,却一直是绿的——它只钉住「列宽合计等于 1196」这一侧,从没检查样式表里写的是不是同一个数。守的是等式里没出问题的那一边。已改成直接验证宽度变量,并补一条「打开可选列之后宽度跟着变」。
影响

只影响期权链左侧最内侧那一列的可见性,任何数字和口径都没有变化。

2026-08-21 22:05修复

十字线的横线现在跟着鼠标走

原来横线画在「你悬停那根 K 的收盘价」上,所以鼠标上下移动它一动不动——它压根不是一条光标线,是一条价格线。

  • 浏览器里量过:同一个横坐标下,鼠标从 y=598 移到 y=832,横线始终停在 674,偏差 +193 到 −158 像素。竖线是好的,一直贴着鼠标(偏差 0~1 像素)。
  • 顺带排除了性能:同一次测量里 mousemove 到下一帧 p50 是 0.3 毫秒、p90 0.4 毫秒、最大 1.6 毫秒。卡顿的感觉全部来自「它不动」,不是来自「它慢」。
  • 现在分工清楚了——竖线 + 圆点 + 读数条描述你悬停的那一根 K;横线 + 右侧标签描述你鼠标停在哪个价位。后者才能量出「现在离这个价位还有多远」,而这是看行情图最常做的事。
  • 光标价位标签刻意用中性灰、不带涨跌箭头:那不是任何一根 K 的价格,给它红绿等于凭空说出一个方向。鼠标不在图上时退回原来的样子(最后一根收盘 + 箭头)。
  • 隐波胶囊的避让跟着改了。它原来躲的是「最后一根收盘」那个固定位置,而价格标签现在会动——不改的话,它会去躲一个已经不在那儿的东西,然后和真正的标签叠在一起。右轴刻度的让位同理。
影响

三档配色一起生效——这是交互缺陷不是配色。白色和玻璃黑的视觉语言没有动,只有横线的位置和右侧标签的内容变了。

2026-08-21 21:15修复

更新日志页的主题选择器少了「纯黑」这一项

页面本身是纯黑的,右上角的选择器却写着「白色」——而纯黑是默认档。

  • 这一页自己抄了一份主题清单:三项、写「黑色」而不是「玻璃黑」、没有纯黑。默认值落在一个不存在的选项上,浏览器就退回显示第一项。
  • 更麻烦的是你一旦动它就再也回不到纯黑了——清单里根本没有那一项。
  • 首页和工作台的同一个毛病上一轮修过(11:42 那条),漏了这一页。现在四个入口共用同一份清单,不再各写各的。
  • 顺带补上和工作台一样的两条:读取时接受全部四种取值,以及打开页面不再把默认主题写进本机记录。
影响

只影响这一页右上角的选择器,不改任何日志内容。

2026-08-21 20:40修复

手机上期权链能用手指横划了

390 宽的屏幕上,PUT 侧 130px 要装下 1196px 的列,12 列只露出 1 列(「占资」),而容器是不可滚动的——手指划不动。

  • 唯一的出路原来是那根列滑杆,可它在 28 行报价之后(实测 y=938,而屏高只有 844),得先滚到底才看得见。两份独立评估都报「看不到卖一/买一」,一份的原话是「手指划不动,只能用底下那根没有任何标签的滑杆」。
  • 窄屏改成原生横向滚动,并把滑杆藏掉——划得动就不需要它。宽屏不变,仍然走滑杆,两套机制不能同时上。
  • 代价是窄屏下左右两侧不再联动。手机上本来也只看得见一侧,联动是为了并排比较,而并排在这个宽度下不存在。
  • 同一侧的表头和每一行是各自独立的滚动容器(右侧实测 14 个),划一行只动一行,列会立刻错位。加了同步:同一侧任何一处被划到哪,其余跟到哪。
影响

只影响 900px 以下的窄屏,数字和口径没有变化。

2026-08-21 20:34功能

期权链表头可以点着排序了

年化、占资、权利金、持仓、跌幅空间、行权概率、保证金七列,点表头排序。

  • 这个站本来就会替你按年化在后台筛档位、推桌面通知,也就是它内部有一套排序逻辑,却不让你在表里点一下——两份独立评估都点了这个权责倒置。不能排序的后果是逐行扫 26~80 行,扫的时候还混着一堆几百上千年化的深度实值档。
  • 默认仍然按行权价。镜像链的本体是一把梯子,左右两侧靠同一行对齐,排序会把梯子拆掉,所以它是显式模式:点表头三态循环,降序 → 升序 → 回到梯子。没有「退回原状」的话,点错一次就再也回不去了。
  • 取不到值的行一律沉底,不管升序降序。「不可计算」不是「最小」,把它排在前面等于让一堆空格挡住你要找的东西。
  • 左右两侧各自可排,按哪一侧的数排就点哪一侧的表头。
影响

只改显示顺序,不改任何数字,也不会隐藏任何一行。

2026-08-21 20:34界面

Vega 折成钱,列名改叫 $Vega

后端给的是「每一单位标的、隐波涨 1 个点变动多少」(铜是每吨),而它左右相邻的「权利金」是这些手数的总金额。同一行相邻两列单位不一样,而且都不标。

  • 评估者按 Black-76 核了半天才确认表上的 17.94 是每吨的数,10 手实际是 897 元/波动点——也就是「3 个点的隐波跳涨吃掉全部 2,800 权利金」。这个换算不该让读的人自己做。
  • 现在直接乘上合约乘数和手数,列名改成 $Vega,和策略卡上那组现金希腊字母对齐。
影响

同一个量换了单位,没有改变任何模型或口径。

2026-08-21 20:34界面

行权概率的说明补上美式口径这一层

这个数是 Black-76 欧式框架下的 N(−d2),也就是到期那一刻价内的概率。而国内商品期权(含沪铜)是美式。

  • 美式买方在到期前任何一天都可以行权,所以「存续期内最终被指派的概率」只会比表上这个数更高。
  • 原来的说明只说了「风险中性、不是真实世界预测」,没说这一层。这条是其中一份评估单独提的,核对过合约规则才写。
影响

只补说明,数字没有变化。

2026-08-21 20:29修复

记住月份,不再记住设置面板是不是摊开的

两份真站评估撞上的是同一个开局,一份的原话是「持久化了完全错的那一半」。

  • 设置面板的展开状态被记在本机,而「选了哪几个月份」没有。改月份必须展开设置,所以每个人都会展开一次、于是被记住、于是每次回来都是摊开的。
  • 摊开的设置面板会挤压下面的数据区——1366×768 实测只剩 115px,1280×720 只剩 67px,一行报价都看不见。做月度卖方的人每次打开还要重走一遍「展开设置 → 找到下个月 → 点应用 → 收起设置」。
  • 现在反过来:展开状态不再记(每次进来是收起的,1366 下数据区从 115px 回到 525px),并清掉老版本写进去的键;月份按品种分键记住——铜选 2610 不代表黄金也要 2610。
影响

只影响打开页面时的初始状态,不改任何数字。

2026-08-21 20:11功能

期权链新增保证金和接货金额两列

「占资」给的是权利金 ÷ 保证金的比例,而分母全站原来一个数字都没有。两列默认关闭,在「列」里打开。

  • 两位评估者都被迫拿被四舍五入的比例去反推保证金,一份得 232,639、一份得 359,000。其中一位是在「持仓与结果记录」里录了一笔之后,才第一次看到「占用保证金 55,395」——数据一直都在,只是要先做一件不相干的事。
  • 接货金额 = 行权价 × 合约乘数 × 手数。保证金只是入场券,被行权时按行权价接货那笔钱才是这笔生意的规模,通常是保证金的好几倍。它原来只出现在「策略优选」最下面的资金分配里,而挑档位的人在期权链上,隔着两个标签页。
  • 顺带把合约乘数也说出来了。「权利金」的说明写着「= 计价价格 × 合约乘数 × 手数」,却从不说乘数是几(铜是 5 吨/手)。
影响

只读新增。两个数据服务端一直都有,没有增加任何订阅。

2026-08-21 20:11功能

到期日期:不只说还剩几天,也说是几月几号

全站原来只说「还剩 N 天」。要移仓、要避开长假前后的流动性坑,得知道具体日期。

  • 现在显示成「剩余 32 天 · 2026/09/22 到期」。
  • 数据(expire_datetime)一直都在,只是没往前端送。
影响

只读新增,没有任何口径变化。

2026-08-21 20:11功能

买一量不够你要卖的手数时,那一格会标出来

权利金、占资、年化全是按「这些手数都在买一价成交」算的。买一只挂 1 手而你要卖 5 手,剩下 4 手拿不到表上这个价。

  • 两份评估都点了这条,一份的原话是「对卖方来说,挂一量是否足够比理论年化更先决定能不能做」。
  • 不拦、不改数,只把这一格标红并加一个感叹号——两条通道,不只靠颜色。悬停里说清楚为什么。
  • 买一量为 0(比如收盘后)时不标记:那不是「深度不足」,是根本没有报价,两者要做的判断不一样。
影响

只加标记,权利金、占资、年化的算法都没有变。

2026-08-21 20:11功能

保证金上浮系数可调

站上的保证金按交易所公式估算,而几乎没人按交易所标准交易——期货公司普遍加收几个点。

  • 加 3 个点意味着「占资」和「年化」两列对这个人系统性偏乐观 20% 以上,而他改不了这个系数。
  • 现在设置里有个输入框。实测上浮 20%:保证金 731,710 → 878,052(正好 ×1.2),占资 56.46% → 47.05%(= 56.46 ÷ 1.2),整条链一致。
影响

默认不上浮,行为和原来完全一致;只有你自己填了系数才会变。

2026-08-21 19:58修复

策略卡和期权链现在用同一个手数

期权链按设置里的手数(默认 5)算权利金,策略卡固定按 1 手,同一张合约两个标签页差 5 倍,而两边原来都没标手数。

  • 最危险的是「最大亏损」:按 1 手显示 −519,975,而按站上默认的 5 手,真实最坏是 −2,599,875。读者只会以为其中一个算错了,或者更糟——把这一页的最大亏损当成自己真实的最坏情况。
  • 先做的是把口径写在脸上(策略页明写按几手计、要乘多少),再做的是让两边真的用同一个手数。现在是后者。
  • 多腿结构按模板比例乘上去:价差 1:1,蝶式中间腿 2:1。实测 5 手 → 10 手,净权利金和最大亏损都正好翻倍。
影响

策略页的金额现在会随设置里的手数变化。口径统一,不再需要自己乘。

2026-08-21 19:58修复

盈亏热力图锚到「开仓那一刻 = 0」

每一格算的是「模型价 − 成交价」,而开仓瞬间这两者本来就有差(成交价是买一,模型价按隐波算)。

  • 于是「今天 / 现价」那一格——什么都还没发生——显示 +109,占最大收益的 29%。一张热力图告诉人开仓瞬间就赚了三成。
  • 锚点必须用基准隐波算,不能用滑杆当前的隐波。用当前的,那一格永远是 0,隐波拉到 2× 也是 0,正好把这张表唯一值钱的数抹掉。配了两条测试盯住这一点。
影响

整张表整体平移一个常数,格子之间的相对关系不变。

2026-08-21 19:58功能

隐波冲击的浮亏印到策略卡正面

卡面那六个大字全是到期口径,按定义就不随隐波变——所以把隐波拉到 2×,六个数一个不动。

  • 而滑杆旁边写着「把隐波拉到 2× 看看浮亏」。真正的答案藏在默认关闭的「盈亏热力」后面。
  • 现在只要情景不是「此时此刻」,卡面直接给一行「标的不动、隐波 ×2.0 浮亏 11,053」。口径和热力图那一格完全一致。
影响

只读新增。情景停在「此时此刻」时这一行不出现。

2026-08-21 19:58修复

两个「平值隐波」分开标注

定价卡是「远期处对曲线插值、按中间价反解」,分档表是「离 50delta 最近的那张合约自己的隐波、按当前计价价格反解」。线上实测差 0.52 个点,而两处都叫「平值」。

  • 评估者据此判定「站内跑着两套互不相干的 IV 计算」,并说这一条足以让他不敢用这个站下判断。
  • 它们确实是两个数、回答两个问题;错的不是算法是标签。定价卡加「曲线插值·中间价」,分档表表头改成「50Δ」。
  • 脚注里说明为什么会不一样,以及为什么一个跟着计价价格变、另一个不变。
影响

只改标签和说明,两个数本身都没有动。

2026-08-21 19:58界面

期权链的列滑杆移到表格上方

它原来在滚动容器里 762px 处,而表头在 280px:要调列得先滚过 28 行,调完再滚回来。

  • 两份评估报的「找不到 / 用不了」是同一件事。我第一次测也报「拖不动」,查下去发现是滑杆在 y=1005 而视口只有 900——鼠标事件落在了可视区外面,滑杆本身是好的。
  • 已移到表格上方,实测面板内 762px → 295px,不用滚就够得着。
  • 另外核实一条:Codex 报「四根情景滑杆看起来可用实际不动」,用真实鼠标拖拽逐根验过——排序偏好 0.5→0.9、持有时间 0→0.85、隐波倍数 1→2.6,全部有效。那份报告用的是事件派发,而 range 控件在 Chromium 下走原生拖拽路径,派发合成事件确实不动。是测法的假象,不是站的问题。
影响

只改位置,功能没变。

2026-08-21 19:42修复

服务端说了原因,前端不再替它沉默

打开 /oil 是一片白板,而服务端其实明确说了「INE.sc2609 未查询到未到期期权」。

  • 那句话被前端的「只在降级时显示」挡掉了——通道确实通着,connection_status 是 connected。用户看到的是「实时行情 + 已连接 + 空白」,没有任何线索。
  • 现在服务端说了话就显示,只是非降级时用低调样式,并把这句话一并带进期权链的空状态里。
  • 同一类问题还有一处:顶栏会出现「等待行情连接 · 已连接」。前半句是快照说还没收到第一份数据,后半句是 WebSocket 说 TCP 通了——两个都对,但并排放就是在打架。现在只在两者一致时都显示,不一致时以「数据到没到」为准,把连接层降成括注。
  • 没有合约数据的品种(黄金、原油、白银在某些时段返回 0 合约)现在顶栏说「连接正常,但本品种无合约数据」并熄灭绿灯,而不是整页空壳配一个绿灯。
影响

只改状态展示,不改任何行情数字。

2026-08-21 19:42修复

期权链空状态分三种原因说

原来无论哪种情况都说「等待未到期期权行情,或没有符合筛选条件的合约」。

  • 「数据没来」和「你自己筛没了」该做的动作正好相反,而第三种(这个品种压根没有合约)根本没被提到。
  • 现在分三句,各自说清楚下一步该干什么。
影响

只改文案。

2026-08-21 19:42修复

「最低占资收益」筛选原来对卖 PUT 完全无效

期权链按行权价成行,一行里 CALL 和 PUT 各占一边。原来是逐合约过滤,只要有一侧留下这一行就还在。

  • 而深度实值 CALL 的占资收益动辄 40% 以上,永远过得了门槛——输 5%,13 档一档不少地全留着,只是 PUT 那半边被悄悄清空。一个筛选器看上去在工作(接受了数字、没有报错),实际一次都没筛掉过你真正关心的东西。
  • 改成按行过滤、且只看 PUT 侧,标签上写明「按 PUT 侧」。实测 5% → 4 档,和手算一致。
  • 跌幅空间那个筛选不用这么改:它是行权价相对现价的距离,同一行两侧本来就是一个值。
  • 顺带修掉计数:筛选生效时仍然写「显示全部 N 档」,而那个 N 是筛选后的数,配上「全部」二字,读者会以为这个月只有这么多行权价。改成「筛选后 N 档,共 M 档」。
影响

这个筛选器现在会真的筛掉不合格的行,结果比原来少。

2026-08-21 19:42修复

悬浮解释不再被裁掉,也不再一滚就消失

站上最长的一条解释有 700 多像素高,原来定位只算左右不算上下,1366 高的屏上被切掉 212px。

  • 被切掉的恰好是实波的局限、以及「本站按 PUT − CALL,别的平台按 CALL − PUT,正负相反」那句符号约定——写了等于没写。
  • 现在装不下就翻到上方、按可用空间算出高度上限并允许内部滚动、页面滚动时跟着走。鼠标可以移进浮层(原来完全穿透,内容再长也够不着),移进去时取消关闭。
  • 实测 1600 和 1366 两个尺寸溢出均为 0,浮层内可滚 250px,被裁的两段现在读得到。
  • 另外修掉一处指错地方的引用:「占资」的解释里指向「概览」,而全站没有叫这个名字的东西。接货金额实际在「策略优选」最下面的资金分配里。
影响

只改浮层的定位和交互,内容没变。

2026-08-21 19:42修复

持仓记录:下拉按行权价数值排,删除加二次确认

合约下拉框原来按字符串排序,92000 排在 126000 后面(因为「9」比「1」大)。

  • 改成先按月份、再按行权价数值排。选合约的人是按行权价找的。
  • 删除一笔记录原来没有二次确认。这本记录的全部价值是「攒够 20 笔才开始给本站的预测打分」——站里自己写的——只存在本机、只此一份、要攒好几个月。一次误点抹掉几个月的样本。现在加确认,并在提示里说明为什么。
影响

不影响已经录入的任何数据。

2026-08-21 19:42修复

三处自相矛盾的小地方

侧栏品牌、主题选项、以及用完不清理的地址栏参数。

  • 侧栏品牌在所有品种页写死 Cu。在 /au 上顶栏已经正确显示「Au 期权策略 / 黄金期权」,侧栏一打开还是「Cu」——同一个页面自己说自己是两个品种。
  • 首页主题三项(黑色 / 白色 / 跟随系统)和工作台四项(纯黑 / 玻璃黑 / 白色 / 跟随系统)对不上,而它们共用同一份记录。在首页选「黑色」,进工作台会发现自己在「玻璃黑」上。统一成同一套。
  • ?whatsnew=1 用完不清理:关掉弹窗后参数留在地址栏,刷新又弹;地址被收藏之后每次打开都先弹一次。现在用完抹掉,且不产生新的历史记录。
影响

只改显示和地址栏,没有数字变化。

2026-08-21 19:35修复

读数条的涨跌箭头按你停的那一根算

同一根 K 线在「分时」显示 ▲、在「5 日」显示 ▼。

  • 读数条那一行说的是鼠标停的那一根,方向却取的是整段序列的首尾方向。两个周期取的区间不同、整段方向就不同,于是同一根 K 在两个视图里箭头相反。评估者当场抓到 14:59 那根:开 107,800、收 107,750,收 < 开,▼ 才对。
  • 颜色以前就是这么错的(一直按整段方向上色),只是没人读得出来;上一轮加了 ▲/▼ 之后,这个错变得能一眼看见。加冗余信息通道的副作用:它会把原本藏着的错误一起放大。
  • 改成按这一根的收减开算,开盘价缺失时退回和上一根收盘比。
影响

箭头和颜色现在都描述你停的那一根,不再描述整段。

2026-08-21 19:35修复

5 日图的横轴补上日期

原来只有日线的刻度带日期,分时和 5 日都只有 HH:MM——5 天的图上七个刻度读出来是 09:15 → 00:38 → 23:25 → 22:12,像时间在倒退。

  • 数据顺序是对的,倒退是因为跨了天而标签没说是哪天。分时只有一天不需要日期,5 日需要。
  • 标签带日期后长了一倍,刻度数从 8 降到 5,否则会叠字。
  • 实测:08/19 17:35 → 08/20 06:05 → 08/20 18:35 → 08/21 07:04 → 08/21 19:34,单调递增。
影响

只改刻度文字。

2026-08-21 18:40界面

最小字号提到 11px,成段的说明提到 11.5px

上一轮把地板从 8.5px 提到 10px,方向对但没提够。零记忆评估者实测后说「正文一半字符小于 12px、三成小于 11px,我在 1366 宽下读不清」。

  • 地板 10px → 11px。更要紧的是另一类:成段的说明文字反而是全页最小的一批,风险提示、策略用途、问卷说明、情景说明全停在 10.5px。
  • 而按那位评估者的说法,这些段落正是这个站相对其他终端唯一的优势——「终端给我又快又对的数、零解释;这个站给我极好的解释」。把全站最值钱的内容排成最小的字,等于把优势藏起来。成段的话提到 11.5px;标签只是一个词、认形状就够,留在 11px;数字继续 12px 不动。
  • 涨跌箭头原来随正文缩放,正文 10.5px 时它落到 8.19px——比全站任何文字都小,而它承担的是「涨还是跌」这个最基本的方向信息。给了 9.5px 的绝对下限。
  • 实测 <11px 占比:行情 32.6% → 13.6%,T 型 30.7% → 3%,策略 31% → 8.6%。期权链行高仍是 28px 没被撑大。
影响

只改纯黑档的字号,白色和玻璃黑不变。

2026-08-21 18:40修复

情景滑杆那句做不到的承诺改掉了

设置面板写着「拖动看标的涨跌后的报价、保证金和策略结论」,而实际只有跌幅空间和价内/价外着色会按情景价重算——报价、权利金、保证金、行权概率全是实盘值。

  • 期权链的脚注其实说对了,是设置面板这句在许一个做不到的承诺。
  • 后果不只是失望:拉到 −8% 之后,屏幕上会并排出现「跌幅空间 2.24%」和「行权概率 3.52%」——只虚值 2.24%、还有 32 天,行权概率不可能是 3.5%。两个数差一个数量级地互相打架,而读者没有任何线索知道它们不是同一个口径。
  • 现在这句话按实际能力写。
影响

只改文案,滑杆的行为没有变化。

2026-08-21 18:35修复

σ 统一到同一个隐波来源

同一个组件里原来有两个隐波在跑:给腿定价用后端按中间价解出来的平值隐波,而目标价那几个 σ 档位取最近四档合约各自的隐波取平均,那些是按买一价解的。

  • 后端专门写过为什么平值隐波要按中间价解:买一系统性偏低,且在两翼偏得更多。
  • 于是策略页的「1σ」比行情图那一页的「1σ」小,而两处用的是同一句话描述(平值隐波 × √剩余时间)。σ 是用来定情景区间和手数的,低估它等于低估尾部。
  • 改成统一读后端的平值隐波,取不到再退回按合约解的那条路。实测:策略页「较现价 +6.7%」,行情图「预期波动 ±6,979」÷ 现价 = 6.68%,两页对上了;改之前是 +2.0% vs 6.68%,差 3.3 倍。
影响

策略页的 σ 区间变宽了,和行情图一致。这是修正,原来的偏小。

2026-08-21 11:30修复

修复:每次打开先白闪一下再变黑

默认主题确实是纯黑,但主题是在页面脚本跑起来之后才生效的,所以首帧是浅色的,然后才切成黑。纯黑档下这一闪是整屏纯白,很刺眼。

  • 现在在页面最开头加了一小段脚本,在第一次绘制之前就把主题定下来:读本机记住的选择,没有就用默认的纯黑。
  • 选过白色或玻璃黑的人同样受益——原来那一版对他们是反过来闪一下黑。四种情况(没选过 / 白色 / 玻璃黑 / 纯黑)都实测过,全程一个主题,不再切换。
  • 顺带改掉一个小毛病:以前页面一打开就会把默认主题写进本机记录,等于替你做了一个你从没做过的选择。现在只有你真的去改主题才会记下来。
影响

只影响打开页面头几百毫秒的观感,任何数字、口径和功能都没变。

2026-08-21 11:00修复

修复:两个接口不带参数时会报错

上线后抽查接口发现的。直接访问 /api/klines 或当日隐波接口而不带标的参数,会返回 Internal Server Error。

  • 代码里用「空」表示「不过滤,给全部」,但这两个接口拿到「空」之后直接去遍历它,于是报错。
  • 网页端一直都带着标的参数,所以没有人在使用中撞到过——这也是它从日线接口上线那天起一直活着的原因。
  • 改成把「不过滤」落实成一份具体的标的清单。行情源还没连上时给空清单,而不是又回到那个错误。
影响

只影响直接调用接口的场景,网页端的任何数字和功能都没有变化。

2026-08-21 10:40界面

工作台不再整页滚动:外壳钉住,只有数据在动

顶栏、合约条、标签条现在永远在原位,滚动的只有下面的数据区。工具页也去掉了页脚。

  • 原来是整页滚动,顶栏虽然吸顶,但合约条和标签条会跟着滚走——滚两下就不知道自己在看哪个合约、哪一页了。
  • 期权链的悬浮表头跟着改了:现在贴在数据区的上沿,也就是标签条正下方,而不是屏幕最上方。
  • 工具页去掉页脚。那五行是免责声明不是数据,垂直空间留给期权链更值;同样的话在「关于」和这一页还在。
  • 只在宽屏(≥901px)生效。手机上顶栏内容会换行成两三行,固定高度的外壳会把它挤没,所以窄屏仍然整页滚动、保留页脚。
影响

只改布局行为,数字、口径和功能没变。三个主题一起生效。

2026-08-21 10:40功能

行情图新增持仓量叠加线,以及隐波涨速

成交量说「今天换手多少」,持仓量说「还有多少仓没平」。同样是上涨,持仓量在减是空头回补,在增才是新多头进场——这两种涨对卖方完全不是一回事。

  • 持仓量是图上第三条线,默认关闭,在图例那一排点「持仓量」打开。它用自己的纵轴(和价格量纲差几个数量级,共用刻度会把一条压成直线)。
  • 线型是虚线不是新颜色:这一档只有红绿紫三色,红绿归涨跌、紫归隐波。虚线是独立于颜色的通道,红绿色盲也分得开。
  • 数据缺口不连线。把有数据的两端直接连起来,等于凭空画出一段没发生过的变化。
  • 新增「隐波涨速」,分时和 5 日档显示:最近半小时里平值隐波每小时变了多少个百分点。卖方最常见的亏法是隐波炸,而「炸」是个速度概念——慢慢爬到 24% 和二十分钟冲到 24%,对已经卖出去的仓位完全不同。
  • 两端时间跨度不足五分钟就不给涨速。两个挨着的采样点之间的差全是噪声,除以一个很小的时间再放大到「每小时」,能得出任意大的假涨速。
  • 顺带修好一处:价格和隐波的当前值标签都钉在右轴上,用的是两套无关的纵轴,撞到同一高度时后画的把先画的完全盖住,看起来就是「价格的当前值不见了」。现在隐波那个会让开。
影响

只读新增。多取的是 K 线里本来就有的一列持仓量,没有增加任何订阅。

2026-08-21 10:40功能

新增偏度分位:你要卖的那一侧,比平时贵吗

隐波分位说的是整条曲线贵不贵,偏度分位说的是这条曲线歪得比平时厉害吗。卖 PUT 卖的正是下方翼,所以「整体不贵但你要卖的那侧贵」是个真实且常见的组合,只看隐波分位会错过。

  • 位置在「波动率定价」每个月份的格子里,紧挨着隐波分位。
  • 和隐波分位一样,样本不足 30 个时整格不出现,而不是显示「--」——一个从几个点里算出来的分位,看上去和真的一模一样。
  • 它依赖波动率历史库,而历史库要在服务器上挂持久卷才开得起来,目前是关着的。开启之后才会开始积累。
影响

只读新增。历史库未开启时这一格不显示,不影响其他任何数字。

2026-08-21 10:40界面

期权链每个专业列头都有解释了

原来 22 个列头里只有权利金、跌幅空间、行权概率带 ⓘ。补上最新、卖一、买一、卖量、买量、持仓、年化、占资。

  • 只写会改变判断的话,不写字典式的定义。比如「最新价是过去的价格,期权链多数档位一天成交不了几笔,真正能成交的是买一和卖一」。
  • 「买量」这一条对卖方最要紧:要卖 5 手而买一只挂 2 手,另外 3 手拿不到表上这个价,而年化算的是全部手数都按买一成交。
  • 「年化」写清楚它不是能持续拿到的收益率——它假设到期后立刻能找到条件一样的下一笔。快到期的深虚值档位那几百上千的年化是被除数很小造出来的。
  • 「占资」写清楚分母是保证金,不是被行权时要付的名义金额,后者通常是前者的几倍。
影响

只加解释,没有任何数字或口径变化。

2026-08-20 20:10修复

涨跌不再只用颜色:加了 ▲ / ▼

红绿是这个站唯一的涨跌编码,红绿色盲用户读不出方向。加一个箭头就能解决,成本极低。

  • K线读数里的「收」、图右侧的现价胶囊,这两处原来颜色是唯一的信息,现在带箭头。
  • 全市场对比的隐波变化本来就有 +/− 号,箭头是再加一层冗余。
  • 箭头对读屏软件隐藏,否则会把方向重复朗读一遍。
  • 三个主题都生效——这是可读性修复,不是配色调整。
影响

只加符号,数值、颜色含义和口径都没变。

2026-08-20 20:10界面

纯黑档:最小字号提到 10px,底色和圆角往回调一档

上一轮把密度压过头了。全页扫下来有 13 处 8.5px、60 多处 9px 的字,而这些小字并不是密度的来源——期权链的行高是单独定死的,副行字号根本不撑高它。

  • 最小字号地板 10px:行权价轴刻度、IV 副行、σ 徽章、品牌副标、分位单位全部提上来。副行同时把行高压到 1,抵掉字号变大的高度,期权链行高一格没变。
  • 页底从纯黑改成 #0a0a0a。纯黑在 OLED 屏上有拖影,而且和卡片色的对比过硬。
  • 卡片底色提到 #141414,层次靠底色深浅做,而不是全压在一条边框上。
  • 边框从实色深灰换成半透明白,在任意深度的底色上都能自然叠加。
  • 圆角从 2–3px 放回 4–6px。盯盘界面不需要大圆角,但 2px 已经硬到显得廉价了。
影响

只动纯黑档的取值,白色和玻璃黑没变。数字、颜色含义和口径都没变。

2026-08-20 18:05功能

行情图表:分时和 5 日,以及和价格叠在一起的当日隐波

原来这张图只有日线一档、只有一条线。现在多了分时和 5 日两档,图上是两条线——价格和当日的平值隐波——各自在右轴上有自己的当前值。

  • 新增「分时」和「5 日」两档,数据是 60 秒 K 线。日线那一档没变。
  • 第二条线是当日平值隐波,紫色,读右轴。价格和隐波叠在同一张图上,是为了直接看见「跌的时候隐波有没有跟着涨」——卖方最常见的亏法不是标的跌,是隐波炸,而这件事以前在这个页面上看不到。
  • 两条线各自有一个跟着走的当前值标签:红色的是最新价,紫色的是最新隐波。另有一条现价横线。
  • 十字线跟着鼠标走,停在哪一根就读那一根。下方是红绿成交量柱。价格网格加密成两级。
  • 当日隐波是服务端在内存里按 60 秒采样攒出来的,服务重启后从零开始,所以开盘早段这条线会比较短,收盘后停在最后一个采样点。它和「跨日的隐波历史曲线」是两回事,后者要另外在服务器上打开历史库。
影响

只读新增。多订阅的是每个标的一条 60 秒 K 线,没有增加期权链的订阅量,也不涉及任何下单相关的接口。

2026-08-20 18:05界面

纯黑配色:新增第三档主题,并设为默认

白色和玻璃黑之外多一档纯黑。这一档不是把玻璃黑再调暗,是另一套东西:黑底、发丝边、红绿紫三色、没有任何渐变和毛玻璃。原来的两档一个像素没动。

  • 配色只留三个:红、绿、紫。红涨绿跌,CALL 侧红、PUT 侧绿——期权两侧本来就是涨跌两侧。紫只给隐波和一切「第三种量」:它既不是涨也不是跌,需要一个不属于红绿体系的颜色。原来那对「看涨蓝 / 看跌橙」在这一档去掉了,屏幕上同时挂两套色系,读的人要在心里做两次翻译。
  • 装饰是按属性类别关掉的,不是按选择器一条条盖:这一档下所有元素和伪元素一律没有渐变底、阴影、毛玻璃、滤镜和文字阴影。之前逐个选择器改了三轮,补一个漏一个,而每漏一处在纯黑底上就是一块发光的脏东西。
  • 同时把整套 CSS 变量词表接管完。这份样式表的装饰建在 --glass-* / --liquid-* 这些变量上,而它们被前后几代样式反复重定义过;纯黑档原来只声明了 28 个,剩下 33 个还跟着玻璃档走,于是方向选择和情景滑杆那两条控件带算出来是白色四成透明,在黑底上就是两块灰板。现在词表补全,以后再加用这些变量的装饰,能用的颜料也只有红绿紫和黑白。
  • 密度整体收一档:字号 16px → 12.5px,顶栏 74px → 52px,圆角 12–32px → 2–3px,动画关掉。
  • 默认主题改成纯黑。想回原来的样子,右上角「主题」里选「白色」或「玻璃黑」,选择记在本机。
影响

纯视觉,没有任何数字、口径或功能变化。白色和玻璃黑两档逐像素核对过,三个标签页比对差异 0.000%–0.006%,那点差异是页面上的倒计时秒数在跳。

2026-08-20 18:05界面

纯黑档下期权链一屏放得下全部行权价

行高从 40px 压到 28px。13 档行权价原来看到 110,000 就被屏幕截断,现在连页脚的口径说明都露出来了。

  • 行高原来写死在 32 处 !important 里(基础规则、工作区模式、悬浮表头各写一遍)。改成一个变量统一引用,回退值保持各自原来的 40px / 38px——所以白色和玻璃黑两档的行高一点没变。
  • 顺带把策略优选页的方向选择、情景滑杆和封顶对照表也收紧了。这三条控件带各占近 60px,是四张策略卡片挤不进一屏的主要原因。
  • 页脚那句「报价颜色:买一/卖一使用蓝橙体系」改成跟着主题走了。纯黑档买一卖一是红绿,写死蓝橙就是在这一档骗人。
影响

只影响纯黑档的排布密度,读数、颜色含义和列顺序都没变。

2026-08-19 14:05界面

撤回:工作台面板的边框改回来了

昨天把工作台里的顶层面板去了框,理由是「一页六个框读起来是六件互相竞争的东西」。理由本身站得住,做出来的东西不好看——撤回。

  • 所有顶层面板恢复边框、背景、阴影和圆角,也就是去框之前的样子。
  • 去掉了当时用来替代边框的那条淡分隔线:每块自己有框之后,再加一条线就是两重分隔。
  • 「全市场对比」和「行权价一览」这两块是在去框那一版之后做的,所以生下来就没有边框。现在一并补上——否则它们会是页面上仅有的两块没有边界的内容,比整体去框还乱。
  • 保留的是密度调整:内边距、字号、卡片网格的收紧和面板间距。那部分和边框无关,也没有被抱怨。同样保留的是两次合并——波动率水位并进波动率定价,微笑和分档矩阵合成波动率结构。它们减少的是模块数量,不是边界。
  • 记在这里是为了下次别再犯:真要再动面板层级,先拿出完整的替代方案(比如一级面板浅玻璃、二级卡片实边框的分层),并且先截图给人看,别直接推上线。
影响

纯视觉回退,没有任何数字、口径或功能变化。

2026-08-19 04:00功能

跨期组合:卖近月、买远月

近月的时间价值掉得比远月快——theta 与剩余时间的平方根成反比,最后一个月的衰减速度是三个月前的一倍多。这个速度差就是这个结构的收入来源。

  • 加载两个以上月份时,策略优选页出现「跨期组合」,给离现价最近的三个行权价各建一个:同一个行权价,卖出近月、买入远月。
  • 它顺便解决了一件事:远月那张是实实在在的保护,裸卖 PUT 那条「跌到哪就亏到哪」的尾巴在这里被封住了。代价是净支出——你得先掏钱,而不是先收钱。
  • 这里的盈亏图和站上其他的不一样。其他结构每条腿同一天到期,所以到期盈亏是一条折线;跨期不是——近月到期那一刻远月还剩着时间价值,价格得用模型算,所以这里是一条平滑的驼峰。峰顶落在行权价上:近月在那儿归零得最干净,而远月的时间价值一分没少。
  • 最要紧的风险和你平时怕的正好相反。卖方平时怕隐波涨;做跨期时你在远月上是多头 vega,怕的是隐波塌。标的老老实实待在行权价附近、而远月隐波掉两个点,这笔仓照样亏——那是这条曲线完全没画出来的一个维度,所以它单独写在面板底下。
  • 「最大亏损」不是画出来那段 ±2σ 曲线的最低点,而是把价格推到极端之后的真下限。两个标准差之内远月还留着不少时间价值,最低点远比真下限浅,拿它当最大亏损是在低估风险。两个数都给:真下限,和「±2σ 内最差」。
  • 商品期权的每个月份挂在不同的期货合约上——沪铜 2610 和 2609 是两个价格。所以远月那条腿按基差定价,不和近月共用一个标的。卡片上直接写出基差。股指期权没有这个问题:所有月份共用一个现货指数。
  • 两条腿都按要跨的那一边计价:买远月按卖一,卖近月按买一,而且不跟随页面上的「计价价格」开关。跨期是两个价差叠在一起,用中间价算出来的净支出会比真下单便宜一整个价差——在一个净支出只有几百块的结构上,那是几十个百分点的误差。
  • 净现金流为负时标题写「净收入」而不是「净支出 −1,485」——负的支出就是收入。模型下怎么走都不亏时不印一个漂亮的正数,而是直说「算不出」并提示输入有问题:那不是套利。
影响

纯前端计算,用的是链上已有的报价,不新增任何请求。跨期不复用单月的策略引擎——那 23 个结构都依赖「每条腿同一个到期日」,为跨期掰弯它等于把已经验过的结构一起推上手术台。

2026-08-19 03:30功能

自选品种,以及月份标签上的剩余天数和主力标记

品类栏有八个并列的按钮,顺序写死在产品表里。但真实的用法从来不是均匀的——一个人可能九成时间在铜上,另外五个从来不点。

  • 品类块右上角新增星标,收藏的排到前面。只排序,不隐藏:一个把七个品种藏起来的自选功能,会在某天想看原油时变成一道找不到入口的谜题。
  • 收藏组和其余之间画一道竖线,而不是留一段空白——空白会被读成「换行了」,竖线才说得清「上面这几个是你自己挑出来的」。
  • 两组之内都保持产品表的顺序,不按收藏的先后排。按收藏时间排会让按钮的位置随着「上次点了哪个收藏」而变,肌肉记忆就废了。
  • 星标是独立的小按钮,不是整块的一部分:点品种要切过去,点星标只收藏。合成一个的话,想收藏就得先切过去,而收藏常常发生在「我知道以后要看它」而不是「我现在要看它」的时候。
  • 合约月份的每个标签上新增剩余天数。它比档位数要紧得多——剩三天的月份权利金已经薄得没什么可收,而这件事在「2609」这四个数字里完全看不出来。七天以内标红。
  • 持仓量最大的那个月份标「主力」。非主力月的报价常常是死的:挂上去没人接,年化再漂亮也成交不了,而这件事在单个月份的期权链里看不出来——它是月份之间的比较。
  • 只加载了一个月份时不标主力。那时候「它最活跃」和「它是唯一一个」在屏幕上长得一样,而后者没有任何信息量。
影响

自选只存在本机浏览器;剩余天数和持仓量都是行情里已有的字段,不新增任何请求。

2026-08-19 01:10功能

持仓提醒:哪一笔现在需要动手

卖方最贵的一次疏忽,是把一笔实值的仓忘到到期——行权是自动发生的,不需要你点确认。

  • 持仓记录本上方新增提醒列表,只列现在需要注意的那几笔,最严重的排最前。
  • 红色只有一种情况:标的已经越过行权价,而且一周之内到期。这时候要么现在买回来,要么准备好接货的钱(卖 CALL 则是准备好交割的货)——文案按你卖的是哪一边给。
  • 橙色两种:行权概率过半(这笔仓已经走到了不利的一侧,旁边给出开仓时本站预测的数字做对照),以及虚值但快到期(要决定让它作废还是移仓;临到最后一天再找档位,能挑的不多)。
  • 蓝色一种:权利金已经赚到八成以上、而且还剩至少一周。剩下那点钱要用同样的尾部风险再换一周——买回来了结还是继续持有,是个可以算清楚的选择题。这一条在只剩两三天时不出现,那时候「早点了结」是句废话。
  • 每笔仓最多一条提醒,只出最严重的那条。一笔仓同时冒出三行字,最要紧的那行就淹了,而这份清单存在的意义正是「先看哪一笔」。
  • 剩余天数一律取自实时行情,不用开仓时冻结的那个值——冻结的是开仓当天的快照,放两周之后照着它提醒会永远晚一步。行情里拿不到剩余天数的仓不出提醒,而不是拿旧数据猜。
  • 提醒只陈述事实和它的含义,不写「建议平仓」。该不该平取决于你愿不愿意接这个货、账上还有多少保证金——这两件事本站都不知道。
影响

纯前端,读的是已经在页面上的行情和本机的持仓记录,不新增任何请求,也不上传任何东西。

2026-08-19 01:00功能

浮动盈亏拆成「标的 / 隐波 / 时间 / 其余」

「浮亏 3,200」不告诉你该做什么。标的跌了 3,200 和隐波炸了 3,200 是两种完全不同的处境:前者要想清楚要不要接货,后者往往几天就自己回来了。

  • 每笔未平仓位的浮动盈亏下面多了一行,把它拆成四份:标的变动、隐波变动、时间流逝,以及其余。
  • 用开仓那一刻的希腊字母做一阶展开——归因要回答的是「从我开仓到现在,是什么把钱拿走了」,参照点就该是开仓那一刻。所以开仓时冻结的隐波和标的价在这里第二次派上用场。
  • 四项之和严格等于实际浮动盈亏。残差是被算出来的,不是被凑出来的:反过来(先算三项、再把总额说成三项之和)会得到一个和账户对不上的数字,那比没有归因更坏。
  • 「其余」必须显示,不能藏。它装的是高阶项,以及报价与模型价之差——模型给的是理论价,实际了结要按卖一价买回来,中间隔着一个价差。残差特别大时说明这三个数解释不了这笔浮亏,那本身就是要知道的事。
  • 时间那一项用的是剩余天数之差,不是日历上的持有天数:记录日期填错、换月、停牌,三者都会让两者对不上,而模型消耗掉的是前者。
  • 任何一个输入缺失就整条不显示。缺隐波时硬填一个数,得出的「隐波贡献 0」会被读成「隐波没动」,而真相是我们不知道它动没动。
  • 这一行也是本站那句「卖方最常见的死法不是标的跌,是隐波炸」第一次能在你自己的仓位上被验证或者被推翻。
影响

纯前端计算,用的是已有的行情和开仓时冻结的预测。

2026-08-19 00:20功能

行权价一览:一条轴上看完「哪档有人」和「哪档收益高」

期权链是一张三十行的表,判断哪几档流动性够得从上往下读三十个数再自己排序。而挑档位时这件事常常比年化更要紧:年化 18% 但只有二十手持仓的档位,报价是死的,挂上去成交不了。

  • T型报价页顶部新增一条行权价轴。默认柱高是这一档的未平仓合约数,看跌在下、看涨在上,共用同一把尺子——分开归一的话两侧看起来一样厚,就读不出这个月的仓位压在哪一边。
  • 持仓量最大的那一档描一圈;现价落在哪两档之间画一条竖线。点任意一根柱子,期权链滚到那一行并闪一下——一次平滑滚动结束时,读者要自己在三十行里重新找刚点的是哪一行。
  • 柱高可以切成「卖 PUT 年化」。这是原计划里的「T型曲线模式」,但做成了同一条轴的第二种读法而不是另开一块面板:两者共用行权价这根横轴,也共用「点一根跳过去」这个动作;分成两块之后,读者要在两处之间来回对照才能问出真正的那个问题——高年化的那几档有没有人接。
  • 年化只画虚值那一半。实值 PUT 的占资年化算出来常常是全链最高的(权利金里大半是内在价值),按它归一,柱状图会变成一道「越实值越高」的斜坡,卖方真正在挑的虚值全被压成贴地的线。更糟的是那道斜坡在说反话:它把最高的那一档排在最前,而那一档跌幅空间是负的——标的不用跌就已经被行权了。
  • 负年化画成零高,数字本身照实报在悬浮提示里;某个月份一档年化也解不出来时,那个按钮根本不出现,而不是出现了点了没反应。
  • 整条轴的持仓量字段全缺时不画。一条全零的轴和一条「没拿到数据」的轴长得一模一样,而前者说的是「这个月没人开仓」——那是一句很重的话,不能靠缺数据说出来。某一档真的是 0 则照画零高的柱子。
  • 窄屏下只留主力档和现价两侧的标签,柱子全留:柱子是形状,少几个数字不影响读形状,而一堆糊在一起的数字谁也读不了。
影响

用的是期权链上已有的持仓量和年化,不新增任何请求。

2026-08-18 22:55功能

盈亏热力图:价格 × 时间的一整张网格

盈亏图画的是一个时刻的一条线,答不了「现在跌到这儿我会亏多少,再放两周还是这么多吗」——那是两个自变量的函数,一条线只能给它切一刀。

  • 策略优选的情景控制栏新增「盈亏热力」开关。打开后每张卡片下面展开一张网格:横轴是标的价(现价 ±2σ,七列),纵轴是时间(今天到到期,五行)。
  • 同一列从上往下读,看的是时间价值怎么流走——卖方赚的就是这个。同一行从左往右读,就是那一刻的盈亏曲线;最底下那一行严格等于图上的到期实线,不是一个「非常接近到期」的近似,测试逐格对着盈亏函数验过。
  • 这张表最要说明的一件事:卖方在同一个价位上,今天的盯市盈亏总是低于到期盈亏。到期图上那个漂亮的最大盈利,是要等时间走完才拿得到的;而到期折线在行权价上那个尖角,会让人以为「只要到期前涨回来就没事」,持仓时那个角是圆的。
  • 配色按整张表的极值归一,不按行。按行归一会让「今天的最大亏损」和「到期的最大亏损」染成同样的深色,而它们可能差十倍——那恰恰是这张表要显示的差别。
  • 格子里的金额缩成 −23k 这样的写法。四十来像素宽的格子放不下 −23,178,会被裁成 −23,17:一个看起来完全正常、只是少了一位的数字,比明显的截断更坏。
  • 定不了价的格子写破折号并留白,不染中性色——一个中性色的格子会被读成「这里不赚不赔」。
  • 默认收起。七张卡片各加一张表,默认铺开这一页就成了一屏格子;而「最多亏多少」在卡片上已经答完了。
  • 局限写在表下面:每个价位都用同一个平值隐波,没考虑偏度,所以下跌那一侧的实际浮亏比表上更深。看形状可靠,当报价不行。隐波在整张表里还是常数,真实世界里标的暴跌时隐波会同时炸——旁边那根隐波滑杆就是用来手工补这一刀的。
影响

纯前端计算,用的是已经在链上的报价,不新增任何请求。

2026-08-18 22:45功能

盈亏数字可以换三种口径读

「最多亏 4,180」单独看没有信息量。它是好是坏,取决于分母。

  • 策略优选新增口径切换:金额 / 占合约价值 / 占权利金。切换后所有卡片的最大收益、最大亏损、目标价盈亏和热力图一起换算。
  • 占合约价值:除以一手合约的名义价值(标的价 × 合约乘数)。铜一手五十多万、上证50 一手三十万,同样的四千块是完全不同的两件事——换成百分比,不同品种才能横着比。
  • 占权利金:相对开仓那笔权利金的倍数。卖方真正在做的交易就是「收 800 去博最多亏 4,180」,5.2× 这个数就是那笔赌注的赔率,而它在金额口径下要读者自己心算。
  • 无上限在任何口径下都还是无上限。换成百分比不会让一个开口的亏损变得有限,这条在代码里有专门的测试盯着。
  • 某个口径在某个结构上没有分母时(比如净现金流为零),那张卡片自己退回金额,而不是显示一整屏破折号——破折号看起来像数据没加载出来。
  • 希腊字母那一组不跟着切换:$Delta 说的是「标的涨 1% 组合变多少钱」,再换算成占合约价值的百分比,得到的是一个百分比的百分比。盈亏可以换分母,敏感度不行。
  • 刻意没有做「占保证金」:保证金随交易所通知调整、经纪商各不相同,本站有一部分是估算值——拿一个估算数当分母,会让那一行看起来和另外两行一样确定。
影响

纯展示口径,底层数字一个没变。

2026-08-18 22:30功能

全市场对比:七个品种谁的期权现在比自己平时贵

「今天该卖哪个品种」以前只能一个个切过去看。行情图表页顶部新增一条七格窄条,一眼看完。

  • 每格显示的是分位,不是隐波。直接比隐波大小是这张表最容易犯的错:铜的 20% 和黄金的 15% 是两个品种各自的常态水平,铜天生就比黄金波动大——按隐波排序会让人年复一年地只卖铜。分位是无量纲的,所以「铜在自己的 78 分位、黄金在自己的 91 分位」这句话才有意义。
  • 隐波数值仍然显示,但排在分位后面、字号更小:它是给已经知道怎么读的人看的参考值,不是结论。
  • 每格还给出隐波相对一天前的变化(百分点)。卖方最常见的死法不是标的跌,是隐波炸——「哪个品种的隐波正在涨」和「哪个品种的隐波在高位」是两个问题,都要问。
  • 点任意一格切到那个品种的工作区,所以这条窄条同时是导航。
  • 样本不够 30 个的品种不显示分位,只写「样本不足」。一个由十个采样算出来的分位和一个由一年算出来的长得一模一样,并排放着时会被当成同等可信的证据,直接影响卖哪个的决定。
  • 某一行的读数比其他行旧超过 36 小时时,那一行退出比较并标「读数过旧」。这是这张表最容易出的错,而且看起来完全正常:两行都有数字、都有分位,只有时间戳不一样。
  • 还没有任何记录的品种保留成空行,不删掉。删掉会被读成「这个品种不存在」,而真相是「还没记录」——后者多等几天就有了。
  • 结论句刻意不写成「建议卖 X」:分位高只说明它比自己平时贵,不代表这笔卖出划算——还要看流动性、占用保证金,以及你愿不愿意接这个货。
影响

零新增行情订阅。直觉做法是同时订七条期权链(约 350 个合约)横着比年化,那会把开盘时段的行情负担翻三倍,换来的还是一组不可比的数字;这张表全部来自已有的波动率历史库,是纯 SQLite 只读查询,服务端另加 60 秒缓存。历史库未启用时整块不显示。

2026-08-18 22:10修复

修复:策略页有一块面板比邻居宽出二十几像素

「又没对齐」不是某一块写错了,是有一份按类名手抄的名单——每加一块新面板,它就不在名单里。

  • 预览样式里有一条规则按类名列出五块面板,给它们写死左右边距。这五个类如今全都同时带着 .panel,共享布局早就把全站面板对齐了;那份名单于是只剩一个作用:把这五块从共享规则里抠出来单独摆。
  • 结果是此后新增的每一块面板(策略优选、行情图、微笑曲线、期限结构……)都不在名单里,和那五块差着二十几像素,而且差多少还随视口宽度变。
  • 删掉这份名单,左右边距一律由共享布局给。全站面板的左右边界现在只有一个来源。
  • 策略面板自己写的 width: calc(100vw - 48px) 一并删掉:100vw 含滚动条,在有纵向滚动条时它会比页面内容区还宽。
  • 截图检查里本来就有「所有面板左右边界最多差 1 像素」这一条,这次是它把问题抓出来的——1920 宽下差了 22 像素。
影响

纯视觉修复,没有任何数字或口径变化。

2026-08-18 13:40功能

期权链新增四个可选列,并支持自选显示哪些列

不同的人问不同的问题:卖 PUT 的盯占资和年化,看盘的盯增仓和成交量。全都默认打开的话,谁都要横向滚动才能看到自己那几列——一张十九列的表对每个人都是错的。

  • 新增「增仓」:今持仓 − 昨持仓。持仓量说的是这一档累计有多少未平仓合约,增仓说的是今天有多少人在这儿建仓。挑档位时后者更要紧——持仓一万但今天没人动的档位,和持仓两千但今天增了八百的档位,流动性完全是两回事。
  • 新增「Vega」:隐波涨 1 个百分点,这张合约涨跌多少。卖方是空 vega,隐波一涨就浮亏,这是卖期权最常见的死法;这个数后端一直在算,只是从没送到前端。
  • 新增「实虚值」:行权价相对标的的价内/价外程度,正数价内、负数价外。
  • 新增「成交」:当日成交量。
  • 四列默认关闭,筛选区的「列」按钮里按需打开,选择记在本机。
  • 开关只决定「在不在」,不决定「排哪儿」。顺序永远取自同一份声明——占资贴着行权价、原始报价在外圈,这个顺序是设计的一部分,不是默认值;让开关顺便决定位置,两个人的截图就对不上了。
  • 测试遍历全部 16 种开关组合,逐一验证两翼严格镜像、且 CSS 网格模板的轨道数与实际渲染的列数一致。后者是这张表历史上最贵的一个 bug:样式表停在十一列时 DOM 已经十二列,于是每个宽度都套在了隔壁那列上。列变成可开关之后,这个不变量比以前更容易被打破。
影响

昨持仓是行情源本来就带的字段,此前没有请求;Vega 后端一直在算。两者都不新增任何行情订阅。

2026-08-18 12:30界面

去框、并块、压密度:同样的内容少了六分之一的高度

每个功能都是一个带边框的玻璃卡片,一页六个框,读起来就是六件互相竞争的东西。「模块太多」的感觉来自框,不来自功能数量。

  • 顶层面板去掉边框、背景和阴影,改用一条极淡的分隔线分段。框是有含义的:它说「这里面是一个整体,和框外是并列关系」。但「波动率定价」和「波动率微笑」不是并列的两个对象,它们是同一份分析的两段——给每段各画一个框,等于把一篇文章的每一段都装进盒子。框保留给真正在横着比的东西:策略卡片、每个月的微笑图。
  • 「波动率水位」并入「波动率定价」。两者问的是同一个问题——这个月贵不贵——只是尺子不同:溢价拿隐波跟标的的实际波动比,分位拿今天的隐波跟它自己的历史比。分成两块,读者得在两处各看一眼再自己合起来。
  • 「波动率微笑」和「分档隐波」合成一块「波动率结构」,用「曲线 / 分档表」切换。它们读的是同一批隐波,回答的也是同一个问题。曲线擅长形状(哪一档凸起、两侧对不对称、哪里断了没数据),表格擅长精确和跨月,两者都要,但不需要同时占着屏幕。
  • 定价面板里的五个指标格去掉各自的背景块,改用竖线分隔。竖线说「这几个数是并排读的」,方块说「这是五个独立的东西」——而隐波、实波、溢价、偏度、分位讲的是同一个月份的同一件事。
  • 期限结构在月份少时不再占掉半页:两个点的折线传达的信息和一条带标注的短线完全相同,多出来的空白只会让人以为还有东西没加载出来。
  • 面板内边距、面板间距、卡片网格最小宽度统一收紧,大字号下调,小字号一个不动——标签类文字已经在 10~11px,再缩就得眯着眼睛读,而它们正是解释旁边那个数字含义的东西。
影响

纯视觉,没有任何数字或口径变化。同样的内容,行情图表页高度从约 2,335 像素降到 1,862。

2026-08-18 11:50功能

价格图叠加平值隐波曲线与预期波动带

价格线说标的在走什么,隐波线说市场为这段波动收多少钱。两条放在同一张图上,才看得出「涨的时候期权是不是也跟着变贵了」。

  • 平值隐波按时间对齐到价格的横轴,用自己的纵轴——两者量纲完全不同,共用一个刻度只会把其中一条压成直线。
  • 按时间对齐而不是按序号:两条序列的采样节奏不同(日线一天一根,隐波五分钟一个点),按序号对齐会让隐波挤在图的左端,看上去像「开头剧烈波动然后就不动了」,而那完全是坐标对错造成的假象。
  • 预期波动带是现价 ± 1σ,σ 取平值隐波 × √剩余时间,和策略优选里定目标价用的是同一把尺子。它说的是「市场认为它大概率待在这个范围里」,不是我们的预测,所以画得很淡。
  • 两条线各自可关。图上东西多了之后,「关掉一条再看」是读图的基本动作。
  • 隐波序列来自波动率历史库;历史库没启用时这条线不画,而不是画一条平的——一条平的隐波线会被读成「这段时间波动率没变」,而真相是根本没在记。
影响

新增 /api/history/volatility/series 只读已有的采样库,不新增任何行情订阅。

2026-08-18 10:40功能

「行情图表」终于有了图表:标的日线 + 跟随鼠标的十字光标

这一页此前全是波动率——贵不贵、歪在哪一档、哪个月更贵——却没有一块回答最朴素的那个问题:这东西最近在走什么。

  • 标的日线走势排在这一页最上面,价格线、成交量柱、右轴价格标签。在问「它的期权贵不贵」之前,人总要先知道它最近在走什么。
  • 把鼠标停在任意一天上,上方读出那一天的开、高、低、收和成交量,同时高亮那一根的成交量柱。一条没有读数的曲线只能看出「大概涨了」,而卖 PUT 要问的是具体的:上次跌到这个位置是什么时候、那天收在哪、量有没有放大。
  • 读数条固定在图上方,不做浮动提示框。浮层会盖住鼠标旁边的柱子,而「这一根和它左右两根比」恰恰是看图的人正在做的事。
  • 纵轴不从零起。铜在十万上下,从零起整条线会挤成贴着上沿的一道,而那几百块的波动正是全部要看的东西。
  • 加载多个月份时上方出现月份切换,各看各的日线。
  • 日期按 Asia/Shanghai 显示——交易所在上海,用浏览器所在时区显示会让人在国外看到错开一天的日期。
影响

不新增任何行情订阅。这些日线柱子是服务端计算实波时本来就已经取回来的同一批数据,此前只用了收盘价、其余几列被丢掉;现在顺手留下。日线一天只变一次,所以页面也不轮询它,只在切换月份时重取。

2026-08-18 09:10功能

新增「分档隐波」矩阵:贵在哪一档

微笑曲线画的是隐波怎么随行权价变,这张表列的是隐波怎么随 delta 变——不是换个坐标那么简单。行权价是名义上的距离,delta 是实质上的距离。

  • 表头是 20P / 30P / 40P / 平值 / 40C / 30C / 20C,每一行是一个到期月。「虚值 5%」对黄金是深度虚值、对中证1000 几乎是平值,按行权价取样量到的主要是品种自己的波动率,而不是微笑的形状;20 delta 的 PUT 在任何品种、任何月份上都是同一件事——市场认为大约五分之一的概率会被行权。
  • 所以这张表横着读是「这个月两侧对不对称」,竖着读是「同一档位近月远月哪个贵」。按行权价排的表这两个方向都读不了。对卖 PUT 的人,最左边那两列就是这门生意的价目表。
  • 每一档的 delta 是用它自己的隐波算的,不是用一个统一的平值隐波。后者算出来的 delta 只是行权价的单调函数,这张表会退化成按行权价排的表、只换了个列名——微笑的信息全在「每一档有自己的隐波」里。
  • 只插值,不外推。目标 delta 落在链上现有档位之外时显示「—」。外推出来的数字看着和插值出来的一模一样,可它描述的是市场上根本没有报价的档位;深度虚值那一端最容易越界,而那一端正是尾部风险所在。
  • 配色按当前这张表所有格子的中位数展开,不是固定阈值。固定阈值在铜(20% 上下)和股指(15% 上下)之间没法通用,会把一个品种整片染成「高」,颜色就不再携带任何信息。
  • 最后一列是 25 delta 处的偏度(PUT − CALL),正数表示下跌保护更贵。
影响

纯展示,数据来自已有的逐档隐波,不新增行情请求。窄屏下这张表自己横向滚动,不会把整个页面推走。

2026-08-18 08:20功能

新增「期限结构」:该写哪个月

年化天然偏向近月——同样的权利金除以更短的时间,年化自然更大。这不是近月更划算,是除法的性质。要真的比较月份,得看期货价、平值隐波和偏度这三条线。

  • 横轴是交易所给的剩余天数,纵轴按三个口径切换:期货价、平值隐波、偏度。旁边配一张表,三个口径的具体数值一次列全。
  • 期货价决定被指派时接到的货成本是多少。远月更贵叫 Contango,近月更贵叫 Back 结构——后者通常意味着现货紧张或眼前有事,那时近月的权利金厚不是白给的,它在为一件正在发生的事情收费。面板顶部直接标出当前是哪种结构。
  • 平值隐波说的是市场认为哪一段时间更不确定:近月高说明眼前有事,远月高说明市场在为一件还没发生的事定价。
  • 偏度说的是下跌保护在哪一段更贵。卖 PUT 的人卖的正是下跌保护,所以偏度最高的那个月,就是这门生意在这个品种上最赚钱的月份。
  • 结构判定的门槛设在 0.5%:期货各月之间本来就有持仓成本造成的价差,给几个基点的差别安一个「Contango」的名字,只是把噪声命名了。低于门槛显示「各月价格接近」。
  • 只加载了一个月份时不画一个孤零零的点,而是明说要在上面多选几个月——一个点连不成线,画出来会让人以为期限结构是平的。
  • 月份按剩余天数排序,不按合约代码。按代码排在 2612 → 2701 跨年时就会翻车。
影响

数据来自已有的按月分析结果,不新增行情请求。至少需要同时加载两个到期月才会画出曲线。

2026-08-18 04:40功能

实波改为三个窗口,并启用波动率历史存储

一个窗口只说明标的「波动多大」,三个才说明「是不是在变」。半月实波明显高于两月,意味着标的正在加速——而这恰恰是溢价看起来最好看的时刻。

  • 实波同时按半月(11 日)、一月(22 日)、两月(44 日)三个窗口计算,同一次日线请求出三个数,不增加任何行情负担。
  • 半月比两月高出 25% 以上时标注「正在加速」并明说:隐波的反应慢于实际波动,此刻溢价看着最好看,可它要覆盖的风险已经先涨了。反过来低 25% 以上标注「在平静下来」。
  • 刻意拿半月跟两月比,而不是拿半月跟隐波比——后者只是把溢价换个说法讲一遍,比较的两边必须都是对标的本身的测量。
  • 启用波动率历史存储:容器挂了一个持久卷,隐波采样从此跨重启保留。攒够 30 个采样后开始显示隐波分位(今天的隐波在自己历史区间里的位置),样本不够时本来就不显示,不会拿几个点编出一个看着很确定的分位数。
影响

只新增测量与展示。历史库有硬上限:保留 400 天、50 万行、64MB,任一触顶就停止写入而不是把磁盘写满。

2026-08-18 03:10功能

新增「封顶方案」:卖出看跌价差 + 到期盈亏图

集中度面板一直在说「这是一笔方向性押注,最坏情况是标的跌到底」,然后就没有下文了——因为本站此前只会裸卖 PUT 一种结构。现在给出对应的解法,并附盈亏图。

  • 卖出看跌价差:照常卖你要卖的那张 PUT,同时买一张行权价更低、更便宜的 PUT。亏损止于(卖出行权价 − 买入行权价)× 合约乘数,不再一路扩大到标的归零。
  • 到期盈亏图:左端封顶那一段平线就是买保护腿换来的东西,这是数字说不清、只有图能说清的。折点画在两个行权价和盈亏平衡点上,不做等距采样——采样会把拐角磨圆,画出一条合约上并不存在的曲线。
  • 两条腿都按实际要成交的那一侧取价:卖出腿按买一,买入腿按卖一。按中间价算出来的价差是一个成交不了的价差。
  • 保证金按行权价宽度收取,比裸卖低得多,所以价差的占资年化往往反而更高。面板不把这个当卖点:真实代价是到手的钱变少(年化是比率不是钱)、赔率变差、要平两条腿,三条都写在卡片上。
  • 赔率分级:亏损封顶不等于这笔交易划算。拿 9,685 博 315 是 30 比 1,亏满一次要 31 次全胜才补得回来。这种情况卡片会标「赔率很差」并直说不划算,而不是长得跟好方案一样。
  • 不给这些结构排名打分:要算「期望收益」就得有标的未来价格的概率分布,而这里唯一拿得到的是期权自己隐含的风险中性分布——在那个分布下所有结构的期望收益按定义完全相同,排出来的名次是把算术包装成洞见。
影响

只新增分析展示,不接账户、不下单,不改行情与交易安全边界。实盘中深度虚值一侧买卖价差往往很宽,实际成交的净权利金会低于按买一/卖一算出的数字,这一点写在面板脚注里。

2026-08-18 01:30功能

新增「波动率定价」:这个月的期权到底贵不贵

期权链上的年化只说明这笔钱占用多久、收回多少,完全没回答「承担的风险配不配得上这笔钱」。缺的那把尺子是标的自己实际波动了多少。现在补上了。

  • 平值隐波:整个月份一个数字,在远期价格处由相邻两个行权价插值得到,而不是随便取最接近现价的那一档。
  • 实波:标的自己最近 22 个交易日(滚动一个月)收盘价算出的实际波动率,对数收益、样本标准差。数据来自日线,跟期权价格完全无关——如果拿期权反推,这个对比就成了自己跟自己比,永远相等。
  • 溢价 = 隐波 − 实波。为正说明市场为不确定性付的钱高于标的实际的波动,这才是卖方在统计上占优的理由;为负说明收的权利金还不够覆盖标的自身的晃动,此时期权链上年化再高也不改变结论。
  • 判定门槛设在 ±2 个波动率点,刻意放宽:这是两个都有噪声的估计值相减,1 个点的差异换个采样窗口就没了,当成信号是自欺欺人。
  • 偏度:delta = ±0.25 处虚值 PUT 与虚值 CALL 的隐波之差。用 delta 而不是固定百分比做锚点——「虚值 5%」对黄金是深度虚值、对中证1000 几乎是平值,按百分比取样量到的主要是品种波动率本身。注意本站按 PUT − CALL,正数表示下跌保护更贵;部分平台按 CALL − PUT,符号相反。
  • 拿不到标的日线时,这一格显示「无法判断」而不是编一个实波出来——用占位数字算出来的溢价会显示成一笔白捡的钱。
  • 同时给期权链补上 Gamma。Delta 只说明现在的方向敞口,Gamma 说明这个敞口会变多快:delta −0.15 的虚值 PUT 看着仓位很小,如果 Gamma 大,标的一次常规波动就能把它变成 −0.40。
影响

只新增展示与计算,不改行情、策略建议或交易安全边界。局限写在面板说明里:实波是历史不是预测,隐波高于实波常常正是因为市场预期未来更波动,这个数字能排除「明显不划算」,不能保证「一定划算」。

2026-08-17 23:10修复

修复:期权链列宽整体错位一列

调整表头顺序时发现的:样式表里写的是 11 列,页面上实际有 12 列——加“行权概率”那次漏了样式。于是每一列都套用了它邻居的宽度,最后一列干脆没有宽度可套。

  • 权利金这一列声明的是 118 像素,实际拿到的是“最新”的 90 像素,而它装的是全表最长的数字。
  • 买一没有列宽可用,落进一个自动生成的列,独占 190 像素——一个价格占掉了全表最宽的位置。
  • 看跌一侧同样错位:合约名声明 190 像素、实际只有 92 像素,所以 PUT 那一边的合约名一直是被截断的。
  • 表头和数值始终是绑在一起移动的,所以任何时候都没有出现“数字排在错误的表头下面”这种情况——错的只是宽度。
  • 根因是同一件事被写在五个地方:组件里两份手写的列数组(正序和倒序各一份),样式表里四份网格模板。现在列的顺序、名称和宽度只在一个文件里定义,DOM 和样式都从它生成,样式表不可能再和页面持不同意见。
  • 补了 6 项测试,其中一项专门核对“每份网格模板的列数等于实际列数”——正是这条能在两个月前就抓住这个问题。
影响

只改布局宽度,不改任何数值、行情或计算。已在浏览器里逐列量过:表头、数据行和滚动后的吸顶表头三者宽度完全一致,看涨与看跌互为精确镜像。

2026-08-17 23:00界面

期权链表头按使用顺序重排

按你给的顺序调整:做决定要看的那几个数字挪到贴着行权价,原始买卖盘挪到外侧。

  • 看跌一侧从行权价往外依次是:占资、年化、行权概率、跌幅空间、权利金、持仓、买一、买量、卖一、卖量、最新,合约名仍在最外侧。
  • 看涨一侧是它的精确镜像,两翼对称的结构没有变——这张表是围着中间的行权价对齐的,一侧改了另一侧必须跟着改,否则同一个指标在左右两边离中心的距离会不一样。
  • 默认不滚动时,屏幕上直接就是年化、行权概率和跌幅空间;原来这个位置是买卖盘挂单量。
影响

只改列的排列顺序,不改任何数值、行情或计算。三个视口、明暗两套主题都截图核对过。

2026-08-17 22:05功能

新增「波动率微笑」:这个月的定价形状

期权链是一列一列的数字,答不了「这个月的定价形状对不对」。同一月份的隐波本该是一条平滑曲线,两边翘、中间低;曲线上突然凸起或凹陷的那一档,在表格里和正常档位长得一模一样,在曲线上一眼分得开。

  • 每个已加载的到期月一张图:横轴行权价,纵轴隐含波动率,看涨看跌各一条线。两边翘中间低不是巧合——极端行情比正态分布预示的更常发生,市场为两侧保护多收钱。
  • 曲线上孤立的凸起或凹陷只有两种可能:真的有人在那一档建仓推高了价格,或者那一档根本没成交、报价是挂在板上没人动过的死数。判断卖哪一档时,这两件事的区别是决定性的。
  • 下方的持仓量柱与曲线共用同一条横轴,看跌向左、看涨向右。曲线说哪一档贵,柱子说哪一档真的能成交——卖 PUT 挑档位时后者往往更要紧,年化再高,没有对手盘就只是一个数字。
  • 解不出隐波的地方是断开的,不连线。深度虚值的期权常常趴在最小变动价位上,没有时间价值,隐波无解;一条穿过空白区的直线看上去和真实数据毫无分别,可它描述的那段形状是凭空来的。宁可让人看见「这里没有数据」。
  • 竖线标的是远期价格(由看跌看涨平价关系反推),不是标的现价。股指期权的标的是指数,指数本身不能交易,能交易的是它的远期,定价该对齐的是后者。
  • 少于 4 个可解档位的月份不画图:两三个点连不出形状,画出来只会让人以为这个月的微笑就长这样。
影响

纯展示,数据来自已有的期权链隐波,不新增任何行情请求。

2026-08-17 21:40安全

股指期权的风险措辞:现金交割不是接货

本站整套话术建立在“最坏情况就是接货拿着等涨回来”上面。这句话对铜、白银、黄金、原油成立,对三个股指期权完全不成立——被行权是直接扣现金,什么都不会留下。原样套用会让网站低估这三个品种的风险,那比不上线还糟。

  • 集中度面板的头条从“行权后接货金额”改为按品种交割方式取词:商品仍是“行权后接货金额”,股指是“名义本金 / 最大亏损”。数字算法完全没变(Σ 行权价 × 手数 × 合约乘数),变的是它到底意味着什么。
  • 股指期权下方新增一句明说:被行权时按(行权价 − 交割结算价)× 手数 × 乘数直接扣现金,指数归零时亏满这个金额,“大不了接货拿着等涨回来”这条退路在这里不存在。
  • 同时选了商品和股指时按“混合”措辞,绝不会退回接货的说法——把现金交割说成接货,等于承诺一个永远不会到来的资产。
  • 沪深300、上证50、中证1000 在集中度里归为同一个「A股股指」结构族:三个宽基指数成分高度重叠、同受政策与流动性驱动,卖三个品种的 PUT 看着像三笔押注,实际上接近一笔。
  • 品类卡片和页面副标题都直接写出“欧式、现金交割,被行权支付现金差额而非接货”,不藏在说明里。
影响

只改措辞与风险归类,不改任何计算、行情或交易安全边界。商品品种的接货措辞原样保留,已用铜和沪深300两张页面并排截图核对。

2026-08-17 21:30功能

盈亏图加盯市线,两根情景滑杆,希腊字母换算成钱

到期折线是这个结构最终会变成什么样,但它不是你会看到的东西——它在行权价上有一个尖角,会让人以为「只要到期前涨回来就没事」。持仓过程中那个角是圆的。

  • 每张策略卡片的盈亏图上多了一条虚线:持有到指定时点的盯市盈亏。两条线之间的距离就是还没走完的时间价值。卖方的浮亏来得比到期图预示的更早、更平缓,涨回来也回得更慢——这是持仓过程中真正会看到的曲线。
  • 「持有到」滑杆从今天拖到到期日,所有卡片的虚线同时重画。
  • 「隐波」滑杆 0.3× 到 3×。这一根是这批里最要紧的:卖方最常见的死法不是标的跌,是隐波炸。把它拉到 2× 看浮亏,那笔钱在到期之前是真的会从账户里划走的,而到期盈亏图对此只字不提。
  • 两根滑杆改的是所有卡片,不是某一张。同时看几个候选在同一时点、同一隐波下各自变成什么样,比一次只看一个结构有用得多——它们的差别恰恰在这里,而不在到期图上。
  • 每张卡片新增 $Delta / $Gamma / $Theta / $Vega:标的涨 1% 组合赚多少钱、这个数本身变多少、一天过去变多少、隐波涨 1 个点变多少。「theta = −0.31」要读懂得先知道乘数、手数和标的价格,「一天 +213」不用,它能直接和账户余额比大小。
  • delta 和 gamma 按「标的涨 1%」而不是「涨 1 个单位」折算:一个单位在铜上是 1 块钱、在上证50 上是 1 个点,差着三个数量级,按单位算横着没法比。
  • 盯市线的局限写在说明里:它给每个行权价都用同一个平值隐波,没有考虑偏度,所以下跌那一侧的实际浮亏比虚线画的更深。看「时间和隐波怎么改变这个结构的形状」可靠,当成某个价位上的精确报价则不可靠。
影响

全部在浏览器本地计算,不新增服务端请求。盯市值在剩余时间趋于零时必须收敛到到期折线,这一点有测试守着。

2026-08-17 21:20功能

新增沪深300、上证50、中证1000三个股指期权

微信里提到的四个股指品种,能做的三个都接上了。中证500 没有期权——它只有股指期货(IC),交易所从来没挂过它的期权,所以不做,也不会在页面上留一个永远空白的入口。

  • 股指期权跟商品期权是两种东西,差别都单独处理了:现金交割而非实物交割、标的是现货指数而非期货合约、月份不是连续的(当月 + 下两个月 + 三个季月,中间是跳着的)、保证金公式的虚值扣减是全额而不是打对折。
  • 关键的一条:标的是现货指数,直接把现货价喂进 Black-76 是错的,会漏掉持有成本。改为从看涨看跌平价关系反解远期——这是恒等式,不是模型,也不需要编一个股息率出来。
  • 用你券商截图里的真实报价验证过:上证50、沪深300、中证1000 的一个月远期分别贴水 0.78%、0.74%、1.28%;用反解的远期算,同一行权价的看涨看跌隐含波动率只差 0.16~1.28 个点;用现货算则差 6.7~12.3 个点。券商 App 自己那一屏就是后者的样子。
  • 合约月份按当前日期推算,并且按品种分规则:商品是“交割月前一个月停止交易”,股指是“跑到当月第三个周五”,所以八月里商品看九月、股指看八月。要的月份数超过交易所实际挂牌数时只给真实存在的,不补造。
  • 行情源改为区分“查询标的”和“展示标的”:向 TqSdk 问的是现货指数(一个指数一次返回全部月份),页面上分组用的仍是月份代码,返回结果按所选月份过滤——不过滤的话选九月会把十月、十二月一起订进来并全记到九月名下。
  • 上证50 和中证1000 的保证金系数暂时沿用沪深300 的公布值,代码里写明了是“没能核实”而不是“已确认相同”。券商回报真实保证金时以真实值为准,估算值页面上标着是估算。
影响

新增三个品种,不改动原有四个商品品种的任何计算。后端测试 265 项、前端 113 项全部通过;三个视口、明暗两套主题都截图核对过。

2026-08-17 20:35功能

新增「策略优选」:先说方向,再挑结构

期权链回答的是「这一档值不值得卖」。它前面还有一个问题一直没人答:我对行情有个看法,有哪些结构能表达它,各自的代价是什么。

  • 六个方向——极度看跌 / 看跌 / 不涨不跌 / 大涨大跌 / 看涨 / 极度看涨——每个方向下列出能表达它的结构。同一个结构会出现在多个方向下(卖 PUT 既是看涨也是横盘),因为它本来就同时成立。
  • 目标价按 σ 定:现价 ±1σ 或 ±2σ,σ 取平值隐波 × √剩余时间。用 σ 而不是固定百分比,是因为「涨 3%」对黄金是大事、对中证1000 是一个普通的下午,而「涨 1σ」在任何品种上都是同一件事:市场认为很常见的一次移动。目标价可以手改,所有卡片同时重算。
  • 每张卡片给出腿的构成、净收/净付权利金、最大收益、最大亏损、目标价盈亏、胜率和到期盈亏图。
  • 胜率是到期收在盈利区间的风险中性概率,从期权价格本身反推,不掺任何对行情的预测。要说清楚它不是什么:不是「这笔交易赚钱的概率」——中途被追保平掉、提前止盈离场都不在这个数里。更要紧的是高胜率和好交易不是一回事:卖深度虚值的胜率能到 95%,代价是那 5% 一次亏掉前面几十次赚的。所以胜率永远和最大亏损并排显示。
  • 亏损没有上限的结构(卖出看涨、卖出跨式、比率价差里裸着的那条腿)不给数字,直接写「无上限」,并单独占一行说明这不是能用仓位大小控制的风险。卖 PUT 这类「只被标的归零封住」的另标一种颜色:它的最大亏损是整个名义本金,和价差的「最多亏 4,000」不是一回事。
  • 不做排名打分。期权价格本身就是按概率定的,所以在市场自己的概率下这里每个结构的期望收益都相等,任何按「预期收益」排出来的名次都是算术穿了件洞察的外衣。排序做成一根在「目标价赚得多」和「胜率高」之间调的滑杆——它调的不是好坏,是你想要什么形状的赌注。
  • 行权价由「离目标 N 个 σ」自动选出,再吸附到链上真实挂出的档位;买入按卖一价、卖出按买一价计价,也就是真要成交时会跨的那一边。任何一条腿报不出价就整张卡片不出——三条腿加一个猜测不是这个结构。
影响

只做分析与展示,不接账户、不生成下单指令。结构名称与腿的构成按标准定义逐个核对过,比率反向价差的买卖方向尤其容易写反,写反之后盈亏图会整个翻过来。

2026-08-17 20:10界面

工作台分成三个标签页:行情图表 / T型报价 / 策略优选

之前三块内容一路往下堆,看策略要先滚过整张期权链。问题不在页面长,在顺序被写死了:链在上、策略在下,等于替人规定了「先挑行权价再想结构」。

  • 行情图表:这个月的期权贵不贵——波动率水位、隐波实波溢价与偏度。链上的年化再高也答不了这个问题,所以它排在最前面。
  • T型报价:逐档行权价的完整报价、隐波、行权概率与占资年化,以及搜索、筛选、导出和机会提醒。
  • 策略优选:策略卡片、资金分配建议、封顶方案对照和持仓记录。
  • 停在哪一页会记住,刷新回到原处。
  • 情景模拟滑杆从筛选区搬到公共控制栏:它同时改期权链报价、保证金测算和策略结论,锁在其中一页里,另外两页会拿着未调整的数字继续算,而屏幕上没有任何东西说明这一点。滑杆同时铺满整行,±10% 摊在原来的 130 像素上一格只有 3 个像素,手抖一下就跳两档。
影响

纯布局调整,没有任何数字口径变化。三个标签页在 1366 / 1920 / 移动端 390 三个宽度、明暗两套主题下逐页截图核对过,共 18 组。

2026-08-15 13:55修复

合约月份改为按当前日期自动生成,不再写死

上一条只是“发现月份死了再自动切走”,写死的月份还留在配置里,还附带一句“需要人工定期轮换”。一个必须永远记得做的运维任务本身就是缺陷。现在月份直接由当前日期算出来。

  • 合约月份不再是写死的清单,而是从当前日期推算:期权在标的交割月的前一个月停止交易,所以从当月往后推一个月就是最近的候选。今天(8 月 15 日)自动得到沪铜2609,正是活着的那个月份。
  • 明确不做的事:不计算精确到期日。那需要交易日历和节假日表,而写进代码的节假日表每年都会悄悄过期——正是同一个陷阱。日期只负责挑起点,真实的到期天数负责裁决。
  • 前后端都改了,所以服务重启后也不会再订阅一个已死的月份。
  • 按交易所所在时区(UTC+8)取月份,不看访问者本地时区,否则纽约的访客可能落后一天,跨年时甚至落后一年。
  • 上一条做的“检测到全部到期就提示并自动切换”保留着,作为到期当周那几天的兜底:日期推算可能乐观一个月,数据说了算。
  • 部署后发现光算还不够:服务器配置文件里显式写着那几个已到期的月份,优先级高于算出来的默认值,重启后又订阅回去了。现在服务端会直接拒绝这类配置——交割月已经过去的合约,其期权必然在上个月就停止交易了,这是纯算术能确定的事,照着一个必然无法交易的月份订阅不叫尊重配置,叫把一个笔误永远重复下去。
影响

只改月份选择来源;不改行情、计算、策略建议或交易安全边界。配置里显式设置的月份仍然优先生效,只是不再需要这么做。

2026-08-15 12:50修复

修复:默认合约月份到期后页面变空白

沪铜2608 期权在 7 月底就到期了,而它是页面写死的默认月份。此后打开网站,期权链一直是空的——而提示还在说“非交易时段”,把真正的原因完全盖住。已修复,并且以后不会再这样默默空下去。

  • 根因:默认月份是写死的字面量,时间一过就腐烂。到期的合约会被期权链过滤掉,于是 28 个合约全被滤空,页面什么都不剩。
  • 现在按数据判断,不猜日历:合约到期天数是交易所给的事实,某个月份的合约全部到期时,页面会明确写出“沪铜2608 的期权已于 18 天前到期,28 个合约全部失效”,并自动切换到下一个还活着的月份。
  • 这条提示会一直留着直到你点“知道了”,不会一闪而过——月份被自动换掉了却不告诉你,比空白更糟。
  • 合约月份按钮里,已到期的月份会变灰并标注“已到期”,不会再让人点进一个死月份。
  • 顺带修掉两个措辞问题:一是没有可用合约时会打出“上一笔报价停留在未知时间”这种莫名其妙的话,二是把月份到期误报成“非交易时段或休市日”。
  • 补上告警:订阅的月份里一个未到期合约都没有时会明确报出来。这个页面空白了 18 天,此前没有任何信号提示过。
影响

只修月份选择与提示;不改行情、计算、策略建议或交易安全边界。服务端的默认月份仍需在配置里更新,告警会提醒。

2026-07-27 10:30修复

复查告警逻辑,又揪出四处同类问题

上一条修完,我按同一个毛病——“想当然认为某个字段是什么意思,却没去核对它到底怎么算的”——把这套告警从头审了一遍,又发现四处,全部修掉并补了测试。

  • 休市时切换合约月份会误报故障:切月份时系统会把状态标成“加载中”,我把它当成了“正在连接”,于是晚上换个月份就报 critical。实际上换月份跟连接好不好毫无关系。
  • 真正一整天没有任何变化的假日会误报故障:我拿来当心跳的那个时间戳,其实只在“数据发生变化”时才前进——一动不动的假日它自然就停了。已经改成记录“行情源有没有在说话”的真心跳,不管说的内容变没变。
  • 最需要诊断的时候反而看不到诊断:页面读的那个接口在行情线程真的挂掉时会返回 503,于是前端拿不到结果,只能退回旧的笼统措辞——恰恰在真出故障时失效。改读一个始终可用的接口。
  • 一次性的小错误会让警告永远挂着:行情批次校验失败的计数是累计的、永不归零,一次偶发错误会让警告显示到进程重启为止。改成只看最近一小时内是否真的发生过。
  • 告警接口和主动推送原本各写了一份判断逻辑,迟早会不一致——变成“网页说没事、推送说有事”。已合并成同一份。
影响

只修故障判断;不改行情、计算、策略建议或交易安全边界。后端测试从 190 增至 201 项,新增的每一条都对应上面一个具体的误报场景。

2026-07-27 09:40修复

修复:休市被误报成“行情源故障”

上一版把休市判断做错了,凌晨的正常休市被写成“连接已中断 5.7 小时,这是真实故障”。行情源其实一直正常连着,一秒都没断过。已修复。

  • 原因:判断连接是否存活时用错了字段。用的是“上次建立连接的时刻”,而那是一个只在建连瞬间写入的时间戳——连接越健康、连得越久,这个值就越老。一条连了 5.7 小时、一次都没断过的连接,被当成了断线 5.7 小时。
  • 改为看行情源自己上报的连接状态(断线时它会明确报告“重连中”),再加上“是否还在持续推送数据”作为心跳。这两个信号都不会因为连接稳定而变老。
  • 同时保留对“线程还活着但已经卡死、长时间什么都不推”的判断——这种情况仍然算真实故障。判定窗口设得很宽松:晚一点发现卡死,远比把正常休市喊成故障要划算。
  • 已把出问题时线上的那一整份原始数据原样写成回归测试,锁死这个行为,防止以后再犯。
影响

只修故障判断;不改行情、计算、策略建议或交易安全边界。修复前告警接口会误报 critical,修复后恢复正常。

2026-07-27 04:05安全

健康告警:只在真出事时才响

新增一个只读的健康接口,让外部监控能知道网站是不是真的坏了。前提是上一条——如果分不清休市和故障,告警会每晚每周末各响一次,然后被你静音,真出事那次也一起被忽略。

  • 新增 GET /api/health/alerts:只看 healthy 这一个布尔值就够了。它为 false 时接口同时返回 503,所以只认状态码的监控服务(UptimeRobot、BetterStack 之类)直接把 URL 填进去就能用,零配置。
  • warning 级别的告警不会让 healthy 变 false。网站还能用的时候半夜叫醒你,只会让你以后忽略这个通道——这是告警最常见的死法。
  • 区分“会自愈”和“不会自愈”:反复尝试连接却一次都没成功过(凭据或网络配置错误)、或根本没配凭据,都会单独标记为需要人工处理。对着被拒绝的凭据无限重试不是韧性,是把只有人能解决的问题藏起来。
  • 可选的主动推送,默认关闭:不填通知地址就一个外发请求都不会有。开启后只发 critical,只在新故障 / 故障内容变化 / 恢复时各发一次,持续故障按设定间隔提醒——两分钟一轮的检查不会变成两分钟一条消息。
  • 告警内容只含健康状态,不含任何配置或凭据,因此可以安全地指向任意第三方通知地址;有专门的测试逐个断言这些字段不出现。
  • 开发中由测试抓到一个真实缺陷并修掉:初版每次重启都会发一条“已恢复”,而那次故障根本没发生过。一个每次部署都问候你的通道,就是一个会被静音的通道。
影响

新增只读健康接口;不改行情、计算、策略建议或交易安全边界。主动外发默认关闭,不配置就不会发出任何请求。

2026-07-27 03:50安全

分清“休市”和“坏了”

以前行情停更时,页面只会说“最后一笔报价停在 X,滞后 Y”——这句话在周日凌晨三点和真实故障时一模一样,两种情况都看着像出事了。现在网站会明确告诉你是哪一种。

  • 判断依据换成连接状态而不是数据新鲜度。这两件事本来就是独立的,此前被混在一起:连接正常但报价不动 = 休市或节假日,不是故障;连接中断 = 真实故障,无论几点。
  • 因此不需要交易日历,也不需要节假日表。中国交易所节假日每年公布,任何写死在代码里的日历都会悄悄过期;而节假日时连接照常在线,自然就被判为“安静”,不需要额外维护。
  • 非交易时段的提示改为浅色中性样式,并写明“开盘后会自动恢复”,不再用橙色警告吓人。
  • 真故障时则明确写出“行情源连接已中断 N 分钟,这是真实故障,不是休市”,并说明是系统在自动重连还是需要人工检查服务端。
影响

只改故障判断与提示措辞;不改行情、计算、策略建议或交易安全边界。

2026-07-27 02:30功能

集中度:几个档位不等于几笔押注

策略面板把资金分到几个行权价和月份,看起来像分散配置。但同一个品种的不同行权价由同一个价格驱动——铜跌 10%,四个档位在同一时刻一起承压。新增集中度模块,把这件事量化出来。

  • 独立押注数 = 1 ÷ 各品种保证金占比的平方和。四个铜的档位算 1.00 笔,两个品种各一半算 2.00 笔。看的是品种,不是表格行数。
  • 新增「行权后接货金额」= Σ 行权价 × 手数 × 合约乘数,作为头条数字。这是全部被行权时要真金白银买下的标的金额,不需要任何模型,是合约上写死的事实,通常是保证金的好几倍——保证金只是入场券,不是这笔生意的规模。
  • 「当前等效多头」(由 Delta 换算)刻意放在次要位置:深度虚值时 Delta 很小、看起来很安全,而那恰恰是尾部风险最大的位置;用它当头条会低估本站最该暴露的那个风险。大幅波动请看情景保证金。
  • 跨品种只做结构分类(贵金属 / 工业与能源)并注明驱动因素,明确说明这是人工归类而不是实测相关系数。要测真实相关性需要价格历史,本站的历史序列功能目前未启用,所以宁可不给数字,也不给一个编出来的相关系数——那看起来会像证据。
  • 当多个品种同属一个结构分类时会明确提示:换品种并没有换掉驱动因素。
影响

只新增分析与展示;不改变筛选逻辑、分配结果、行情或任何计算口径。

2026-07-27 02:05功能

持仓与结果记录:给本站的预测打分

本站一直在给出年化收益和行权概率,却从来不知道自己说得准不准。新增持仓记录:开仓时把当时的预测一起冻结存下,仓位了结后拿真实结果去核对。这不是盈亏账本——券商的账本更准;这是券商做不了的那件事。

  • 记录一笔卖出时,会同时存下当时页面显示的预测年化、行权概率、σ 安全边际、隐含波动率和标的价,之后不再重算。
  • 在持仓位按卖一价盯市——买回期权才是了结这笔仓位的真实成本,用买一价或中间价会让每一笔浮盈都凭空多出一个价差。
  • 仓位了结后给出实现盈亏、实际持有天数和实际年化,并与开仓时的预测年化并排显示。
  • 累计到 20 笔“持有到期”的记录后开始打分:预测平均行权概率 vs 实际行权比例,以及 Brier 分数。Brier 分数旁边一定会放上“只按平均行权率去猜”的对照基准——单看 0.13 这个数毫无意义,只有比基准低才说明逐合约概率真的有分辨力,而不只是碰巧平均对了。
  • 提前买回的仓位不参与打分:它既没有解决“会不会被行权”,也截断了预测所针对的那段收益,算进去衡量的是择时而不是模型。被排除的笔数会单独列出。
  • 记录只存在你这台浏览器里,不上传服务器(后端本来也是只读、无持久存储)。提供 CSV 导出用于备份和自行分析。
  • 存储中读不出可信身份、手数或开仓价的记录会被直接丢弃而不是补默认值——一个被悄悄补成 0 的字段会顺着流进已实现盈亏和打分样本,事后无从分辨。
影响

纯新增,全部在前端本地;不改行情、计算、策略建议,也不接入账户或下单。

2026-07-27 01:45功能

波动率历史分位(能力已就绪,默认关闭)

隐含波动率单看一个数字回答不了“现在卖贵不贵”:20% 对某个品种是便宜,对另一个是很贵。新增按标的记录平值隐含波动率的历史序列,并在期权链上方显示当前读数在自身历史区间中的分位。

  • 采样口径:只在该标的行情为“实时”时记录,休市或行情滞后一律不写;否则一个周末会把同一条冻结报价重复写几百次,周一的真实读数就会被拿去和这堆重复值比较,分位数直接失真。
  • 平值波动率取法:同一行权价的看涨与看跌隐含波动率先取平均(平价关系下两者理论相同,取平均可以在一侧不活跃时保持稳健),再在标的价两侧最近的两个行权价之间线性插值,避免标的在行权价之间漂移时序列跳变。
  • 磁盘是有硬上限的:每标的每次采样只写一行,四个标的按 15 分钟采一次、保留 400 天约四万行、个位数 MB;保留天数、行数、体积三道闸门依次生效,达到体积上限后停止写入但保留读取,宁可分位数停在旧数据也不跟生产抢磁盘。
  • 样本不足 30 个时整块不显示:几个点算出来的分位和一年算出来的看起来一模一样、一样自信,不如不显示。
  • 当前状态:后端容器是只读且没有持久卷(这是刻意的安全设计),因此该功能默认关闭、优雅降级——接口返回未启用,页面不渲染该模块,其余功能完全不受影响。需要在服务器上手动挂载数据卷并打开开关后才会开始累积数据,步骤已写入运维文档。
影响

默认关闭,对当前线上零影响:不改行情、计算、策略建议和交易安全边界;开启后也只新增一块展示。

2026-07-27 01:35安全

策略建议标注模型可信度边界

策略面板新增“启发式”标注,说明分档权重与风险阈值是人工设定、未经历史回测的参数,避免四位有效数字的精度表象被误当作证据。

  • 面板标题下新增常驻说明行与问号气泡,逐条列出哪些是未经验证的人工参数(分档权重、风险分级阈值、打分系数、年化区间倍数)。
  • 同时列出可以依赖的部分:输入行情、每档的收益率/年化/跌幅空间/隐含波动率/行权概率都是确定性计算并可独立复核,流动性与数据完整性是硬性排除条件。
  • 结论表述为:这些数字应作为“按既定规则筛出的候选档位”阅读,而不是“经过验证的最优配置”。
  • 本站对数据来源一贯有严格标注(陈旧数据显示为不可计算、保证金标注来源),本次把同等标准应用到策略模型本身。
影响

只新增说明文字,不改变任何筛选逻辑、分配结果、行情或计算。

2026-07-27 01:20功能

情景模拟新增保证金测算:跌 X% 会不会被追保

拖动情景滑杆时,策略面板会显示这套建议在该情景下需要的保证金,以及是否会超出投入金额。这是卖出期权真正的失败路径:标的下跌导致保证金上升、在最坏时点被动平仓。

  • 用新增的 Black-76 模型在当前价与情景价各算一次交易所保证金,只取两者的相对变化,再套用到这套建议实际占用的保证金上;绝对水平仍以实盘保证金来源为准,模型只负责变化幅度。
  • 情景下保证金超过投入金额时,面板整体转为橙色警示,并说明这意味着追加保证金或被动平仓,而不只是纸面浮亏。
  • 明确标注假设隐含波动率不变;真实急跌中波动率通常上升,实际保证金可能更高,因此该测算偏乐观。
  • 缺少隐含波动率等输入而无法测算的档位会单独计数说明,不会被静默忽略。
  • 验证中发现并记录了一个反直觉但正确的现象:深度虚值档位的保证金受“0.5 × 期货保证金”下限约束,而该下限正比于标的价,因此标的上涨时这类档位的保证金反而小幅上升;已写成测试固定该行为。
影响

只新增前端情景测算与展示;不改变行情、实时保证金、收益计算、策略建议内容或交易安全边界。

2026-07-27 00:43功能

新增隐含波动率、行权概率与标准差安全边际

期权链新增由报价反解的隐含波动率、被行权概率和按波动率归一化的安全边际,用于回答“这个期权卖得贵不贵、被行权概率多大”,此前只能看年化收益率。

  • 新增 Black-76 定价内核(期货期权的正确模型),从每个合约自身的计价价格反解隐含波动率,再据此计算 Delta、被行权概率、每日时间价值和标准差安全边际;不需要任何新数据源。
  • 期权链新增“行权概率”列,副行显示反解出的隐含波动率;“跌幅空间”列副行新增 σ 安全边际。
  • σ 安全边际解决了百分比不可比的问题:同样“5% 跌幅空间、30 天”,铜(波动率 20%)约为 0.89σ、被行权概率 19%,原油(波动率 40%)约为 0.45σ、被行权概率 35%,风险接近一倍差距,此前页面都只显示“5%”。
  • 报价缺少时间价值、超出无套利边界或缺少输入时一律显示“不可计算”,不会给出看似精确的模型数字;概率为 Black-76 风险中性口径,界面明确标注其为模型输出而非真实世界预测。
  • CSV 导出同步包含隐含波动率、行权概率、安全边际σ、Delta 和每日时间价值,并在文件头注明模型口径与无风险利率。
  • “行权概率”“跌幅空间”“权利金”三个表头都带小问号,鼠标悬停显示完整计算公式与口径说明。
  • 前后端各自实现同一算法(含相同的正态分布近似),通过共享校验样本交叉验证,相对误差小于 1e-9;另有看跌看涨平价、隐含波动率往返求解等结构性检验。
影响

只新增分析指标与展示列;行情来源、权利金、保证金、收益率、策略建议与交易安全边界均未改变。期权链镜像对称、行高、吸顶表头与横向滑动已逐项复验无变化。

2026-07-23 23:25功能

新增情景模拟、机会提醒、期权链导出与新功能提示

在铜期权工作台新增四项只读分析工具,并加入进入页面时的新功能提示;均只做分析,不生成交易。

  • 情景模拟滑杆:拖动 ±10%(步长 0.5%)模拟标的价变动,跌幅空间和行权价价内/价外着色按情景价即时重算(紫色);买一/卖一、权利金和保证金始终保持实盘值,不做虚构预测,点“复位”回到实盘。
  • 机会提醒:开启后当某个 PUT 年化进入策略目标区间(默认 10%~15%)、跌幅空间 ≥ 4% 且流动性达标时推送浏览器桌面通知;同一合约每次进入区间只提醒一次,行情不新鲜时不提醒,仅在本站页签开启时工作。
  • 期权链一键导出 CSV:含行情时间、计价口径、数据质量与每个合约的报价、持仓、收益和跌幅空间,兼容 Excel 中文;开启情景模拟时附加情景列。
  • PWA 支持:手机浏览器可将本站“添加到主屏幕”,以独立全屏 App 形式打开。
  • 新功能提示:进入工作台时在顶栏下方显示新功能通知栏(不遮挡导航),“查看介绍”打开浮动弹窗展示功能说明与使用步骤,可选择“不再提示”;即使已关闭,也能从侧边栏“新功能介绍”随时重新查看。
影响

只新增前端只读分析工具、桌面通知与页面提示;不修改行情来源、收益计算、保证金、策略结果、API、WebSocket 或交易安全边界。

2026-07-22 23:37界面

新增深色金融终端预览与首页预览版本选择

新增第四个铜期权视觉候选(蓝橙金融终端风格、跟随明暗主题),首页预览入口改为可切换的版本菜单,正式页面暂不替换。

  • 新增 /ui-preview/copper-options-terminal:冷蓝看涨、琥珀看跌、紫色行权价中轴、现价横梁与等宽表格数字,完全跟随站点明暗主题。
  • 首页导航“铜期权效果预览”改为版本菜单,列出终端风格 / 玻璃拟态 / Studio / Craft 四个候选,均使用真实行情、互不影响正式页面。
  • 复用正式 OptionDashboard 与实时数据,不复制业务逻辑;遵守工作台克制原则,不使用栅格、扫描线或强发光。
  • 真实 Chrome 已验证 1366×768、1920×1080、390×844、明暗主题,无整页横向溢出。
影响

只新增独立前端视觉预览和首页入口;不影响正式 /cu、行情、API、WebSocket、收益计算或交易边界。

2026-07-18 12:47界面

新增正式铜期权页同构毛玻璃预览

以正式铜期权组件和实时数据为基础新增毛玻璃审查预览,强化清透材质、吸顶一致性和响应式降级,正式页面暂不替换。

  • 新增 /ui-preview/copper-options-formal-glass;复用正式行情、筛选、期权链和策略组件,不复制业务逻辑。
  • 顶栏、Hero、品类、月份、筛选、期权链、策略区和侧边栏统一使用半透明玻璃、边缘高光和柔和阴影。
  • 吸顶期权链表头通过独立 Portal 视觉类保持玻璃材质,镜像滑动方向和位移继续与数据同步。
  • 背景仅使用低频 transform 漂移,不使用噪点、扫描线或动态滤镜;移动端、reduced motion 和无 backdrop-filter 浏览器均有降级。
  • 真实 Chrome 已验证 1920×1080、1366×768、390×844、明暗主题、侧边栏与滚动吸顶,无整页横向溢出。
  • 前端 26 项测试、TypeScript lint 和生产构建全部通过;正式 /cu 复核保持原有外观。
影响

只新增正式页同构视觉预览和一个可选视觉参数;不影响正式路由、行情、API、WebSocket、金融计算、策略结果或交易安全边界。

2026-07-18 11:56界面

新增铜期权 Craft 效果预览

新增独立铜期权视觉预览,改善信息层级、留白、深浅主题和交互反馈,正式页面暂不替换。

  • 新增 /ui-preview/copper-options-craft;正式首页和正式 /cu 页面均保持原样。
  • 统一面板与控件圆角,重新整理行情概览、月份/计价控制、筛选区和期权链的信息层级。
  • 保留蓝色 CALL、橙色 PUT、固定中央行权价和镜像横向查看,不修改任何行情或金融计算逻辑。
  • 表头与数据在拖动时直接同步,减少长期合成层和滞后动画;悬停反馈只在精确指针设备启用。
  • 深色模式不使用噪点、扫描线、混合模式或动态滤镜,并支持 reduced motion 降级。
  • 真实 Chrome 已验证 1920×1080、1366×768 和 390×844,无整页横向溢出;吸顶表头与镜像列同步。
影响

只新增独立前端预览和公开更新记录;不影响正式期权页面、API、WebSocket、收益计算、保证金、策略评估或交易边界。

2026-07-15 23:14安全

多品类状态隔离与生产运行边界加固

单个品类缺少期权不再污染其他品类的实时状态,同时收紧公共接口、容器和运维发布边界。

  • 行情连接状态与单个标的警告分离;原油缺少期权时,实时铜行情仍会正确显示为 fresh。
  • HTTP 快照、WebSocket、消息体、队列和单客户端订阅均增加明确上限;只读 WebSocket 拒绝客户端写入。
  • 管理令牌、跨域、公开错误信息和 CTP 保证金失败路径进一步收紧,不向访客暴露底层异常文本。
  • 前后端容器使用只读根文件系统、能力删除、no-new-privileges 和进程数上限。
  • Linux 运维脚本增加执行位与 LF 换行自动门槛,备份、SHA-256、权限和磁盘维护测试通过。
  • 未启用 CTP 时保留轻量镜像,不安装完整 vnpy_ctp 图形依赖链。
  • 后端 105 项测试和 Ruff 检查通过;前端 26 项测试、TypeScript、生产构建和高危依赖审计通过;公网铜快照连续更新、56 个合约且不再携带原油警告。
影响

页面布局和金融计算公式没有变化;主要提升多品类状态准确性、公共服务抗滥用能力、异常信息保护和生产可回退性。

2026-07-15 18:55修复

修复首页效果预览入口

首页现在会打开真正独立的铜期权效果预览,不再进入与正式首页几乎相同的旧预览页。

  • 首页入口改为“铜期权效果预览”,目标路由为 /ui-preview/copper-options-studio。
  • 正式首页、正式铜期权页面、行情接口和计算逻辑均未修改。
  • 未完成的本地预览实验没有进入本次生产构建。
  • 前端 24 项测试、TypeScript 检查和 Next.js 生产构建全部通过。
影响

只修复预览入口和公开更新记录;不会改变正式行情展示、收益计算、策略评估或交易安全边界。

2026-07-12 21:22界面

更新日志时间精确到分钟

公开更新记录从仅显示日期升级为显示上海时区的日期和分钟,同时保留无法确认具体时间的历史补录。

  • 最近更新和每条新记录统一显示为 YYYY-MM-DD HH:mm。
  • 已能由 Git 提交或部署记录确认的近期条目补充到分钟。
  • 无法确认分钟的旧记录继续保留原日期或“历史补录”,不人为编造时间。
  • 项目协作规则已要求后续新增更新日志使用 Asia/Shanghai 时区并精确到分钟。
影响

只改变更新日志的时间精度,不影响行情、计算、策略、API 或交易安全边界。

2026-07-12 21:11安全

按页面过滤行情推送与 ETF 外部数据兜底

让浏览器只接收当前页面真正查看的月份,并给外部 ETF 数据读取增加总耗时上限和上一份真实数据兜底。

  • 期权 HTTP 快照和 WebSocket 现在都支持按标的月份过滤;正式铜单月页面只接收 cu2608,不再反复解析白银、黄金、原油和其他月份。
  • 旧客户端不带筛选参数时仍能获得完整快照;筛选月份经过允许清单、去重和单客户端数量上限校验。
  • 生产 WebSocket 首包由 970 个合约、789,878 字节降为 56 个合约、47,075 字节,传输和浏览器解析量约减少 94%。
  • 相同筛选范围的多个连接共用一次快照序列化,慢客户端队列仍只保留最新一帧,不会积压旧行情。
  • ETF 全历史净值分页加入 25 秒总时间预算;未完成时只返回已取得的真实数据并明确标记部分数据,不用模拟值补齐。
  • ETF 刷新失败且已有成功快照时保留上一份真实数据;首次失败只返回通用错误,原始上游异常不会暴露到公网。
  • 后端 90 项、前端 21 项测试、Python 编译、TypeScript、Next.js 生产构建和依赖审计全部通过。
影响

页面布局、行情来源和金融计算公式没有改变;低性能电脑在行情更新时需要接收和解析的数据显著减少,外部 ETF 数据源变慢或短暂失败时也不会把真实历史图表清空。

2026-07-12 20:15安全

行情线程自恢复与分层健康检查

把“网站活着、行情 worker 活着、行情是否新鲜”拆成三个独立事实;外部行情故障现在可追踪、可恢复,也不会误触发容器重启。

  • 新增 liveness、readiness 和完整诊断三层健康状态;停盘旧行情可以正常提供观察,但不会被误报为实时。
  • 健康信息显示行情线程启动、连接尝试、连接成功、外层重连、意外退出和 watchdog 重启次数,不包含 TqSdk 账号或密码。
  • 行情线程意外退出时由 30 秒 watchdog 有界重建;正常网络断线仍使用原有指数退避,未配置账号时不会反复重启。
  • 坏行情批次保留上一份有效数据,并记录拒绝次数、时间和异常类型,不再只留下一条难以追踪的后台回调错误。
  • 原始外部异常内容不再直接显示给访客;恢复后仍保留最后错误类型和时间,方便判断曾经发生过什么。
  • 生产切换时首次连接真实发生超时,系统自动重试后恢复:最终 worker 存活、970 个合约可读、意外退出和坏批次均为 0。
  • 后端 83 项测试、隔离故障容器、生产健康端点和日志核验全部通过。
影响

页面布局和金融计算没有变化;主要提升发生在后台故障时,网站更容易判断问题所在,并能在行情线程异常退出后自动恢复。

2026-07-12 19:40安全

前后端计算口径统一与不可计算保护

把权利金、保证金、收益率和年化口径做成前后端可交叉验证的同一套真值;缺失数据不再被静默当作零。

  • 前后端现在共用同一组黄金计算样本,覆盖买一/卖一、乘数、手数、原始/手动/估算保证金、修正系数、年化基数和缺失报价。
  • 快照公开计算版本、年化天数和跌幅口径;页面与策略模块不再各自写死不同的年化参数。
  • 手数只接受非负整数;小数、负数和无效输入会被规范化,避免生成现实中无法交易的半手结果。
  • 组合汇总区分可计算与数据不完整合约;只要已选项中仍有缺失数据,组合收益率就不会伪装成完整数字。
  • 卖一价和最新价只作为情景比较,不代表可成交价格,也不会让策略状态显示为适合;默认仍以买一价评估卖出期权。
  • 风险说明改为适用于铜、白银、黄金和原油的通用标的表述。
  • 后端 72 项、前端 19 项测试、TypeScript、生产构建、公网真实合约独立重算和 Chrome 截图验证全部通过。
影响

正常买一价浏览方式不变;主要提升发生在非默认计价、年化配置、小数手数和数据缺失场景,系统更少给出看似精确但不可执行或不完整的结果。

2026-07-12 18:58安全

权威快照与分品类行情时钟

行情是否实时现在同时取决于完整快照代次和交易所时间;重连、重启或其他品类仍在交易,都不能把已停更品类伪装成最新行情。

  • 完整行情批次使用单调递增代次和替换语义;过期合约被移除,重复、乱序、错误标的绑定或超量批次不会部分写入。
  • 空心跳不再推进代次、刷新来源时间或改写价格;报价、保证金或交易所时间真实变化时才产生新代次。
  • 铜、白银、黄金和原油分别记录交易所行情时间、数据质量和数据年龄,适配不同夜盘收盘时间。
  • 连接状态与数据新鲜度分开显示:链路可以仍然连接,但闭市或停更数据会立即标记为 stale。
  • 服务重启后直接按行情自身时间判断陈旧,不再出现刚启动时短暂显示为实时的情况。
  • 后端 65 项、前端 10 项测试以及 TypeScript、生产构建、隔离镜像和公网验证全部通过。
影响

页面布局和计算公式没有改变;数据可信边界更严格,不同品类不再互相掩盖停更状态,策略模块更难基于旧行情给出误导性建议。

2026-07-12 18:01安全

可信行情与公共资源边界升级

把行情是否可信从隐含判断升级为可验证状态;过期或无流动性数据不再生成看似可执行的资金分配建议。

  • 快照新增行情代次、真实来源更新时间、数据质量和数据年龄;定时心跳不再伪装成真实行情变化。
  • 旧行情与旧服务器时间一起重放时不再误判为实时;闭市或异常停更超过阈值后明确显示 stale。
  • 过期、缺失、降级行情以及没有有效买一量的 PUT 合约只供观察,不再输出建议手数和资金分配。
  • 公共月份选择改为允许清单内的有界只增缓存,每位访客只显示自己选择的月份,不再互相覆盖页面。
  • 行情批次完整校验后原子提交,重复快照复用计算结果;请求体和 WebSocket 连接加入明确资源上限。
  • 后端 53 项测试、前端 9 项测试、TypeScript 与生产构建通过,并完成公网 API、日志和真实 Chrome 截图验证。
影响

正常行情下界面变化很小;真正的变化发生在数据不可信时,系统会主动停止推荐并清楚解释原因,降低用户把旧报价或无流动性报价当成可执行机会的风险。

2026-07-11 15:23安全

全项目可靠性审计与运行镜像瘦身

在不改变交易安全边界的前提下,系统修复多品类共享行情、计算缺失值、实时连接、容器权限和低性能设备滚动稳定性问题。

  • 铜、白银、黄金和原油改为按品类保留各自活跃月份,切换一个品类不再清空其他品类行情;同品类仍保持共享选择并加入切换节流和总订阅上限。
  • 期权计算对非正报价、未知 CALL/PUT、无效乘数和无效保证金改为明确不可计算,不再用错误默认值生成看似正常的收益率。
  • CTP 保证金按权利金、FixedMargin 和 MiniMargin 的交易成本口径计算,并加入缓存过期、失败节流和可选依赖缺失提示。
  • WebSocket 必须收到有效快照后才显示已连接;异常帧自动回退 HTTP,重连加入退避和抖动,行情新鲜度按最旧有效报价保守判断。
  • WebSocket 同时监听客户端断开和行情更新,浏览器离开页面后不再发生“连接已关闭仍发送”的后台 Traceback。
  • 默认手数统一为 5 手;滚动期间只暂停装饰性光效,不改变表格、玻璃透明度或业务数据,降低部分电脑下拉闪烁风险。
  • Caddy 只读取不含凭据的公开环境文件;前后端使用非 root 用户运行,容器日志限制为 10MB × 3。
  • 后端运行镜像由约 2.25GB 缩小到约 172MB;前端运行镜像约 66MB。
  • 隔离验证通过后端 43 项测试、前端 6 项测试、TypeScript、Next.js 生产构建、前后端依赖审计和真实浏览器桌面/移动端截图复核。
影响

数据缺失时更少出现误导性结果,多品类访问互相干扰显著降低,实时连接和滚动更稳,服务器镜像与日志占用也更可控。

2026-07-10修复

全项目审计、ETF 数据纠偏与稳定性瘦身

系统审查前后端、实时连接、ETF 数据口径、容器和样式资产,优先修复真实数据与稳定性问题,并清理不会影响现有界面的冗余代码。

  • 515080 改用未复权市场价格与基金单位净值比较,补足完整历史区间,并在历史接口暂未生成当天 K 线时用真实即时行情补上当天蜡烛。
  • 即时报价、历史 K 线和基金净值拆分缓存,ETF 页面可见时每 30 秒后台刷新;WebSocket 正常时停止重复 HTTP 轮询。
  • 净值读取先确认真实总页数,失败页只有限重试;净值覆盖不足时明确显示为部分数据。
  • 没有访客订阅实时行情时,后端不再反复序列化整张期权快照;CTP 查询失败后按周期重试。
  • CTP 模块继续强制禁止真实交易,并在代码层显式拒绝报单和撤单。
  • 删除 600 余行已无组件引用的旧 ETF 原型样式,取消滚动时突然关闭玻璃滤镜造成的明暗跳变。
  • 补齐项目构建、部署和测试文件,优化前后端容器结构,并清理云服务器约 49GB 的 Docker 构建缓存。
  • 部署前完成隔离构建和真实浏览器验证,并保留可恢复回退点。
影响

ETF 最新日期和历史溢折价口径更可靠,实时页面减少重复请求与无效计算,低性能电脑滚动时的闪烁风险降低,同时保留现有布局、收益公式和交易安全边界。

2026-07-09修复

修复期权链吸顶表头与底部滑块不同步

修复拖动期权链底部“近侧列 / 外侧列”镜像滑块时,滚出视口后的吸顶表头没有跟随左右列同步移动的问题。

  • 吸顶表头现在与主期权链共用同一组 `--mirror-call-shift` 和 `--mirror-put-shift` 位移变量。
  • 在 `.mirror-floating-head` 作用域内显式声明 CALL / PUT 轨道 transform,避免吸顶表头被后续稳定性 CSS 覆盖。
  • 滑块拖动时同时更新主表格和吸顶表头,不再出现表头停在原位、下面数据列移动的错位感。
  • 保留之前的性能优化:拖动滑块仍然直接更新 DOM CSS 变量,不触发整张期权链 React 重渲染。
  • 本次不修改后端、TqSdk、行情接口、收益计算、策略评估或交易相关逻辑。
影响

期权链向外侧/近侧切换列时,CALL / PUT 两边的吸顶字段表头会跟随数据列一起镜像移动,阅读关系更一致。

2026-07-04修复

红利 ETF 真实行情页应用到正式入口

把 515080 的真实行情 / 基金净值图应用到正式 ETF 页面,并把两个 ETF 入口合并为侧边栏中的单独 ETF 工具分组。

  • 正式 `/etf/515080` 改为使用真实市场 K 线 + 基金单位净值 + 溢折价率图表。
  • 侧边栏新增单独的“ETF 工具”分组,只保留一个“红利 ETF 估值”入口。
  • 原来的“红利 ETF 估值”和“ETF 终端预览”两个相似入口已合并;入口统一跳转正式 `/etf/515080`。
  • 继续保留数据边界提示:当前只保真到 ETF 市场行情、基金单位净值和溢折价;PB、股息率、指数估值分位尚未接入。
影响

侧边栏信息结构更清楚:期权品类仍在品类工作台,红利 ETF 作为单独工具入口;正式路径可直接查看真实行情和净值参考。

2026-07-04修复

纠正红利 ETF 页面:移除模拟估值,接入真实行情与基金净值

停止在 515080 终端预览页使用前端模拟价格、模拟 PB、模拟股息率和模拟低估度,改为读取真实市场 K 线与基金单位净值。

  • 新增后端 `/api/etf/515080` 接口,读取 515080 腾讯公开市场行情、日 K 线和东方财富基金历史单位净值。
  • 终端预览页不再调用 `generateDividendEtfMockData`,没有真实来源的数据不再用模拟值顶替。
  • 主图改为真实市场价格 K 线 + 基金单位净值线,副图改为收盘价相对单位净值的溢折价率。
  • 撤下假 PB、假股息率、假历史低估度和由假数据推导的“真实价值参考”。
  • 页面明确提示:PB、股息率和指数估值尚未接入,不能据此输出历史高估/低估结论。
  • 后端基金净值读取改用 `requests`,并加入分页失败容错、按时间范围抓取和短时缓存,避免因为某一页失败导致整段净值被丢弃。
  • 线上验证:`/api/etf/515080?range=1y` 返回 252 条数据,净值匹配 252 条,最新日期 2026-07-03,收盘 1.464,单位净值 1.4611,溢价 0.20%。
  • 性能验证:默认 1 年冷启动约 8.42 秒;同范围缓存后约 0.01 秒,切到 1 日/5 日/本月约 0.02~0.12 秒。
  • 部署前已创建服务器回退快照。
影响

红利 ETF 页面从展示型模拟图改为可核查的真实行情/净值参考图;在真实估值数据源接入前,不再给出伪装成真实的高低估判断。

2026-07-04界面

优化红利 ETF 终端预览布局和时间范围

根据截图反馈重做 515080 终端预览页的信息结构,避免右侧详情面板遮挡主图,并加入常用 K 线时间范围切换。

  • 将右侧大详情面板改为图表下方的横向行情详情带,主图不再被侧栏挤压或遮挡。
  • 新增近1日、近5日、本月、近1年、近5年、全部时间范围切换。
  • 模拟数据从固定 2026-05-15 结束改为截止最近一个工作日,避免预览页看起来像旧日期。
  • 页面文案明确标注当前仍为模拟数据和简化估值模型,不代表 515080 真实最新行情。
  • 本次不接真实 ETF 数据源,不修改后端、期权行情、收益计算、策略评估或交易逻辑。
影响

红利 ETF 终端预览页更接近交易软件的阅读习惯,时间范围可切换,同时降低用户误以为数值真实准确的风险。

2026-07-04界面

新增红利 ETF 终端式估值预览

新增独立预览页,用同一张图同时展示 515080 市场价格 K 线和真实价值参考线,并用正负偏离区分低估和高估。

  • 新增 `/etf/515080-terminal-preview` 预览路由,不替换正式 `/etf/515080` 页面。
  • 主图叠加市场价格 K 线、收盘价线和由股息率 / PB 推导的真实价值参考线。
  • 副图改为正负估值偏离度:上方代表市场价低于参考价、偏低估;下方代表市场价高于参考价、偏高估。
  • 右侧详情面板同步显示当前日期、市场收盘价、真实价值参考、估值偏离、股息率、PB 和历史低估度。
  • 当前仍为前端模拟数据和简化估值模型,只用于验证展示方式;本次不接真实 ETF 数据源,不修改后端、期权行情、收益计算或交易逻辑。
影响

可以更直观看到 ETF 当前价格相对估值参考线的位置,不再只有低估度曲线而缺少高估判断。

2026-07-04界面

红利 ETF 页面改为图表优先布局

针对线上截图反馈,进一步重排 515080 红利 ETF 页面,让图表成为首屏主体,而不是只做轻微间距调整。

  • 移除首屏横向四个大指标卡,避免它们占用图表上方空间。
  • 把最新收盘、股息率、PB、估值状态合并为标题区下方的小型信息标签。
  • 把页面标题改为更短的工具页标题:515080 红利 ETF 估值图。
  • 强制 ETF 图表工作区接近全屏宽度,让 K 线和低估度曲线成为主要阅读对象。
  • 本次不修改后端、真实数据源、期权行情、收益计算、策略评估或任何交易逻辑。
影响

页面打开后应明显更像金融估值图表工具,首屏能更快看到 K 线和历史低估度曲线。

2026-07-04界面

优化红利 ETF 估值页首屏图表布局

根据线上真实截图调整 515080 红利 ETF 页面,让页面更像估值图表工具而不是展示型落地页。

  • 进入 `/etf/515080` 时重置滚动位置,避免浏览器保留旧滚动导致标题被裁切。
  • 统一 Hero、指标卡、图表和计算口径面板的内容宽度,减少左右不一致和视觉割裂。
  • 压缩顶部说明区域和指标卡高度,把首屏视觉重心下移到 K 线和低估度曲线。
  • 图表提示改为强调鼠标移动查看任意日期,强化该页面作为估值图表组件的使用方式。
  • 本次不修改后端、真实数据源、期权行情、收益计算、策略评估或任何交易逻辑。
影响

红利 ETF 页面首屏更接近金融图表工具,用户打开后能更快看到 K 线和历史低估度曲线。

2026-07-03功能

新增红利 ETF 估值 K 线页面

新增独立的 515080 红利 ETF 历史估值可视化页面,用 K 线和低估度曲线展示估值位置。

  • 新增 `/etf/515080` 页面,入口接入侧边栏。
  • 主图展示红利 ETF 模拟价格 K 线,副图展示 0-100 的历史低估度曲线。
  • 低估度副图加入 80、90、95、100 四条参考线,并按阈值显示估值状态。
  • 鼠标悬停时展示当天价格、股息率、PB、股息率低估度、PB低估度、综合低估度和估值状态。
  • 当前版本仅使用前端模拟数据跑通页面交互,不接真实行情数据,不修改后端、期权行情、收益计算或交易逻辑。
影响

可以先通过网站评估红利 ETF 估值图表的交互和展示方式,后续再替换为真实 515080 历史价格、股息率和 PB 数据源。

2026-07-02 23:35修复

修复首页侧边栏入口和期权链表头吸顶

正式首页补上侧边栏入口按钮,并修复期权链双层表头没有真正吸顶的问题。

  • 正式首页 / 补上侧边栏入口按钮,复用现有抽屉式导航;关闭状态不占页面布局空间。
  • 期权链外层容器不再裁剪 sticky 表头,避免 overflow: clip 让吸顶规则失效。
  • 看涨 CALL / 行权价 / 看跌 PUT 与下面字段表头滚出视口后吸顶,滚回原位置后恢复正常。
  • 本次不修改后端、行情接口、收益计算、策略评估、CTP 保证金或任何交易逻辑。
影响

首页可以打开侧边栏;期权链滚动时关键表头更符合交易软件的阅读习惯。

2026-07-02 21:48修复

修复期权链买量列和吸顶规则

修复新增买量 / 卖量后 CALL 侧买量和买一被旧样式覆盖的问题,并调整顶部栏和期权链表头的滚动行为。

  • 修复工作台末尾样式把期权链强制回 9 列的问题,CALL / PUT 两侧统一为 11 列。
  • 恢复 CALL 侧“买量”“买一”显示,避免看涨侧出现半截列。
  • 顶部导航栏恢复为普通页面内容,不再全程固定覆盖在最上层。
  • 期权链自身的“看涨 CALL / 行权价 / 看跌 PUT”和字段表头在滚出视口后保持吸顶,回到原位置后恢复正常。
  • 行情滞后提示超过 1 小时后显示为“X小时Y分”,不再显示几百分钟。
  • 行情流增加 HTTP 快照兜底,WebSocket 首包延迟或异常时页面仍可先显示当前快照。
  • 本次不修改后端、行情接口、收益计算、策略评估、CTP 保证金或任何交易逻辑。
影响

期权链左右两侧字段恢复完整;滚动时顶部信息层级更符合交易软件习惯,滞后时间提示更易读。

2026-07-02 19:33功能

期权链新增买量和卖量

在看涨 CALL 和看跌 PUT 两侧新增买一量、卖一量展示,方便直接观察一价报价附近的挂单厚度。

  • 后端 TqSdk 行情读取新增 bid_volume1 和 ask_volume1 字段。
  • 期权链 CALL / PUT 两侧同时新增“买量”“卖量”列。
  • 买一 / 卖一价格仍然靠近中间行权价,买量 / 卖量放在对应价格外侧,保持报价阅读习惯。
  • 新增列后镜像轨道宽度同步调整,保持左右对称和底部镜像滑动逻辑。
  • 本次不修改收益计算公式、策略评估、CTP 保证金或任何交易相关逻辑。
影响

用户可以在期权链里直接看到买一价、卖一价对应的挂单数量;如果行情源暂时未返回数量,则显示为空值。

2026-06-29修复

代码瘦身与低风险性能优化

审查前后端代码后,删除不再使用的旧预览入口和本地诊断缓存,并降低期权链滑块拖动时的前端重渲染压力。

  • 删除未被正式页面使用的 /options-preview 旧预览路由和 CopperOptionsPreview 旧组件。
  • 清理本地 Chrome 诊断 profile 缓存,避免把大体积临时文件继续留在项目目录。
  • 新增根目录 .gitignore,排除 node_modules、.next、构建产物、临时诊断 profile、.env 等不应进入项目管理的文件。
  • 把期权链镜像滑块从 React 状态更新改为直接更新 CSS 变量,拖动滑块时不再触发整张期权链重新渲染。
  • 后端 TqSdk 行情模块跳过重复的合约选择请求,并缓存静态兜底合约文件读取结果。
  • 本次不修改收益计算公式、策略评估逻辑、TqSdk 行情订阅规则、CTP 保证金查询规则或任何交易逻辑。
影响

项目目录更干净,旧预览入口不再占用构建体积;期权链滑块拖动和重复合约选择的额外开销降低。

2026-06-29修复

修复首页进入时短暂闪旧版

修复从品类工作台跳回首页时,旧版首页组件会在路由切换前短暂出现的问题。

  • 路由模式下点击首页入口时,直接跳转到正式首页,不再先把工作台切换成旧 home 视图。
  • 移除工作台对旧版 HomeLanding 组件的静态导入。
  • 删除未被正式路由使用的旧版首页组件文件,避免后续再次误触发。
  • 本次不修改后端、行情接口、收益计算、策略评估、交易逻辑或 API。
影响

进入首页或从 /cu、/ag 等页面返回首页时,不应再看到一瞬间的旧版首页。

2026-06-29修复

视频反馈后加固期权链小屏显示

根据用户提供的视频,进一步加固铜期权链在 1280 宽度、浏览器缩放和滚动场景下的布局稳定性,降低滚动时闪烁和表格错位风险。

  • 把工作台期权链的 CALL / 行权价 / PUT 三段布局改为最后生效的硬约束,避免旧样式互相覆盖。
  • 锁定左右两侧 9 列模板、普通行高度、表头高度和现价行高度,减少不同电脑字体渲染造成的错位。
  • 保留“跌幅空间”列,并让该列在 CALL 和 PUT 两侧都参与固定列宽。
  • 工作台的大表格和策略区不再 hover 上浮,滚动时减少大面积玻璃 blur 合成压力,降低下拉闪烁。
  • 本次不修改后端、行情接口、收益计算、策略评估、交易逻辑或 API。
影响

小屏笔记本和缩放环境下,期权链应更稳定、行列更容易对齐;滚动时视觉闪烁应减轻。

2026-06-29修复

修复期权链错位与跌幅空间列缺失

修复部分电脑或浏览器缩放环境下期权链 CALL / 行权价 / PUT 三列出现纵向错位的问题,并恢复主期权链中的“跌幅空间”列。

  • CALL 和 PUT 两侧恢复显示“跌幅空间”,用于观察行权价距离标的现价的安全距离。
  • 期权链左右两侧统一为 9 列,确保 CALL / 行权价 / PUT 的列宽和镜像滑动逻辑一致。
  • 固定期权链普通行和现价行的行高,避免不同电脑缩放、字体渲染或长合约名把单侧表格撑开。
  • 滚动时暂停装饰性背景动画,并在工作台滚动期间降低玻璃层合成压力,减少下拉时闪烁。
  • 本次不修改后端、行情接口、收益计算公式、策略评估逻辑或交易边界。
影响

不同电脑上期权链应更稳定对齐;用户重新打开或强制刷新后,可以在主表中再次看到“跌幅空间”。

2026-06-28修复

回退全站固定侧边栏

撤回全站固定侧边栏方案,恢复到工作台侧栏入口仍只在下级页面出现的上一步状态。

  • 移除挂在根布局里的全站固定侧边栏。
  • 恢复首页不显示侧边栏的稳定版本。
  • 恢复工作台页面原有的侧边栏入口样式。
  • 未修改后端、行情、收益计算、策略评估、API 或交易逻辑。
影响

撤回不符合预期的全站侧边栏方案,保留后续重新设计侧边栏交互的空间。

2026-06-28修复

回退首页侧边栏与铜页预览实验

撤回导致首页顶部大面积空白的首页侧边栏接入和 /cu-preview 预览页实验。

  • 首页恢复到无侧边栏占位异常的稳定视觉版本。
  • 移除 /cu-preview 预览路由,避免继续展示不成熟的视觉实验。
  • 保留工作台页面的圆角面板侧边栏入口样式。
  • 未修改后端、行情、收益计算、策略评估、API 或交易逻辑。
影响

优先恢复首页正常首屏和滚动体验;下级页面视觉优化需要重新设计后再做预览。

2026-06-28界面

优化工作台侧边栏入口

将品类工作台顶部的侧边栏入口从三横线改为更紧凑的面板图标,并在首页模式下隐藏侧边栏入口。

  • 侧边栏入口改为圆角方块和面板轮廓样式。
  • 实时连接正常时在入口右上角显示小蓝点。
  • 正式首页继续保持无侧边栏干扰,突出首页视觉和品类入口。
  • 未修改行情、收益计算、策略评估、API 或交易逻辑。
影响

下级品类页面的导航入口更接近现代应用图标,首页视觉更干净。

2026-06-28界面

震撼版首页迁移到正式首页

将 /visual-preview 的电影感金融中控台视觉方向应用到正式首页,并保留预览页作为对照。

  • 正式首页 / 改为多品类期权收益中控台视觉首页。
  • 保留 /visual-preview,方便后续继续做视觉实验和对照。
  • 新增滚动进入视口时的组件 reveal 动效,模块会快速上浮、淡入并去模糊。
  • 动效限定在首页视觉壳内,并支持 prefers-reduced-motion 降级。
  • 未修改行情、期权链、收益计算、策略评估、后端接口或交易边界。
影响

访问网站第一眼会直接看到更强的产品视觉;实际期权分析仍从 /cu、/ag、/au、/oil 等品类页面进入。

2026-06-28界面

新增震撼版首页视觉预览

新增独立的 /visual-preview 视觉预览页,用来评估更强烈的电影感金融中控台风格。

  • 新增独立预览路由,不替换正式首页。
  • 视觉重点放在首页 Hero、资产入口和金融中控台氛围。
  • 预览页不改行情、期权链、收益计算、策略评估和交易边界。
  • 加入 reduced-motion 保护,降低动效不适和频闪风险。
影响

可以先评估更震撼的视觉方向,满意后再决定是否迁移到正式首页。

2026-06-28界面

前端结构拆分

整理前端组件结构,把原本集中在一个大文件里的页面、导航、期权链和策略面板拆分为独立模块。

  • 拆分首页、侧边栏、品类面板、期权链、策略评估面板和提示组件。
  • 抽出多品类配置、主题存储键、格式化工具和月份显示工具。
  • 保留原有页面、路由、行情读取、收益计算和策略评估逻辑。
影响

后续优化界面和交互时风险更低,更容易局部修改和回退。

2026-06-28功能

新增网站更新日志

新增公开的更新日志页面,用来记录网站已经完成的功能变化、修复和回退。

  • 新增 /changelog 页面。
  • 在首页和侧边栏加入更新日志入口。
  • 更新日志只记录已完成内容;后续计划仍单独维护。
影响

方便以后回看网站每次做了什么改动,不影响行情、计算和交易相关逻辑。

2026-06-28修复

回退不稳定动效实验

撤回上一版导致明显频闪的动效增强,恢复到更稳定的前端版本。

  • 恢复动效增强前的前端状态。
  • 重新构建并重启线上前端。
  • 确认首页、铜、白银、黄金、原油、其他品类和预览页均可访问。
影响

优先保证网站稳定和可读性,避免为了视觉效果影响正常使用。

历史补录功能

多品类期权工作台上线

网站从单一铜期权页面扩展为多品类期权收益工作台。

  • 增加铜、白银、黄金、原油和其他品类入口。
  • 不同品类使用独立路由,便于直接打开对应页面。
  • 未接入或未确认的品类不显示模拟行情。
影响

网站结构更适合后续扩展更多商品品类。

历史补录界面

期权链镜像表格

将期权展示改为更接近交易软件的期权链结构。

  • 左侧显示 CALL,看涨期权。
  • 中间固定行权价和现价位置。
  • 右侧显示 PUT,看跌期权。
  • 支持买一价、卖一价、最新价切换作为计算价格。
影响

可以更直观看到不同行权价上下的报价、收益和风险差异。

历史补录功能

策略评估与资金分配建议

新增基于目标收益和风险约束的策略评估区域。

  • 支持输入投入金额。
  • 按目标年化、单档占比、总保证金上限和现金保留比例进行约束。
  • 输出建议档位、占用金额、预计收益、年化收益和风险说明。
影响

用于辅助分析,不会自动生成订单,也不会执行真实交易。

历史补录安全

保证金来源提示与保守边界

保证金展示加入来源提示,避免把估算数据误认为真实账户最终保证金。

  • 页面区分保证金、估算保证金和数据不足。
  • 提示不同平台和账户的保证金结果可能不同。
  • 继续保持只分析、不下单的安全边界。
影响

降低误读风险,真实交易前仍需以交易软件和账户显示为准。