|
在給金融產品定價 (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 叫來, 給他看了結果. 幾天后, 他告訴我, 他給對方打了電話, 歡迎來驗證結果, 對方沒來.如我陷在隨機行走的泥坑裡, 問題是不可能解決的, 只會越來越糟. 在這個例子中, 點陣的概念, 理科大學生就能理解, 楊輝三角形是高中代數教的, 我是從《十萬個為什麼》中學到. 二項式係數就是路徑數, 是這兒的關鍵, 這並非人人能想到, 但別人想到後, 理解是很容易的. 編這程序, 不管用什麼語言, 都要經過些訓練. 但這個程序總的來說是相當簡單的. |
|