對數收益率服從正態分布,平均值為0,日標準差為0.1。
模擬1年股價的路徑,過程如下:
使用了兩個內置函數,即利用rand()生成0到1之間的隨機數,然後利用norminv()得到服從既定分布的隨機數,即yield sample =norminv(rand(),0,0.1)。假設股票價格初始值為100元,那麽模擬價格為S=100 * exp(cumsum(收益率樣本))。
其中cumsum()不是Excel的內置函數,表示收益率樣本的累加,每個時刻的值是當前樣本和之前所有樣本的和。比如收益率樣本從單元格C3開始,當前計算的是C15對應的模擬價格,那麽模擬價格的計算公式就是:100 * exp (sum ($ c $3: C65438+)。
由此可以得到壹條股價的模擬路徑。
其他的非正態分布也可以用類似的方法采樣,就是分布函數的反函數,這個是Excel內置的。所以在做蒙特卡羅模擬的時候,關鍵是先確定所需模擬的分布,再進行抽樣,然後在抽樣的基礎上應用層次上的各種公式進行計算。
——以下是補充。
按照上面說的思路,給期權定價其實很方便。讓我們用蒙特卡羅方法給壹個普通的歐式看漲期權定價(蒙特卡羅在給普通期權plain vanilla期權定價時並不占優勢,因為與解析法相比,計算量非常大。但如果要對結構復雜的奇異期權進行定價,蒙特卡羅方法可能更實用,有時可能成為唯壹的方法)。
1)假設這個期權是歐式看漲期權,行權價格為50元,標的股票的現價也是50元,期權剩余時間為1天。
2)假設標的股票價格服從對數正態分布,即股票日收益率服從正態分布,平均值為0,日標準差為1%。
根據分布假設,rand()函數用於生成0到1之間的均勻分布樣本。為了提高精度,這裏的樣本數是1000(其實1000是很少的,通常需要100甚至50萬,但是Excel表格中操作這麽多數字不方便,這是Excel的缺點)。
接下來通過norminv(probability,mean,std)函數得到股票收益率分布的65,438+0,000個樣本,其中概率參數由rand()生成的樣本逐壹替代,均值=0.0,std = 0.01+0。註意這裏采樣的日收益率。換句話說,這個樣本對應的是下壹個交易日股價的收益率分布。
接下來,股價=50×exp(收益率樣本),得到股價分布的樣本,有1000個樣本。
根據我的實驗,這1000個樣本的直方圖接近對數正態分布,如下圖所示:
圖表的橫軸是股票價格,縱軸是在樣本中出現的頻率。
在得到第二天股票價格分布的樣本後,我們可以用這個樣本來計算期權的價格。
歐式看漲期權定義為:
c =最大(S-K,0)
因此,根據這個公式,我們可以計算出期權在到期日的特定價格下的價值。在Excel中相當於期權價值=max(股價樣本-50,0)。由此可以得到期權在未來1天的價值樣本。
然後對未來值進行貼現(用無風險利率貼現,假設無風險利率為0.05,貼現公式=exp(-0.05/360)×期權價值,得到1000個期權價格樣本。
最後,期權價格1000個樣本的平均值,Excel函數average(期權價格樣本),可以得到期權價格。
我這裏算出來的是:0.2015元。
根據Black-Scholes期權定價公式計算的理論價格為0.2103元。兩者比較接近,但還是有差距。
而且每次刷新Excel表,再做壹次模擬,模擬的價格變化很大,有時是0.2043元,有時是0.1989元。因為這個樣本的數量比較少(1000個樣本),估計結果會受到樣本的很大影響。如果樣本數量增加100倍甚至500倍,樣本變化的影響可能會小壹兩個數量級。但是計算量大,如果計算機性能不夠高,用Excel做起來比較困難。
這是我的工作臺:
-再來壹杯-
看到有人提到用蒙特卡羅方法估計圓周率,很有趣也很簡單,所以我在Excel裏做了壹個實驗。
基本原理在於直角坐標系中第壹象限的單位圓,如下圖所示:
在這個面積為1的正方形中,有壹個四分之壹圓,圓的半徑和正方向的邊長都是1。那麽根據圓的面積公式,這個圖中陰影部分的面積應該是π/4。
讓我們開始進入蒙特卡洛的求解。
也就是說,如果我們對這個正方形平面上的點進行均勻采樣,隨著采樣點數的增加,落入陰影的點數與總采樣數的比值應該基本等於陰影面積Pi/4與整個正方形面積的比值1,即Pi/4。從數學上來說,是的
陰影中的樣本點數÷總數= Pi/4
因此,Pi = 4 ×陰影中樣本點數÷總數。
讓我們用Excel做實驗。
用rand()函數生成2000個隨機數作為隨機樣本點的X軸坐標,
然後用rand()函數生成2000個隨機數作為隨機樣本點的Y軸坐標。
這樣就獲得了2000個隨機樣本點。這幾個點的X軸坐標和Y軸坐標都大於零小於1,所以是上面說的正方形中的點。
接下來,判斷樣本點是否在陰影中。由於這個陰影是直角坐標系中單位圓的第壹個想象的四分之壹,所以圓陰影中的所有點滿足以下不等式:
轉換成Excel由IF函數判斷,例如:
if(a2^2+b2^2 & lt;=1, 1, 0)
也就是說,如果采樣點在陰影中,則得到1,否則得到0。這區分了樣本點。
最後把所有的1和0相加,就知道所有樣本點中陰影的樣本點個數了。
最後根據
Pi = 4 ×陰影中樣本點數÷總數。
妳可以計算圓周率。
這個實驗我算出來的圓周率是3.142。
以下是樣本點的散點圖:
由於樣本數量有限,計算出的Pi精度不高。
下面是工作界面,挺簡單的。
來源:知乎。