Basel III 杠杆率:表外项的信用转换系数(CCF)合计
Basel III Leverage Ratio: Credit Conversion Factors over Off-Balance Items
开始编码实现 solution(tier1_capital: float, on_balance_exposure: float, off_balance_gross: list[float], ccf: list[float], derivative_potential_exposure: float, repo_exposure: float) -> float。监管报送组每日需要 Basel III 杠杆率。tier1_capital 是已扣减后的 Tier-1(带符号,美元);on_balance_exposure 是表内敞口合计(美元);off_balance_gross 与 ccf 是等长并列数组,分别给出每个表外项的毛名义与对应的 Credit Conversion Factor,CCF 取值范围 [0.0, 1.0];derivative_potential_exposure 是衍生品潜在未来敞口(PFE);repo_exposure 是证券融资类交易(SFT / 回购)敞口。
输出 ratio 由如下可观测公式定义:
- CCF 后表外:
off_balance_total = sum_i off_balance_gross[i] * ccf[i]。逐项乘积再求和。始终非负。 - 总敞口度量:
total_exposure = on_balance_exposure + off_balance_total + derivative_potential_exposure + repo_exposure。四段之和。始终非负。 - 最终杠杆率:
total_exposure > 0时ratio = tier1_capital / total_exposure;total_exposure == 0且tier1_capital > 0返回float('inf');total_exposure == 0且tier1_capital < 0返回float('-inf');total_exposure == 0且tier1_capital == 0返回float('nan')。
例
solution(60.0, 900.0, [200.0, 100.0], [0.5, 1.0], 50.0, 50.0) 返回 0.05。该行 Tier-1 资本为 60、表内敞口为 900、两个表外项的毛名义为 200 与 100,对应 CCF 为 0.5(如中等期限承诺)与 1.0(直接信用替代品),衍生品 PFE 为 50,回购敞口为 50。CCF 后表外为 200*0.5 + 100*1.0 = 200。总敞口为 900 + 200 + 50 + 50 = 1200。ratio 为 60 / 1200 = 0.05——刚好踩在 5% 的 G-SIB 底线上,远高于 3% 基准。
一个CCF = 0 让某个表外项归零的算例:solution(30.0, 500.0, [400.0, 200.0], [0.0, 0.5], 0.0, 0.0) 返回 30.0 / (500.0 + 0.0*400.0 + 0.5*200.0 + 0.0 + 0.0) = 30.0 / 600.0 = 0.05。第一个表外项的 CCF 为 0.0(如 Basel II/III 下无条件可撤销承诺),对总敞口贡献为 0;只有第二项的 200 * 0.5 = 100 进入表外桶。
一个 Tier-1 为负的算例:solution(-10.0, 100.0, [], [], 0.0, 0.0) 返回 -0.1。Tier-1 资本为 -10(极度承压信号——例如扣减项已经超过毛 CET1 且 AT1 也补不回正);总敞口为 100;ratio 为 -0.1。输出带符号值,不要钳到 0。
边界:off_balance_gross/ccf 为空,且表内、PFE、回购全为 0、Tier-1 为正时返回 float('inf');全空(Tier-1 = 0、所有敞口都为 0)返回 float('nan')。总敞口为 0 而 Tier-1 为负时返回 float('-inf')。本函数对约束区间内的任何输入都不抛异常;inf、-inf、nan 哨兵就是总敞口为 0 退化情形下的合同输出。Basel III 杠杆率底线为 3%(部分司法辖区对 G-SIB 提到 5%);跌穿底线时银行必须采取资本动作。
实现细节由 stubs/stub.py 提供。
实践背景
Basel III 监管要求每家银行杠杆率不低于 3%(部分司法辖区对全球系统重要性银行 G-SIB 提到 5%)。该比率衡量 Tier-1 监管资本对非风险加权的总敞口度量:表内资产,加 CCF 后的表外项,加衍生品潜在未来敞口,加证券融资类交易(SFT / 回购)。杠杆率作为风险加权 Tier-1 ratio 的后备线——它不奖励低风险权重资产构造,所以那些靠堆低权重资产去美化风险加权 ratio 的银行,仍要在原始敞口上踩过 3% 的底线。本函数 solution(...) 输出的就是日度数字,会接到银行的杠杆率看板上,用于实时监控离 3% 最低线的距离。函数刻意把工业资本计量管线里最常见的方向性错误显式化:CCF 只作用于表外项(表内已是面值,衍生品 PFE 与回购各自有独立的转换方法,把所有四段都套上 CCF 就是隐式重复贴现);表外合计是逐项乘积之和,不是和与和的乘积;总敞口是四段之和(漏掉衍生品 PFE 或回购就是典型的隐式低报);ratio 方向把资本放分子(颠倒会得到约 30 倍杠杆而不是 3% 比率);以及 Tier-1 是带符号量、负值会原样穿透到 ratio 上。一遍线性扫描(一段对表外项,O(N))加三次常量加法、一次除法,就是该日度合计的标准模式。
约束条件
- -1e9 <= tier1_capital <= 1e9(带符号;极端承压时可为负)
- 0.0 <= on_balance_exposure <= 1e10
- 0 <= len(off_balance_gross) == len(ccf) <= 100
- 0.0 <= off_balance_gross[i] <= 1e9 且 0.0 <= ccf[i] <= 1.0
- 0.0 <= derivative_potential_exposure <= 1e9 且 0.0 <= repo_exposure <= 1e9
- 输出为带符号 float(tier1_capital 为负时可为负)或 float('inf')(总敞口为 0 且 Tier-1 > 0)或 float('-inf')(总敞口为 0 且 Tier-1 < 0)或 float('nan')(总敞口为 0 且 Tier-1 == 0);浮点比较器使用 rel_tol=1e-9, abs_tol=1e-9
样例
Case 1 · statement-example: G-SIB 5 percent ratio
输入: [60,900,[200,100],[0.5,1],50,50]
期望: 0.05
CCF 后表外 = 200*0.5 + 100*1.0 = 200;总敞口 = 900 + 200 + 50 + 50 = 1200;ratio = 60 / 1200 = 0.05。
Case 2 · statement-example: CCF zero kills first item
输入: [30,500,[400,200],[0,0.5],0,0]
期望: 0.05
第一项 CCF=0 贡献为 0;表外仅来自 200*0.5 = 100;总敞口 = 500 + 100 = 600;ratio = 30 / 600 = 0.05。
Case 3 · statement-example: negative Tier-1 yields negative ratio
输入: [-10,100,[],[],0,0]
期望: -0.1
Tier-1 = -10、总敞口 = 100;ratio = -10 / 100 = -0.1。带符号输出,不钳零。
Case 4 · visible: empty everything except positive Tier-1 returns inf
输入: [50,0,[],[],0,0]
期望: "Infinity"
总敞口 = 0 且 Tier-1 = 50 > 0,返回 float('inf')。
Case 5 · visible: all zero everywhere returns nan
输入: [0,0,[],[],0,0]
期望: "NaN"
Tier-1 = 0 且总敞口 = 0,返回 float('nan')。
Case 6 · visible: zero exposure with negative Tier-1 returns -inf
输入: [-5,0,[],[],0,0]
期望: "-Infinity"
总敞口 = 0 且 Tier-1 < 0,返回 float('-inf')。
最近提交
还没有提交记录。
编码区
实现 solution(...)。本地运行当前支持 Python 可见样例;服务端提交会运行可见样例和隐藏测试。
默认展示公开样例。点击「运行样例」后会在这里显示实际输出;点击「提交评测」会进入隐藏测试。
Case 1 · statement-example: G-SIB 5 percent ratio
输入: [60,900,[200,100],[0.5,1],50,50]
期望: 0.05
CCF 后表外 = 200*0.5 + 100*1.0 = 200;总敞口 = 900 + 200 + 50 + 50 = 1200;ratio = 60 / 1200 = 0.05。
Case 2 · statement-example: CCF zero kills first item
输入: [30,500,[400,200],[0,0.5],0,0]
期望: 0.05
第一项 CCF=0 贡献为 0;表外仅来自 200*0.5 = 100;总敞口 = 500 + 100 = 600;ratio = 30 / 600 = 0.05。
Case 3 · statement-example: negative Tier-1 yields negative ratio
输入: [-10,100,[],[],0,0]
期望: -0.1
Tier-1 = -10、总敞口 = 100;ratio = -10 / 100 = -0.1。带符号输出,不钳零。
Case 4 · visible: empty everything except positive Tier-1 returns inf
输入: [50,0,[],[],0,0]
期望: "Infinity"
总敞口 = 0 且 Tier-1 = 50 > 0,返回 float('inf')。
Case 5 · visible: all zero everywhere returns nan
输入: [0,0,[],[],0,0]
期望: "NaN"
Tier-1 = 0 且总敞口 = 0,返回 float('nan')。
Case 6 · visible: zero exposure with negative Tier-1 returns -inf
输入: [-5,0,[],[],0,0]
期望: "-Infinity"
总敞口 = 0 且 Tier-1 < 0,返回 float('-inf')。