/structured_fund_monte_carlo

An experiment of using Monte Carlo simulation for Chinese A/B Structured Fund valuation.

Primary LanguagePythonCreative Commons Zero v1.0 UniversalCC0-1.0

A类分级基金蒙特卡罗理论估值实验

简介

众所周知影响A类的估值十分复杂,传统来说是以隐含收益率为主流价值参考方式。隐含收益率本身是个非常有价值的指标,它代表的是预期的年定折收益率。但是,我相信市场效率本身是无法完全解释5.33%到6.59%不等的同质化A类基金隐含收益率的,不定期折算也会大幅影响到A类的估值。

在本项目的模型下,我们引入一个标准化A类基金的概念:

定义:标准化A类基金

一个标准化A类基金从1元净值起始,净值不间断以年化 i + m 的利率增长(i为浮动一年定存利率,m为固定超额利率),永续存在。同时具有以下特征:

  • 与对应B类基金5:5配对,A净值为A,B净值为B,母基金净值为M
  • 在每年的特定日期出现一次定折,把超过1元净值部分分配
  • 在母基金净值超过 UAT 元时,参与上折,与定折方式相同
  • 在B类基金净值低于 DAT 元时,参与下折,返还 A-B 元,同时净值回归为 1 元,份额变成原来的 B

同时我们做一些必要的假设:

  • 标准化A类基金的内在价值等于其某一时间点后所有未来折现现金流的和,与二级市场价格无关。理论上说,A类基金的本金应该是通过永续期内无限次数的下折拿回来的。
  • 在折算时,标准化母基金可以无波动无成本赎回
  • 投资者的折现率,即预期收益率为 r
  • 投资者没有风险偏好
  • 标准化母基金的净值成对数正态分布(log-normal distribution),平均年化收益率等于平均市场收益率 rm,设标准差为 v,可以使用历史波幅或母基金跟踪指数的期权市场引申波幅来模拟。分红包含在 rm 内。
  • 除了三种折算,没有其他利益分配方式
  • 金融模型都有的假设:没有交易成本(包括管理费在内),没有套利机会,没有税

影响标准化A类基金估值的因素

根据以上定义,标准化A类基金在任何时间点必然有一个唯一的理论价值 P,这个价值是以下变量的函数:

  • A: A类基金的净值
  • M:母基金的净值,同时B可以通过M*2-A来获得
  • i:约定收益率浮动部分,即一年定存
  • m:约定收益率固定部分,即+3, +3.5, +4等
  • UAT:上折母基金净值阈值,如1.5元
  • DAT:下折B类基金净值阈值,如0.25元
  • r:投资者的折现率或预期收益率,经济学中 r 应等于投资者的持有现金的机会成本。
  • rm: 股票市场平均期望收益率
  • v:母基金净值波动的标准差,约等于引申波幅约等于历史波幅
  • d:一年中的日期,决定着离下一次定折的距离

其实我们已经可以看到,A类基金的估值比期权还要复杂的多,期权估值要考虑标的价、行权价、波动率、分红率、无风险利率和剩余时间这 6 个因素,而A类基金有 10 个因素都会直接影响到估值。如果你引入投资者风险偏好的话,变量会更多。

这意味着直接推算出一个估值公式出来是不容易的(虽然我相信会有牛人可以做出来),但是通过 Monte Carlo 模拟,我们可以模拟出一个标准化A类基金在未来50年的现金流(基本可以把全部本金折出来,折现后就可以忽略不计了)情况。每一种情况都是随机生成的,如果有100种情况,这些情况的平均折现现金流之和就是反映这个A类基金的价值一个非常可靠的指标了。

默认参数

以下为simulation.rb程序中的默认参数,也是实验结果的基础参数:

  • A、B和母基金净值都为1.00
  • 一年定存利率:2.50%
  • 约定收益率差额:+3.00%
  • 上折阈值:母基金1.50
  • 下折阈值:B净值0.25
  • 折现率:8%年化
  • 跟踪指数长期平均收益率:10%年化
  • 跟踪指数长期波动率:30%年化
  • 持有期限:50年(之后剩下的份额价值归零处理)

运行实验

安装运行依赖

通过 bundle install 可以安装所有依赖的 RubyGems。

实验程序

本项目自带五个实验程序:

  • volatility.rb: 波动率分析
  • market_return.rb: 市场回报率分析
  • m_nav.rb: 母基金净值分析
  • discount_rate.rb: 折现率分析
  • uat.rb: 上折阈值分析

注意:由于涉及到长达50年的逐日股票行情模拟,以及默认100的样本大小,实验程序的计算量很大。建议使用高性能计算机进行计算。

如果你不想自己计算,可以参考 results/ 目录里面的结果。