← 返回编程题库
coding-capital-conservation-buffer-mda-factor中等免费版1000ms未尝试

资本留存缓冲:MDA 因子四分位表

Capital Conservation Buffer: MDA Factor Quartile Schedule

开始编码

实现 solution(cet1_ratio: float, minimum_cet1: float, conservation_buffer: float) -> float。资本管理台每日运行一道分配政策门控:给定当前 CET1 比率与监管"最低 + 缓冲"要求,返回最大可分配金额(MDA)因子——在 Basel III 资本留存缓冲(CCB)制度下,银行可以以分红、奖金、回购等形式分配出去的盈利占比上限。

输出由如下可观测公式定义:

  1. 缓冲占用buffer_occ = (cet1_ratio - minimum_cet1) / conservation_buffer。表示银行已经在最低要求之上累积了缓冲层宽度的多少比例,无量纲。
  2. 四分位表(内部断点左开右闭):
  • buffer_occ <= 0.00.0(资本不超过最低要求;全限制)
  • 0.0 < buffer_occ <= 0.250.0(第一四分位;全限制)
  • 0.25 < buffer_occ <= 0.500.20(第二四分位)
  • 0.50 < buffer_occ <= 0.750.40(第三四分位)
  • 0.75 < buffer_occ < 1.000.60(第四四分位)
  • buffer_occ >= 1.01.0(缓冲层已建满;无限制)

solution(0.060, 0.045, 0.025) 返回 0.40。该行 CET1 比率为 6.0%,最低要求 4.5%、留存缓冲 2.5%。缓冲占用 (0.060 - 0.045) / 0.025 = 0.60——落在第三四分位 (0.50, 0.75],因此 MDA 因子为 0.40。即:该行最多可分配 40% 的合资格盈利,其余 60% 必须留存以重建缓冲。

一个顶部边界算例:solution(0.070, 0.045, 0.025) 返回 1.0。CET1 比率正好等于 minimum + buffer = 0.045 + 0.025 = 0.070,缓冲占用恰为 1.0,无限制。

一个低于最低要求的算例:solution(0.030, 0.045, 0.025) 返回 0.0。该行 CET1 已跌破最低要求,缓冲占用 (0.030 - 0.045) / 0.025 = -0.6,落在 <= 0 分支——全限制。

边界cet1_ratio = minimum_cet1 时缓冲占用为 0.0,MDA 为 0.0(缓冲层尚未建立——全限制)。cet1_ratio = minimum_cet1 + 0.5 * conservation_buffer 时缓冲占用恰为 0.5,落在第二四分位的右闭区间 (0.25, 0.50],MDA 为 0.20cet1_ratio = minimum_cet1 + 1.5 * conservation_buffer 时缓冲占用为 1.5,MDA 为 1.0(无限制上限——超过 1.0 的额外缓冲不会让 MDA 超过 1.0)。本函数对约束区间内的任何输入都不抛异常。

实现细节由 stubs/stub.py 提供。

实践背景

Basel III 监管要求每家银行 CET1 资本不低于监管最低要求(标准规则下为 RWA 的 4.5%),并在最低要求之上额外计提资本留存缓冲(标准规则下为 RWA 的 2.5%)。当 CET1 比率落在缓冲区间内——介于"最低要求"与"最低要求 + 缓冲"之间——监管会限制银行通过分红、可自由裁量的奖金、回购等形式向外派发盈利的比例,剩余部分必须留存以重建缓冲。具体限制以一张分段常数的最大可分配金额因子表呈现:把缓冲层等分成四个四分位,自下而上的派发上限分别为 0.00.200.400.60;当缓冲层已经建满(buffer_occ >= 1.0)银行不再受限(MDA = 1.0);当 CET1 比率跌破最低要求时银行处于资本赤字、完全受限(MDA = 0.0)。本函数 solution(...) 输出的就是日度 MDA 因子,资本管理台会把它接到分红政策门控上——可分配盈利 = MDA 因子 × 合资格盈利——监管也会拿这个值与该行报送的 CET1 比率做核对。本函数刻意把几条概念约定显式化:缓冲占用必须以缓冲层宽度归一化(不是以最低要求或 CET1 比率归一化);四分位断点是 0.250.500.751.0(不是 0.200.400.600.80);MDA 取值是 0.00.200.400.601.0,且从 0.601.0 在缓冲顶部有一个非均匀跳变;内部断点右闭,顶部断点也右闭——这些正是工业资本计量管线和监管自查里最容易踩的方向性错误。整个计算是常数时间:一次减法、一次除法、一串比较。

约束条件

  • 0.0 <= cet1_ratio <= 0.50
  • 0.0 <= minimum_cet1 <= 0.20
  • 0.001 <= conservation_buffer <= 0.20
  • 输出为 float,取值集合 {0.0, 0.20, 0.40, 0.60, 1.0};浮点比较器使用 rel_tol=1e-9, abs_tol=1e-9

样例

Case 1 · statement-example: third quartile MDA 0.40

输入: [0.06,0.045,0.025]

期望: 0.4

buffer_occ = (0.060 - 0.045) / 0.025 = 0.60,落在第三四分位 (0.50, 0.75],MDA = 0.40。

Case 2 · statement-example: top boundary buffer fully met returns 1.0

输入: [0.07,0.045,0.025]

期望: 1

buffer_occ = (0.070 - 0.045) / 0.025 = 1.0,正好建满缓冲,无限制。

Case 3 · statement-example: below minimum returns 0.0

输入: [0.03,0.045,0.025]

期望: 0

buffer_occ = (0.030 - 0.045) / 0.025 = -0.6,跌破最低要求,全限制。

Case 4 · visible: mid second quartile MDA 0.20

输入: [0.054,0.045,0.025]

期望: 0.2

buffer_occ = (0.054 - 0.045) / 0.025 = 0.36,落在 (0.25, 0.50],MDA = 0.20。

最近提交

还没有提交记录。

编码区

实现 solution(...)。本地运行当前支持 Python 可见样例;服务端提交会运行可见样例和隐藏测试。

加载编辑器...
计时0:00

默认展示公开样例。点击「运行样例」后会在这里显示实际输出;点击「提交评测」会进入隐藏测试。

Case 1 · statement-example: third quartile MDA 0.40

输入: [0.06,0.045,0.025]

期望: 0.4

buffer_occ = (0.060 - 0.045) / 0.025 = 0.60,落在第三四分位 (0.50, 0.75],MDA = 0.40。

Case 2 · statement-example: top boundary buffer fully met returns 1.0

输入: [0.07,0.045,0.025]

期望: 1

buffer_occ = (0.070 - 0.045) / 0.025 = 1.0,正好建满缓冲,无限制。

Case 3 · statement-example: below minimum returns 0.0

输入: [0.03,0.045,0.025]

期望: 0

buffer_occ = (0.030 - 0.045) / 0.025 = -0.6,跌破最低要求,全限制。

Case 4 · visible: mid second quartile MDA 0.20

输入: [0.054,0.045,0.025]

期望: 0.2

buffer_occ = (0.054 - 0.045) / 0.025 = 0.36,落在 (0.25, 0.50],MDA = 0.20。