16.3. 模拟程序结构设计

这部分是设计初稿, 具体实现请查看doxygen从源码生成的文档.

16.3.1. Monte Carlo模拟程序设计

16.3.1.1. 主控制类设计

数据:

  1. 分级A数列, 保存一系列分级A, 以及其模拟结果数据. 具体实现是一个指针数列, 可以用上C++的多态性;
  2. 系统参数:
    1. 模拟次数 \(C\),
    2. 指数个数 \(N\),
    3. 基金数 \(N_0\),
    4. 个股个数 \(m\),
    5. 因子维度 \(n\),
    6. 折现率,
    7. 定存利率,
    8. 标签,
    9. 日期,
    10. 最大模拟时间长度.
  3. 配置数据:
    1. \(W\in \mathcal{R}^{N\times m}\) 指数权重矩阵,
    2. \(X\in \mathcal{R}^{m\times n}\) 暴露矩阵,
    3. \(\Sigma \in \mathcal{R}^{m\times m}\) 对角矩阵, 模型中不可预测部分的相关矩阵,
    4. \(\Omega\in \mathcal{R}^{n\times n}\) 因子回报 \(\vec{\beta}\) 之间的相关矩阵,
    5. \(\vec{\mu}\) 因子回报的预期收益, 为简单起见直接取 \(0\).

函数:

  1. 参数设置函数, 包括从配置文件读取系统参数和配置数据;
  2. 迭代模拟路径的函数, 每迭代一步我们需要:
    1. 生成满足条件的随机向量传给各个分级A对象;
    2. 执行各个分级A的迭代步;
  3. 计算总体统计量的函数(统计量都留给MATLAB算):
    1. 每个基金的平均第一次下折日;
    2. 第一向上折算日频数分布;
    3. 第一向下折算日频数分布;
    4. 折算日截尾均值;
    5. 折算日25%分位数, 50%分位数, 75%分位数, 与90%分位数;
    6. A基金优先份额久期分析;
    7. 计算隐含收益率&理论定价;
  4. 以合适的格式输出函数, 输出各种数据, 以及统计信息。可以利用MATLAB, R, Python等软件二次处理这些数据, 画图展示.

16.3.1.2. 分级A虚类设计

考虑到不同的分级A有不同的上下折算规则, 还有不同的定期结算日期. 需要重载这些功能, 我们设计一个虚类做一个做分级A的类模板.

16.3.1.2.1. 数据与参数

模型参数(根据不同分级基金具体参数不局限于下列参数):

  1. 母基金净值,
  2. 基金所跟踪的指数,
  3. 基金各项费用,
  4. 进取份额的杠杆倍数,
  5. A份的约定收益率,
  6. 母基金赎回成本.

数据需要创建一个类来保存一次模拟路径中需要保留下来供后续分析的数据. 模拟路径数据类, 包含以下数据:

  1. 上折日期数列,
  2. 下折日期数列,
  3. 现金流数列,
  4. 修正久期,
  5. 理论价格,
  6. 隐含收益率.

对于一个虚类中需要保存以下数据:

  1. 模拟路径数据类数列, 保存多个模拟路径,
  2. 模拟过程中临时保存的母基金价格, A份和B份价格.

16.3.1.2.2. 函数与功能

  1. 固定函数, 不需重载, 重复使用:
    1. 向前迭代模拟路径: 向前迭代一步模拟路径并保存相关数据.
  2. 虚函数, 供继承类根据具体规则重载:
    1. 上下折函数
    2. 上下折条件
    3. 定期折算函数
    4. 多次下折后终止条件

16.3.1.3. 其他辅助类设计

16.3.1.3.1. 股票类

数据:

  1. 编号,
  2. 暴露矩阵,
  3. 系统外风险.

16.3.1.3.2. 指数类

数据:

  1. 指数编号.
  2. 指数值.
  3. 指数权重.

16.3.1.3.3. 路径类

数据: 1. 上折日期数列. 2. 下折日期数列. 3. 现金流数列.