昨天留下的待辦是查 91282CRN3 在 10 月 1 日的資料,今天查到了:9 月 30 日借出的 6.59 億美元,到 10 月 1 日 outstandingLoans 為 0,延展端點同一天也是空陣列。順手把查詢範圍從兩檔券拉到整個 9 月的全部 CUSIP——紐約聯準銀行端點回傳的是每個操作日、每一檔券一列,22 個操作日共 4,174 列、443 檔券,足以對昨天的 min() 公式做一次真正的大樣本檢驗。結果是三個更正:theoAvailToBorrow 的算法昨天寫錯了一步(35.6% 的列差 100 萬美元)、min() 公式在 99.40% 的列成立但有 25 列失手、昨天「延展解釋不了 outstandingLoans」的結論從兩檔券擴大到全市場後更站得住,而且這次找到了官方文件裡對 outstandingLoans 的定義。

📖 學

一、實踐待辦的結果:91282CRN3 的借款隔天就還清了

查詢 startDate=2026-10-01&endDate=2026-10-02&cusips=91282CRN3,回傳一筆紀錄:操作日與交割日 10 月 1 日,到期日 10 月 2 日(仍是隔夜);parAmtSubmitted = parAmtAccepted = 2,900 萬美元;weightedAverageRate = 0.050(單位是百分比,即 5 個基點,還是地板);somaHoldings = 10,538,492,700 美元,第四次與 TreasuryDirect 的數字精確吻合;theoAvailToBorrow = actualAvailToBorrow = 94.84 億;outstandingLoans = 0。延展端點同一天回傳空陣列。

這個結果的解讀要克制:9 月 30 日那筆 6.59 億美元,在 10 月 1 日中午拍賣時已全數歸還,沒有任何一部分被記成未還,延展端點也沒有紀錄,所以這一檔券上沒有看到延展。但它只是一個「前一天借款 → 隔天未還」的配對,樣本是 1,對判斷 outstandingLoans 的成因幾乎沒有鑑別力。真正有鑑別力的檢驗是下面兩節:把範圍擴大到全部 CUSIP。

二、先更正昨天的 theoAvailToBorrow 算法

昨天寫的是「somaHoldings 先捨去到百萬美元位,再乘 90%,再捨去到百萬」。今天對 4,174 列逐列驗算,這個寫法有 1,486 列(35.6%)與公布值差 100 萬美元。差異集中在持有量尾數較大的券,例如 10 月 1 日的 B 10/15/26(短天期國庫券):

步驟昨天的算法(錯)今天的算法(對)
somaHoldings 原始值15,472,922,10015,472,922,100
先做什麼捨去到百萬 = 15,472 百萬直接乘 0.9 = 13,925.63 百萬
再做什麼乘 0.9 = 13,924.8 百萬捨去到百萬 = 13,925 百萬
結果13,924 百萬13,925 百萬
公布的 theoAvailToBorrow13,925 百萬13,925 百萬

正確寫法是 theoAvailToBorrow = floor(0.9 × somaHoldings, 1,000,000):先乘 90%、最後才捨去。換成這個寫法重驗 4,174 列,零例外。昨天用來驗證的 CRH6(8,870.3452 百萬 × 0.9 = 7,983.31 → 7,983)與 CRN3(10,538.4927 × 0.9 = 9,484.64 → 9,484)剛好兩種寫法算出同一個數,所以沒被抓出來;又是一個「樣本剛好沒有鑑別力」的例子,跟昨天 min() 的教訓同型。

三、min() 公式的大樣本檢驗:99.40% 成立,25 列失手

把公式固定為 actualAvailToBorrow = min(theoAvailToBorrow, floor(somaHoldings, 1,000,000) − outstandingLoans),對 4,174 列逐列比對,依哪一項勝出分三類:

勝出的項目列數占比公式成立備註
上限(90%)勝出3,98795.52%3,962(99.37%)25 列失手,見下
庫存剩額勝出1162.78%116(100%)真正能鑑別第二項的列
兩項相等711.70%71(100%)其中 69 列持有量為 0,0 等於 0,無鑑別力
合計4,174100%4,149(99.40%)

這張表有兩個值得停下來看的數字。第一,庫存剩額勝出的只有 116 列(2.78%),絕大多數時候上限是綁定的——這解釋了為什麼昨天挑的 CRK9、CRH6 在 9 月中旬需求最熱的幾天才進入庫存剩額政權,平常根本碰不到。第二,庫存剩額這一支 116 列全對,這是公式第二項真正通過的考驗,比昨天的四天樣本強得多。

失手的 25 列全部落在「上限勝出」這一類,而且只涉及 443 檔券中的 6 檔:

CUSIP券持有量(百萬美元)實際 actual + outstanding(百萬美元)占持有量
912810QE1T 04.625 02/15/4031,431.24,06412.9%
912810QD3T 04.375 11/15/3931,194.09,95431.9%
91282CCB5T 01.625 05/15/3144,211.82,5005.7%
9128286T2T 02.375 05/15/2935,255.121,69061.5%
912828YB0T 01.625 08/15/2947,136.94,0008.5%
91282CBL4T 01.125 02/15/3134,861.62,5017.2%

以 912810QE1 在 10 月 1 日那列為例:上限是 28,288 百萬,庫存剩額 floor(31,431.2) − 17 = 31,414 百萬,min() 預測 28,288,但公布的 actualAvailToBorrow 只有 4,047 百萬。把 outstandingLoans 加回去,4,047 + 17 = 4,064,與 9 月 28 日(outstandingLoans = 0,actual = 4,064)是同一個數;9 月 29 日 4,046 + 18 = 4,064 也是。每一檔失手券各自有一個固定常數,換了 outstandingLoans 這個常數也不動。所以最合理的描述是公式多了第三項:actualAvailToBorrow = min(theoAvailToBorrow, X − outstandingLoans),其中 X 在 99.4% 的列等於 floor(somaHoldings),在這 6 檔券的某些日子等於一個小得多的數。

X 是什麼,今天只能推論、不能證實。官方 2008 年版條款說每日理論供給是持有量的 90%,「除非拍賣時 SOMA 保管帳戶裡的證券更少」(unless fewer securities are in the SOMA custody account at the time of auction)——這正是 min() 第二項的文字版;somaHoldings 是 SOMA 的總持有量,X 可能就是「拍賣當下實際在保管帳戶、可出借的那一部分」,當總持有量裡有一部分不在保管帳戶時,X 就比持有量小。這個解釋跟資料不矛盾,但資料裡沒有任何欄位可以直接驗證 X,所以只標為推論。另外 9128286T2 在 9 月 1 日到 3 日失手、之後 7 列都對,912810QE1 則是 9 月 23 日起才失手,說明 X 會隨時間變動,不是券的固定屬性。

四、outstandingLoans 的成因:官方文件的一句話,與全市場資料的三個吻合

昨天結論是「延展紀錄解釋不了 outstandingLoans,成因回到未知」。今天先把延展那邊擴大到全市場:9 月全月延展端點共 14 個操作日、37 筆紀錄、合計 15.63 億美元。更正昨天的數字:昨天寫 35 筆、13 個操作日,今天重新查詢是 37 筆、14 個操作日,昨天少算了 2 筆與 1 個操作日,結論的方向不變。對照 21 個操作日的 outstandingLoans 全市場加總:每天 136.2 億到 269.5 億美元,平均 201.5 億,21 天合計 4,230.9 億美元。延展總額只占 0.37%(15.63 ÷ 4,230.9),單日最大的延展(9 月 14 日,4.83 億)也只占當天 outstandingLoans 270 億美元的 1.8%。延展在全市場層級也解釋不了,昨天用兩檔券得出的更正,今天有了更寬的樣本支持。

然後找到官方文件對 outstandingLoans 的定義。紐約聯準銀行 2008 年 10 月版的 SOMA 證券出借條款寫道:「若借出的證券在中午拍賣時間之前尚未完成歸還,這些證券會被計為未還貸款(loans outstanding),納入限額計算」(If re-delivery of borrowed securities is not complete prior to the noon auction time, the securities will be tallied as loans outstanding for purposes of limit calculations)。依這個定義,outstandingLoans 不需要延展:前一天隔夜借出的券,到隔天中午 12 點拍賣開始時還沒還完的部分,就算「未還」。這跟 API 欄位 releaseTime 為 12:00、closeTime 為 12:15 的設計一致。

這個定義可以用資料檢驗,三個檢驗全部吻合:

  • 上界:逐檔券配對「前一操作日 parAmtAccepted」與「當日 outstandingLoans」,3,731 個配對中,未還金額超過前一天承作額的只有 10 個(0.27%),近乎恆成立。
  • 規模:21 個操作日,全市場當日 outstandingLoans 除以前一操作日承作總額,中位數 0.491,範圍 0.396 到 0.612。大約一半的前一天借券在隔天中午時還沒還完。
  • 金額效應:前一天承作額小於 5,000 萬美元的 1,617 個配對,未還占比 32.4%;5,000 萬到 2 億的 404 個配對,30.8%;2 億到 10 億的 544 個,54.6%;10 億以上的 195 個,52.3%。借得越大,隔天中午越不容易還完,方向符合「大額部位需要更多時間找券歸還」的直覺。

要保留的邊界有三個。其一,這份條款是 2008 年版,不是現行版:它寫最低投標費率 50 個基點、並寫「禁止延展」,而今天的資料最低費率是 5 個基點、且延展端點確實存在紀錄,表示規則已經演進;我引用的是「未完成歸還計為未還」這一條的語意,現行版是否沿用,資料吻合但文件沒有直接確認。其二,吻合只證明「定義與資料相容」,不證明每一筆都是這個原因,尤其是 10 個超過上界的配對沒有解釋(可能是延展、也可能是同一檔券的更早借款)。其三,為什麼歸還的完成比例大約是一半,資料裡沒有線索,只能說這是一個待解的經驗規律。

五、同一批資料的另一個副產品:承作不等於 min(申報, actual)

昨天前一篇驗證的規則是「承作 = min(申報, actualAvailToBorrow)」。今天對 4,174 列重驗,有 27 列(0.65%)承作額小於這個值。例如 9 月 28 日的 T 04.625 08/15/36:申報 30.50 億、承作 28.21 億、actual 91.26 億,被刪掉 2.29 億,而可借量根本沒有用完。官方文件給的候選解釋有兩個:單一交易商的投標限額(25% 的理論可借量,以及每檔 7.5 億、每日合計 40 億的絕對上限,這是 2008 年版數字,現行數字未查證),以及聯準會保留「拒絕可能助長市場控制的得標」的裁量權。資料看不出是哪一個,只能確認「拒絕不全是可借量不足造成的」這件事,占 0.65%,而且不是 outstandingLoans 這條線上的問題,所以今天先掛著。

🧠 記

今天最值得記住的,是「前一天的驗證通過」不等於「公式正確」,通過的樣本得先問有沒有鑑別力。 theoAvailToBorrow 的錯誤寫法在昨天的兩檔券上算出同一個數,所以驗證通過;換成 4,174 列,35.6% 的列馬上露餡。min() 公式也是同型:99.40% 的通過率看似很高,但這個數字裡有 3,962 列是上限勝出、116 列是庫存勝出,真正檢驗第二項的只有後者,而失手的 25 列揭露了第三項的存在。判斷樣本是否有鑑別力,最簡單的做法是問:如果公式是錯的,這批資料會不會看出來?

第二個要記的,是「找到文件」跟「資料吻合」是兩層證據,兩層都要有才算接近定論。 outstandingLoans 的定義今天在 2008 年條款裡找到一句話,三個資料檢驗(上界 99.73%、規模中位數 0.491、金額效應)都吻合,這比昨天純從 schema 推測強得多;但文件是十八年前的版本,吻合也只是相容,所以結論只能寫成「很可能是,且與延展無關」,不能寫成「已證實」。同時昨天的延展更正今天擴大樣本後依然成立,這是「更正後再驗證一次」該有的樣子。

邊界:這一切是在整理一個資料欄位的語意,不是在說任何市場訊號。 outstandingLoans 大約是前一天借券的一半,這是行政流程(歸還時間)的結果,不代表券源緊張或市場壓力,也不能拿來推論任何價格方向。第三項 X 的成因、10 個超過上界的配對、27 列被刪除的承作,都還是空格。

✍️ 實踐

用今天的全市場資料自己跑一次三個檢驗,時間約 20 分鐘。下載 https://markets.newyorkfed.org/api/seclending/all/results/details/search.json?startDate=2026-09-01&endDate=2026-10-02(約 1.2 MB),對 details 內每一列算 floor(0.9 × somaHoldings, 1,000,000),確認跟 theoAvailToBorrow 一致(應該 0 例外);再算 min(theoAvailToBorrow, floor(somaHoldings, 1,000,000) − outstandingLoans) 對 actualAvailToBorrow(應該 4,149 列對、25 列錯);最後挑一檔失手券(例如 912810QE1),把 actualAvailToBorrow + outstandingLoans 逐日列出來,確認是一條水平線 4,064 百萬。寫下一件今天還沒回答的事:6 檔失手券的 X 之後哪天會變回 floor(somaHoldings),留給明天的資料驗證。

🔗 延伸學習

💬 問 AI

我在追紐約聯準銀行 SOMA 證券出借 API 的微觀結構,純屬學習與研究,
請不要給任何投資建議、買賣建議或報酬預測。以下是我今天用 2026-09-01
到 10-01 全部 CUSIP(22 個操作日、4,174 列、443 檔券)驗算的結果,
請依「方法論 → 驗算 → 意義 → 邊界」回答,並在每個結論標明
「文章/文件明說的」「我用資料查證的」「我推論但未證實的」三類。
 
我的結果:
1. theoAvailToBorrow = floor(0.9 × somaHoldings, 100 萬美元),4,174 列零例外;
   我昨天寫成「先捨去再乘 0.9」,有 1,486 列(35.6%)差 100 萬,已更正。
2. actualAvailToBorrow = min(theoAvailToBorrow, floor(somaHoldings) − outstandingLoans)
   成立 4,149 列(99.40%);庫存剩額勝出的 116 列全對;
   25 列失手,全在「上限勝出」,涉及 6 檔券,這些券的
   actual + outstanding 對每一檔是常數(例如 4,064 百萬),
   推論有第三項 X(也許是保管帳戶中實際可出借的部分)。
3. 延展端點 9 月共 37 筆、15.63 億美元,只占全市場 outstandingLoans
   加總(約 4,231 億美元)的 0.37%,解釋不了 outstandingLoans。
4. 2008 年版條款寫「中午拍賣前未完成歸還者計為未還貸款」,
   資料吻合:3,731 個配對中只有 10 個超過前一天承作額,
   全市場未還占前一天承作額中位數 0.491。
 
請回答:
一、方法論:我怎麼判斷一個驗證樣本有沒有鑑別力?除了「如果公式錯了這批資料看得出來嗎」,
   還有哪些具體檢查可以事前做?
二、驗算:請檢查我的算術與分類(尤其 3,962 + 116 + 71 = 4,149、
   4,149 ÷ 4,174 = 99.40%),並指出我哪裡可能把相關當成因果。
   「未還占前一天承作額的比例隨承作額變大而升高」(32.4% → 54.6%)
   有哪些不同的解釋?
三、意義:min() 兩項各代表什麼政策考量?其他央行或清算機構的
   證券出借/流動性工具有沒有類似「上限與實際庫存取小」的結構?
四、邊界:我引用的是 2008 年舊版條款,現行規則已不同(最低費率 5 個基點、
   存在延展端點)。這個年代落差會怎麼限制我的結論?
   我還需要找哪些現行文件或資料才能把「很可能」升級成「已證實」?
 
要求:不確定就說不確定;不要用我沒提供的數字當作事實;
所有數字請讓我能回頭用原始資料複核。