2. 计算存货风险敞口
任务目标
作为做市商,你持有一定数量的证券存货。本案例要求:计算当前存货的市场价值,并评估当市场价格发生变动时,存货价值的变化幅度(即风险敞口)。核心输出为存货市值与价格敏感度(Delta)。
实现方案
采用线性敏感度模型:存货市值 = Σ(持仓数量 × 当前价格)。价格敏感度用Delta表示,即价格每变动1元时存货价值的变动量,等于持仓数量之和(不考虑二阶效应)。为便于观察不同价格情景下的敞口,代码同时计算价格上下波动1%时的市值变化。
关键完整代码
import json
from typing import Dict, List
# ========== 输入数据:做市商当前存货 ==========
# 格式: [{"symbol": "代码", "quantity": 持仓数量, "price": 当前市价}]
inventory = [
{"symbol": "600519", "quantity": 200, "price": 1685.00},
{"symbol": "000858", "quantity": 1500, "price": 142.30},
{"symbol": "300750", "quantity": 800, "price": 189.60},
]
# ========== 核心计算逻辑 ==========
def calc_inventory_exposure(inv: List[Dict]) -> Dict:
"""
计算存货市值、Delta敞口及1%价格波动下的损益。
返回结构化结果,便于验证。
"""
total_value = 0.0
total_delta = 0 # 价格每变动1元,存货价值的变动量(股数合计)
details = []
for item in inv:
sym = item["symbol"]
qty = item["quantity"]
price = item["price"]
mkt_val = qty * price
total_value += mkt_val
total_delta += qty
details.append({
"symbol": sym,
"quantity": qty,
"price": price,
"market_value": round(mkt_val, 2)
})
# 1% 价格波动情景
up_1pct = total_value * 0.01
down_1pct = -total_value * 0.01
return {
"inventory_details": details,
"total_market_value": round(total_value, 2),
"delta_per_1yuan": total_delta, # 价格变动1元的敞口
"delta_per_1pct_up": round(up_1pct, 2), # 价格上涨1%的损益
"delta_per_1pct_down": round(down_1pct, 2) # 价格下跌1%的损益
}
# ========== 执行与输出 ==========
if __name__ == "__main__":
result = calc_inventory_exposure(inventory)
print(json.dumps(result, ensure_ascii=False, indent=2))
运行方式
python inventory_exposure.py
无需安装第三方库,Python 3.6+ 即可运行。
验证方法与通过条件
运行后观察输出,满足以下条件即判定通过:
- 市值计算正确:手工核对第一行,200 × 1685.00 = 337,000.00,输出中该symbol的market_value应与此一致;
- 汇总一致:total_market_value 等于三行market_value之和;
- Delta正确:delta_per_1yuan = 200 + 1500 + 800 = 2500,即价格整体上涨1元时存货增值2500元;
- 1%情景正确:delta_per_1pct_up = total_market_value × 0.01,且为正数;delta_per_1pct_down为其相反数。
若以上数值与手工计算结果一致,说明存货风险敞口计算逻辑正确。
预期输出(与代码逻辑严格一致)
{
"inventory_details": [
{"symbol": "600519", "quantity": 200, "price": 1685.0, "market_value": 337000.0},
{"symbol": "000858", "quantity": 1500, "price": 142.3, "market_value": 213450.0},
{"symbol": "300750", "quantity": 800, "price": 189.6, "market_value": 151680.0}
],
"total_market_value": 702130.0,
"delta_per_1yuan": 2500,
"delta_per_1pct_up": 7021.3,
"delta_per_1pct_down": -7021.3
}
风险敞口解读
当前存货总市值约70.2万元。Delta为2500股,意味着若所有持仓价格同步上涨1元,存货价值增加2500元;若下跌1元,则损失2500元。1%涨跌情景下,市值波动约±7021元。该数值即为做市商当前面临的线性存货风险敞口,可用于设定持仓限额或对冲决策参考。