|
在给金融产品定价 (Pricing) 时, 人们经常使用二进制格点 (Binary Lattice) 来描述某一市场参数的变化, 这参数通常是某种基准利率. 人们假定在每一点有两种可能, 向上或向下的几率各50%. 涨(跌)幅由使用的利率模型决定. 第一个月是起始点, 由于有上下两种可能, 第二个月有两个可能点. 每一个点又分别有向上和向下两种可能. 但我们可以调整涨(跌)幅使”¯”和”¯”到达同一点, 于是第三个月就有三个点. 到第 N 个月就有 N 个点. 从原点到达这 N 个点共有 2**(N-1) 条路径, 每条路径发生的几率是相等的. 人们希望这些路径的总和能代表市场的完整走势. 如果N不大, 把产品相应于每条路径的价格计算出来, 然后求平均, 精确度应该是不错的. 但金融产品要有好几年的现金流动(Cashflow), 对于30年的房屋贷款, 总的路径数是个天文数字 (100多位数). 于是人们就用各种各样的方法取样, 采用的路径一般是几百到上千条. 对于 100 多位数的天文数字, 这连沧海一粟都谈不上. 人们只能指望自己所选取的路径有”代表性”. Tom Ho 于 1992 年提出了一种全新的方法, 把这 100 多位数分成约 30 万组, 然后每一组用一条”平均” 路径来代表该组所有路径的平均值, 这条”平均” 路径发生的几率就是该组所有路径的几率之和, 正比于路径数. 分组方法简述如下. 他将 12, 36, 60, 84, 120, 240, 360 处的点分成 3, 5, 7, 9, 11, 13, 15 组, 他把这些特殊月份成为 Gate. 分组规则如下. Gate 12 处共 12 个点, 上中下 3 组每组 4 个点. Gate 36 处中间 12 个点还是同样 3 组, 上下各多出 12 点, 成为两个组. 就是说每个Gate 中间的点和前一Gate 分组相同. 上下多出的点成为两个新的组. 这些代表点总共有 3X5X7X9X11X13X15 = 约200万条代表路径将其连接起来. 在这200万条内, 有许多是空的,即无法由2**359条路径中的任一条到达, 所以几率为零. 几率不为零的路径约30万条. Ho 进一步简化, 每一点往前时只能持平或上下仅一格, 于是总共只有3**7 = 2,187条. 每条代表路径的几率即所属所有实际点的连接路径数. 由于Ho 只选取了30 万条中的一部分, 2,187 条路径的几率相加是小于一的, 我们还要将它们归一. 他通过一些例子显示, 选用几率最大的269条, 价格误差已在0.01%以下. Ho 将该方法称为Linear Path Space (LPS). 论文发表后, 纽约市立大学的一位经济学副教授和某金融公司的一位主管在同一杂志发表了一篇更正性质的文章, 一方面抽象肯定, 说是该方法很有价值, 是里程碑. 另一方面具体否定, 说具体数值计算全部错了. 他们同时发表了自己的计算结果, 说他们的计算非常简单明了, 不可能错. Ho 在创立 LPS 的几乎同时, 就让手下人将此写进了公司的软件. 现在看到这篇论文, 确实有点慌. 那篇论文说是”简单明了”, 其实并没简单到可让Ho 服输的程度. 但Ho 和他的助手也无法从那文章中(程序自然不在内)找出错误. 我进公司后, 有一次从老板那儿知道了此事, 就告诉他, 这属于排列组合问题, 我是这方面有国际声誉的专家, 曾解出过一些世界级别的难题. 于是老板把两篇论文都给了我, 说如果做出来, 即使大老板错, 他也会很高兴. 我看了论文, 发现两人都采用了随机行走 (Random Walk) 方法,其中唯一的数学概念就是阶乘, 但要将 2,187 组每组7 个代表点之间的连接方法不遗漏不重复地数一遍, 就需要相当的功力. 另外, 即使今天, 世界上最大的计算机也不可能储存100多位的整数, 大部分的 CPU 是用来把这些巨大的数字分解储存, 以后再合成 当时Ho 的助手用386 机器算了大约72 小时. 副教授化了多长时间, 我无法知道, 但也在这个量级是毫无疑问的. 我显然不能重复他们的老路, 这样繁复的计算, 到最后自己都很难相信答案的正确性. 随机行走在;理论上相当完美, 搞科研应用数学归纳法非走此路不可, 但用于工业界就很困难. 个别计算很容易. 从原点到360 个月最上面一点只有一种走法, 第二点有 359 种, 上面数起第N个点是 359! / [(360-N)! (N-1)!], 但加上限制再求和就很困难. 我发现这二进制格点实际上就是个杨辉三角形, 也有人称贾宪三角形, 欧洲人称帕斯卡三角形. 三角形点阵上的每个数, 大家知道是二项式展开的系数, 实际上也是从三角形顶点到该点的路径数, 在第N个月到达此点的几率就是 路径数 除以 2**(N-1). 我就写了个产生杨辉三角形的程序, 到达每一点的几率就是连接该点的上个月两点之和的几率相加再除二, 因为那两点都只有50%可能性走到该点. 第N个月最边上的上下两点就是 1 / 2**(N-1). 在每一个Gate 上还要作些特殊处理. 那 100 多位的天文数字, 在我的程序里成了零一之间的小数, 采用双精度处理是轻而易举的. 因为计算必须对整个杨辉三角形进行, 选用 2,187 条简化路径反倒不方便了. 我就把 30万条路径全部给算了出来. 那时已有 486 机器, 计算用了约15分钟. 如果不考虑 386 和 486 的差异, 速度比值大约是 43,200 : 1. 考虑到机器差异, 我对人总说几千倍. 我挑了”更正”论文中给出的路径进行比较, 发觉我的结果与公司软件中的数字完全吻合. 这时我松了一口气, 如果老板错毕竟有些尴尬. 这些路径都是上下对称的, 我对 30 多万条的对称性进行了验证, 完全符合. 还有一个必要条件验证是其他两个计算无法进行的. 我把全部路径都算了出来, 所以几率相加应等于一. 随机行走计算是无法用一台机器算整整 450 天得到结果的. 我做了个简单的加法, 眼睛瞪得象电灯泡, 1, 小数点, 后面是 15 个零. 凭直观想象, Ho 选取的 2,187 条路径好象是几率最大的. 实际上只是基本正确, 我的计算发现, 还是有几条漏网的高几率路径. 我把Ho 叫来, 给他看了结果. 几天后, 他告诉我, 他给对方打了电话, 欢迎来验证结果, 对方没来.如我陷在随机行走的泥坑里, 问题是不可能解决的, 只会越来越糟. 在这个例子中, 点阵的概念, 理科大学生就能理解, 杨辉三角形是高中代数教的, 我是从《十万个为什么》中学到. 二项式系数就是路径数, 是这儿的关键, 这并非人人能想到, 但别人想到后, 理解是很容易的. 编这程序, 不管用什么语言, 都要经过些训练. 但这个程序总的来说是相当简单的. |
|