# DLOM 参数快速参考表

> **更新日期**: 2025-01-14  **版本**: 2.0

---

## 参数总览表

| 序号 | 参数 | 符号 | 类型 | 来源 | 默认值/说明 |
|------|------|------|------|------|------------|
| 1 | 禁售期 | T | 输入 | 用户 | 3.0 年 |
| 2 | 无风险利率 | r | 输入 | 用户 | 1.8% |
| 3 | 收盘价 | S | 获取 | THS API | `ths_close_price_stock` |
| 4 | 股息率 | q | 获取 | THS API | `ths_dividend_income_rate_stock` (智能4期查询) |
| 5 | 波动率 | σ | 获取 | THS API | `ths_volatility_annual_stock` (3年) |
| 6 | 执行价 | X | 计算 | 公式 | X = S × (1+r)^T |
| 7 | d1 | - | 计算 | 公式 | [ln(S/X) + (r-q+0.5σ²)T] / (σ√T) |
| 8 | d2 | - | 计算 | 公式 | d1 - σ√T |
| 9 | N(-d1) | - | 计算 | 正态CDF | Abramowitz & Stegun 算法 |
| 10 | N(-d2) | - | 计算 | 正态CDF | Abramowitz & Stegun 算法 |
| 11 | 期权价格 | P | 计算 | 公式 | X·e^(-rT)·N(-d2) - S·e^(-qT)·N(-d1) |
| 12 | 流动性折扣 | DLOM | 结果 | 公式 | (P / S) × 100% |

---

## 数据流向图

```
┌──────────────┐
│ 用户输入参数  │
│  T, r       │
└──────┬───────┘
       │
       ↓
┌────────────────────────────────────────────┐
│  THS API 并行获取 (3类数据)                │
│  ┌──────┬─────────────────┬──────────┐    │
│  │ S    │ q (4期查询)     │ σ (3年)  │    │
│  │      │ 智能平均值计算   │          │    │
│  └──────┴─────────────────┴──────────┘    │
└──────────────┬─────────────────────────────┘
               │
               ↓
       ┌───────────────────┐
       │ 检查可比公司哈希   │
       │ 数据新鲜度验证     │
       └───────┬───────────┘
               │
        ┌──────┴──────┐
        │             │
    哈希匹配      哈希不匹配
        │             │
        ↓             ↓
   ┌────────┐    ┌────────────┐
   │加载缓存 │    │重新计算    │
   └────────┘    │X = S(1+r)^T│
                 └──────┬─────┘
                        │
                        ↓
             ┌──────────────────────┐
             │ Black-Scholes 计算   │
             │  d1, d2, N(-d1), ... │
             └──────────┬───────────┘
                        │
                        ↓
                  ┌──────────┐
                  │ 期权价格 P│
                  └─────┬────┘
                        │
                        ↓
                   ┌────────┐
                   │ DLOM % │
                   └────┬───┘
                        │
                        ↓
                ┌───────────────┐
                │ 保存到数据库   │
                │ (含哈希验证)  │
                └───────────────┘
```

---

## 核心公式速查

### 1. 执行价

```math
X = S × (1 + r)^T
```

### 2. Black-Scholes 参数

```math
d1 = [ln(S/X) + (r - q + 0.5σ²)T] / (σ√T)

d2 = d1 - σ√T
```

### 3. 看跌期权价格

```math
P = X·e^(-rT)·N(-d2) - S·e^(-qT)·N(-d1)
```

### 4. 流动性折扣率

```math
DLOM = (P / S) × 100%
```

---

## THS API （同花顺数据）调用速查

### 收盘价 (S)

```typescript
THS_BD('600000.SH', 'ths_close_price_stock', '2024-10-11,0')
```

**参数**: `股票代码, 指标, 日期+周期`

---

### 股息率 (q) - 智能4期查询

**查询策略**：总是查询4期数据，根据估值日月份智能选择计算方式

#### 查询阶段（总是查询4期）

```typescript
// 1. 估值日（无论何时都查询）
THS_BD('600000.SH', 'ths_dividend_income_rate_stock', '20241011')

// 2. 去年年末
THS_BD('600000.SH', 'ths_dividend_income_rate_stock', '20231231')

// 3. 前年年末
THS_BD('600000.SH', 'ths_dividend_income_rate_stock', '20221231')

// 4. 大前年年末
THS_BD('600000.SH', 'ths_dividend_income_rate_stock', '20211231')
```

#### 计算阶段（根据估值日月份选择）

##### 场景1：估值日为12月份

- 使用全部4期数据计算平均值
- 计算公式：`(估值日 + 去年年末 + 前年年末 + 大前年年末) / 4`
- 理由：12月数据与年末数据时间相近，可直接参与平均

##### 场景2：估值日非12月份

- 仅使用前3年年末数据计算平均值
- 计算公式：`(去年年末 + 前年年末 + 大前年年末) / 3`
- 理由：排除估值日数据，避免半年度/季度数据干扰年度平均

#### 数据处理规则

**值处理**：

- 有效数值：直接使用
- null/空值/无效值：视为 **0%**（不是N/A）
- 允许全部为0：返回0%股息率
- 自动去重：不同期查询到的相同值只计算一次

**计算示例**：

```javascript
// 示例1：估值日为2024-12-15（12月份）
查询结果：[2.5%, 2.3%, 2.1%, 2.0%]
计算：(2.5 + 2.3 + 2.1 + 2.0) / 4 = 2.225%

// 示例2：估值日为2024-06-30（6月份）
查询结果：[1.5%, 2.3%, 2.1%, 2.0%]
计算：(2.3 + 2.1 + 2.0) / 3 = 2.133%  // 排除1.5%

// 示例3：部分无效值（估值日为3月份）
查询结果：[null, 2.5%, null, 2.1%]
处理为：[0, 2.5%, 0, 2.1%]
计算：(2.5 + 0 + 2.1) / 3 = 1.533%  // 排除估值日的0

// 示例4：全部为0（估值日为6月份）
查询结果：[0%, 0%, 0%, 0%]
计算：(0 + 0 + 0) / 3 = 0%  // 显示0%，不显示N/A
```

---

### 波动率 (σ) - 3年数据

```typescript
THS_BD('600000.SH', 'ths_volatility_annual_stock', '20211011,20241011,3,2')
```

**参数**:

- `20211011`: 开始日期 (估值日-3年)
- `20241011`: 结束日期 (估值日)
- `3`: 月度周期
- `2`: 对数收益率法

---

## 计算示例 (简化版)

**假设**:

- S = 100元, r = 1.8%, T = 3年
- q = 2%, σ = 30%

**步骤**:

1. **执行价**: X = 100 × (1.018)³ ≈ 105.51元

2. **d1 和 d2**:
   - d1 ≈ 0.124
   - d2 ≈ -0.396

3. **期权价格**: P ≈ 15.2元

4. **折扣率**: DLOM = 15.2 / 100 × 100% = **15.2%**

---

## 常见参数取值范围

| 参数 | 最小值 | 典型值 | 最大值 | 备注 |
|------|-------|--------|--------|------|
| T (年) | 0.5 | 1-3 | 10 | IPO常见1-3年 |
| r (%) | 0 | 1.5-2.5 | 5 | 参考国债利率 |
| q (%) | 0 | 1-3 | 8 | A股平均约2% |
| σ (%) | 10 | 25-35 | 80 | A股典型30% |
| DLOM (%) | 5 | 15-25 | 40 | 一般不超过35% |



## 关键注意事项

### 数据单位转换

- **API返回**: 百分比 (例: 30)
- **计算使用**: 小数 (例: 0.30)
- **转换**: 除以 100

### 股息率平均值计算逻辑

**查询策略（总是4期）**：

- 总是查询4期：估值日 + 前3年年末
- null/空值视为0%（不排除，参与计算）
- 允许全部为0%的情况

**计算逻辑（根据估值日月份）**：

- **12月份估值日**：使用全部4期数据平均
- **非12月份估值日**：仅使用前3年年末数据平均（排除估值日当期）

### 统计处理（最终折扣率）

- 计算每只股票的折扣率后统计平均值和中位数
- **排除规则**：仅排除 null 和计算失败的数据（0值参与统计）
- **默认使用中位数**（减少异常值影响）
- 如果所有折扣率都为0，则最终结果为0%

### 计算结果持久化与缓存

**数据新鲜度验证**：

- 使用可比公司哈希（DJB2算法）检测变更
- 可比公司未变更时直接使用缓存结果
- 可比公司变更时自动重新计算并覆盖旧数据

**持久化内容**：

- 计算参数：禁售期、无风险利率
- 统计结果：平均折扣率、中位数折扣率
- 详细数据：每只股票的完整计算过程
- 元数据：可比公司哈希、计算时间、版本号

**加载优先级**：

1. 检查项目ID和估值日ID是否匹配
2. 验证可比公司哈希是否一致
3. 哈希匹配→加载缓存数据
4. 哈希不匹配→重新计算并保存
