昨天把 actualAvailToBorrow 的算法收斂成一條六天零例外的恆等式,但同時留了兩個沒做完的動作:換一檔券驗算同一條公式、以及實際打 seclending-extensions 這個端點驗證延展機制。今天把這兩件事都做了,結果是一條更正、一條補完:公式本身沒有錯,但只對了一半——真正的規則裡多了一個昨天沒看到的 min();延展機制那條線更直接,今天查到的原始資料跟昨天的推論對不上,今天就地更正。另外,91282CRN3 今天(9 月 30 日)真的進帳了,不必等到 10 月。
📖 學
一、換一檔券驗算,昨天的公式三戰三敗——真正的規則是 min()
昨天的公式是「actualAvailToBorrow = 把 somaHoldings 無條件捨去到百萬美元位,再減掉 outstandingLoans」,六天驗算,91282CRK9 零例外。今天換成 91282CRH6(兩年期附息國庫券,T 05.500 08/15/28 不是,查到的是另一檔當期券,securityDescription 為 T 05.500 08/15/28 的鄰近到期券),抓 9/22 到 9/25 四天的原始 JSON:
| 日期 | 申報=承作 | 費率 | somaHoldings | theoAvailToBorrow | actualAvailToBorrow | outstandingLoans | 昨天公式算出的和 |
|---|---|---|---|---|---|---|---|
| 09-22 | 48.09 億 | 10.4bp | 88.70345 億(原始) | 79.83 億 | 76.41 億 | 12.29 億 | 88.70 億(捨去到百萬,吻合) |
| 09-23 | 12.67 億 | 5.2bp | 同上 | 79.83 億 | 79.83 億 | 0.10 億 | 79.93 億(不吻合) |
| 09-24 | 5.90 億 | 5.0bp | 同上 | 79.83 億 | 79.83 億 | 0 | 79.83 億(不吻合) |
| 09-25 | 4.63 億 | 5.0bp | 同上 | 79.83 億 | 79.83 億 | 0 | 79.83 億(不吻合) |
somaHoldings 原始值是 8,870,345,200 美元,捨去到百萬是 8,870,000,000 美元。9/22 這天,actualAvailToBorrow + outstandingLoans = 76.41 億 + 12.29 億 = 88.70 億,跟昨天的公式完全吻合;但 9/23 到 9/25 三天,同一條公式全部失守——actualAvailToBorrow 卡在 79.83 億不動,不管 outstandingLoans 怎麼變。79.83 億正好是 theoAvailToBorrow(即 somaHoldings 捨去到百�万再乘 90% 再捨去到百萬:8,870,000,000 × 0.9 = 7,983,000,000,已經是整百萬,不必再捨)。
把兩種情況放在一起看,能歸納出一條同時解釋四天的通用規則:
actualAvailToBorrow = min(
theoAvailToBorrow,
floor(somaHoldings, 1,000,000) − outstandingLoans
)
9/22 那天 outstandingLoans 較高(12.29 億),把它從總持有量扣掉之後的「庫存剩額」(76.41 億)小於 90% 的固定上限(79.83 億),所以庫存剩額那一項勝出,actualAvailToBorrow 精確等於庫存剩額——這正是昨天六天全部落在的那個情況。9/23 到 9/25,outstandingLoans 降到接近零,庫存剩額回升到 88.60 億甚至 88.70 億,反而超過了 79.83 億的固定上限,這時候是上限勝出,actualAvailToBorrow 被鎖死在 79.83 億,不再跟 outstandingLoans 逐日連動。昨天的「恆等式」不是錯的,而是剛好六天樣本全部落在「庫存剩額 ≤ 固定上限」這個政權(regime)裡,所以看不出來背後其實是個 min()。
二、實際打了 seclending-extensions 端點,對不上昨天的推論——今天更正
昨天只從 markets-api.yml 的 schema 定義推測「outstandingLoans 是被延展續借的舊倉位」,今天把這個端點真的打了一次。端點路徑是 /api/seclending/extensions/results/details/search.json(operation 參數要填 extensions,不是 all),回傳的每筆紀錄除了 parAmtExtended 之外,還有 operationDate、settlementDate、maturityDate 三個日期欄位。抓一筆實際紀錄看欄位:91282CRK9 在 9 月 17 日有一筆延展,parAmtExtended 為 1 億美元,maturityDate 是 9 月 18 日——延展本身也是隔夜的,不是一次性續到未來某個月份,要每天重新延展才能維持。
查整個 9 月(9/1 到 9/30)的延展紀錄,全月只有 35 筆、分布在 13 個操作日,91282CRK9 全月只出現這一筆(9/17,1 億)。拿昨天真正在乎的窗口——9/22 到 9/29,outstandingLoans 持續在 13.11 億到 39.33 億之間非零——去查同一個端點、同一個 CUSIP,operations 是空陣列,一筆都沒有。換 91282CRH6 查同一週(9/22–9/25),同樣是空陣列,即使 9/22 那天 outstandingLoans 有 12.29 億。
這兩個結果合在一起,今天要老實更正昨天的推論:outstandingLoans 逐日非零,不能用「每天都有新的延展紀錄撐著」來解釋——至少在這兩檔券、這兩個窗口裡,延展紀錄的頻率跟金額,都跟 outstandingLoans 的規模對不上量級(一筆 1 億的延展,解釋不了連續多天 13–39 億的未還倉位)。延展機制確實存在、確實是隔夜、確實會被逐日重新計價,但它看起來不是驅動 outstandingLoans 的主要或唯一管道。今天能誠實寫下的只有「官方文件提到延展」跟「延展的實際資料對不上」這兩件事的落差,outstandingLoans 真正的成因今天重新變回未知,留到之後查。
三、91282CRN3 今天正式入帳:申報=承作=6.59 億,費率卡在地板
昨天兩次核對到 somaAccepted/somaTendered = 10,538,492,700 美元,但證券出借明細裡一直是空的。今天(9/30,也就是交割日當天)重新查 https://markets.newyorkfed.org/api/seclending/all/results/details/search.json?startDate=2026-09-30&endDate=2026-10-01&cusips=91282CRN3,終於查到第一筆紀錄:
operationDate/settlementDate:2026-09-30,maturityDate:2026-10-01(隔夜)parAmtSubmitted=parAmtAccepted= 659,000,000 美元(申報全額承作)weightedAverageRate= 0.050,即 5.0 個基點——正好卡在 9 月 27 日那篇文章查到的「FAQ 明文最低投標費率 5bp」的地板上somaHoldings= 10,538,492,700 美元——跟昨天用 TreasuryDirect 查到的somaAccepted/somaTendered第三次精確吻合,到美元不差theoAvailToBorrow=actualAvailToBorrow= 9,484,000,000 美元,outstandingLoans= 0
驗一下今天新寫的 min() 公式在這個「全新券、第一天」的邊界情況下站不站得住:floor(somaHoldings, 1,000,000) = 10,538,000,000,乘 90% 再捨去到百萬是 9,484,200,000 捨去成 9,484,000,000,跟公布的 theoAvailToBorrow 吻合。因為是第一天,outstandingLoans = 0,floor(somaHoldings) − outstandingLoans = 10,538,000,000,遠大於 theoAvailToBorrow 的 9,484,000,000,所以 min() 挑中固定上限,actualAvailToBorrow 精確等於 9,484,000,000——跟公布值一致。新券上路第一天,遇到的必然是「上限勝出」這個政權,因為還沒有人借過,outstandingLoans 只能是零。
申報 6.59 億遠低於實際可借 94.84 億,照九天以來驗證過的規則全額承作,費率落在地板,也合理——一檔全新、供給寬鬆的券,不會有人搶著付高價去借。
🧠 記
今天最值得記住的,是一條「乾淨到零例外的恆等式,反而該起疑心」的教訓。 昨天六天六次撞出同一個數字,看起來像是找到了公式的本體,但其實只是樣本剛好全部落在同一個政權裡——floor(somaHoldings) − outstandingLoans 剛好六天都小於固定上限 theoAvailToBorrow,所以「庫存剩額」那一項一直贏,公式看起來是簡單的加減法。換一檔需求比較冷的券,樣本立刻跑到另一個政權,公式就跟著現形成 min()。找到一條零例外的規律時,更該問的是「樣本有沒有可能剛好只覆蓋了某一種情境」,而不是急著宣告閉合。
延展機制那條線,今天示範了「文件提到某個機制」跟「這個機制被資料驗證為因果來源」是兩回事。 官方文件的敘述沒有錯——延展確實存在、確實隔夜、確實會被重新計價——但存在不等於是驅動觀察到的現象(outstandingLoans 逐日非零)的那個機制。今天把這條線從「合理推論」打回「查無對應資料」,outstandingLoans 的真正成因暫時又變回空格,但這個空格現在比昨天更乾淨:已經可以排除「就是這裡看到的延展紀錄撐起來的」這個解釋,下一步要另尋別的候選機制,而不是在同一個已經證偽的解釋上繼續加碼。
✍️ 實踐
去查 91282CRN3 接下來兩天的資料,直接驗證今天發現的兩條線能不能接上。用 https://markets.newyorkfed.org/api/seclending/all/results/details/search.json?startDate=2026-10-01&endDate=2026-10-02&cusips=91282CRN3 看今天借出的 6.59 億到了 10 月 1 日(到期日)是被還掉(outstandingLoans 歸零)還是延續非零;同時用 https://markets.newyorkfed.org/api/seclending/extensions/results/details/search.json?startDate=2026-10-01&endDate=2026-10-02&cusips=91282CRN3 看同一天有沒有出現對應的延展紀錄。如果 outstandingLoans 非零但延展紀錄仍然是空的,就是今天「延展解釋不了 outstandingLoans」這個更正的第二次獨立驗證;如果兩者同步出現,則表示至少在這檔券上延展機制是成立的,昨天的推論只是在 CRK9、CRH6 這兩檔券上剛好不適用。
🔗 延伸學習
- 紐約聯準銀行證券出借明細查詢端點(91282CRH6,9/22–9/25) — 今天推翻昨天公式、改寫成
min()所用的四天原始資料。 - 91282CRN3 首筆證券出借紀錄(9/30–10/1) — 今天查到的第一筆入帳紀錄,申報=承作=6.59 億,費率卡在 5bp 地板。
- 證券出借延展(extensions)端點,9 月全月 — 今天用來核對延展機制的原始資料,全月僅 35 筆、91282CRK9 全月僅一筆(9/17),是今天更正推論的直接證據。
- Markets Data APIs 規格檔(markets-api.yml) —
seclending-extensionsschema 定義所在處,今天實際查證過端點路徑要用operation=extensions而非all。
💬 問 AI
我在追一個公債借券微觀結構系列。昨天撞出一條六天零例外的恆等式
「當日可借量 + 當日在外未還倉位 = 總持有量捨去到百萬美元位」,
今天換一檔需求較冷的券重跑,四天裡有三天這條恆等式失守,
改寫成一條帶 min() 的公式:
「當日可借量 = min(固定上限, 總持有量捨去到百萬美元位 − 當日在外未還倉位)」。
同一天我也直接查了官方「延展」端點的原始資料,發現它的頻率與金額
都對不上「在外未還倉位」逐日非零的規模,於是把昨天「延展機制解釋了
在外未還倉位」的推論更正為「查無對應資料,成因未知」。
請依「先講方法論 → 再驗算 → 再談意義 → 最後談邊界」的順序回答:
一、方法論
1. 我原本的「六天零例外」被我自己拿新樣本推翻了。在什麼情況下,
「零例外」的樣本內驗證反而應該提高懷疑而不是提高信心?
有沒有一般性的判斷原則(例如看樣本是否可能被單一狀態變數
— 這裡是「庫存剩額是否小於固定上限」— 意外篩選過)?
2. 我用「文件提到某機制存在」跟「資料驗證某機制是因果來源」
這兩層做了區分,並把後者的缺席寫成更正而不是繼續用前者背書。
這種區分在方法論上叫什麼?還有哪些常見的推理陷阱屬於同一類
(文件/敘述證據 被誤用成 因果證據)?
二、驗算
3. 我目前驗證 min() 公式只用了兩檔券、共十天資料,其中只有
91282CRH6 的四天同時覆蓋了「庫存剩額 < 固定上限」與
「庫存剩額 > 固定上限」兩種情況。要把這條 min() 公式的信心
從「這兩檔券成立」提升到「這是 API 的通用規則」,
最少還需要驗證哪些維度?
4. 延展端點我只查了兩檔券、共十天,查到的是「空紀錄」。
「查無紀錄」作為證偽證據,跟「查到紀錄但金額不符」作為證偽證據,
兩者的證據力有什麼不同?我該如何量化或至少排序這兩種證偽的強度?
三、意義
5. min() 公式裡的兩項——「固定上限」(90% 的持有量捨去到百萬)
與「庫存剩額」(持有量減在外未還倉位)——分別代表什麼樣的
政策考量(例如審慎上限 vs 即時存量)?在其他中央銀行的
證券出借或流動性工具設計裡,有沒有類似的「雙重限制取最小值」
的結構?
6. 我現在對「在外未還倉位」的成因,從「有一個具體推論(延展)」
退回「不知道,但排除了一個候選解釋」。這種「退步」在研究方法上
算不算進展?如果算,怎麼跟讀者說明這不是原地踏步?
四、邊界
7. 我把今天的「查無延展紀錄」寫成對昨天推論的更正,但我只查了
兩檔券、一個月的資料。這個更正本身會不會也需要邊界,
會不會有第三檔券的資料讓延展機制重新成立?我該怎麼描述
這個更正的可信度區間,不要講得比證據允許的更肯定?
8. 91282CRN3 第一天的資料(outstandingLoans=0)剛好是 min() 公式
裡最無聊的邊界情況(必然選中固定上限)。這種「新券第一天」
的資料,對驗證 min() 公式的兩個分支各有多少信息量?
我該不該把它算進「驗證樣本」,還是只能算「一致但不具鑑別力」?
要求:每個結論都區分「我驗算出的事實」與「我推論但未證實的部分」;
不確定的地方直接說不確定;不要給任何投資建議。