『壹』 什麼是蒙特卡洛模擬( Monte Carlo simulation)
蒙特卡洛模擬又稱為隨機抽樣或統計試驗方法,屬於計算數學的一個分支,它是在上世紀四十年代中期為了適應當時原子能事業的發展而發展起來的。傳統的經驗方法由於不能逼近真實的物理過程,很難得到滿意的結果,而蒙特卡羅方法由於能夠真實地模擬實際物理過程,故解決問題與實際非常符合,可以得到很圓滿的結果。
蒙特卡洛隨機模擬法的原理是當問題或對象本身具有概率特徵時,可以用計算機模擬的方法產生抽樣結果,根據抽樣計算統計量或者參數的值;隨著模擬次數的增多,可以通過對各次統計量或參數的估計值求平均的方法得到穩定結論。
蒙特卡洛隨機模擬法 - 實施步驟抽樣計算統計量或者參數的值;隨著模擬次數的增多,可以通過對各次統計量或參數的估計值求平均的方法得到穩定結論。
(1)python蒙特卡洛模擬一隻股票價格擴展閱讀
基本原理思想
當所要求解的問題是某種事件出現的概率,或者是某個隨機變數的期望值時,它們可以通過某種「試驗」的方法,得到這種事件出現的頻率,或者這個隨機變數的平均值,並用它們作為問題的解。這就是蒙特卡羅方法的基本思想。
蒙特卡羅方法通過抓住事物運動的幾何數量和幾何特徵,利用數學方法來加以模擬,即進行一種數字模擬實驗。它是以一個概率模型為基礎,按照這個模型所描繪的過程,通過模擬實驗的結果,作為問題的近似解。可以把蒙特卡羅解題歸結為三個主要步驟:構造或描述概率過程;實現從已知概率分布抽樣;建立各種估計量。
『貳』 python模擬蒙特卡羅法計算圓周率的近似值
畫一個圓以及與其外切的正方形,在正方形內任取一個點,則它在圓內的概率=圓面積/正方形面積=πr^2/(2r)^2=π/4。所以π近似等於這個概率的4倍。用python多次取正方形內隨機點,判斷是否在圓內,算出這個概率後乘以4,就大致等於π。
『叄』 誰有最小二乘蒙特卡洛方法的美式期權定價python程序代碼
function [c,p]=ucoption(S,X,sigma,r,T,M) sig2=sigma^2; srT=sqrt(T); srTa=sigma*srT; c=0; p=0; for i=1:M ST=S*exp((r-0.5*sig2)*T+srTa*randn); c=c+max(ST-X,0); p=p+max(X-ST,0); end c=c/M; p=p/M; [Call,Put] = blsprice(S, X, r, T, ...
『肆』 怎樣用 Python 寫一個股票自動交易的程序
方法一
前期的數據抓取和分析可能python都寫好了,所以差這交易指令介面最後一步。對於股票的散戶,正規的法子是華寶,國信,興業這樣願意給介面的券商,但貌似開戶費很高才給這權利,而且只有lts,ctp這樣的c++介面,沒python版就需要你自己封裝。
方法二
是wind這樣的軟體也有直接的介面,支持部分券商,但也貴,幾萬一年是要的。
方法三
滑鼠鍵盤模擬法,很復雜的,就是模擬鍵盤滑鼠去操作一些軟體,比如券商版交易軟體和大智慧之類的。
方法四
就是找到這些軟體的關於交易指令的底層代碼並更改,不過T+1的規則下,預測准確率的重要性高於交易的及時性,花功夫做數據分析就好,交易就人工完成吧
『伍』 對歷史股票價格做蒙特卡洛模擬
你先用5年前的數據模擬一下現在股票的價格,看準不準再說吧
『陸』 python回測系統 模擬回測 最簡單量化回測系統有哪些支持期貨和股票
github上有一個jdhc簡單回測 是用python寫的比較簡單,需要設置些參數。
『柒』 如何在matlab中用蒙特卡洛模擬計算歐式期權價格
function [c,p]=ucoption(S,X,sigma,r,T,M)
sig2=sigma^2;
srT=sqrt(T);
srTa=sigma*srT;
c=0;
p=0;
for i=1:M
ST=S*exp((r-0.5*sig2)*T+srTa*randn);
c=c+max(ST-X,0);
p=p+max(X-ST,0);
end
c=c/M;
p=p/M;
[Call,Put] = blsprice(S, X, r, T, sigma);
error=[c,p]-[Call,Put]
%可以試試 [c,p]=ucoption(10,10,0.3,0.05,0.5,10^4*100);
『捌』 如何用python的蒙特卡洛模擬生成新的數據
生成1~10的隨機數1000個:
import random
fp = open("test", 'w');
for i in range(1, 1000):
a = random.randint(1,10)
fp.write(str(a)+"\n");
fp.close();
注意:寫入文件的不會在最後寫入,而是重新寫文件。
『玖』 怎麼用 Excel 做蒙特卡洛模擬
下面是在Excel中模擬一隻股票價格的例子。假設股票價格 的對數收益率服從正態分布,均值為0,每日變動標准差為0.1, 模擬股票價格1年的路徑,過程如下: 用到兩個內置函數,即用rand()來產生0到1之間的隨機數,然後用norminv()來獲得服從既定分布的隨機數,即收益率樣本=norminv(rand(), 0, 0.1)。假定股票價格的初始值是100元,那麼模擬的價格就是 S=100 * exp(cumsum(收益率樣本))。 其中的cumsum()不是Excel的內置函數,其意思就是收益率樣本的累積,每個時刻的值都是當前樣本及此前所有樣本的和,如,收益率樣本從單元格C3開始,當前計算C15對應的模擬價格,則模擬價格計算公式是:100 * exp(sum($C$3:C15))。 由此可以得到股票價格的一條模擬路徑。 其他非正態分布也可以通過類似方式得到分布的抽樣,即分布函數的逆函數,這些函數Excel都內置了。所以,做蒙特卡洛模擬的時候,關鍵是先確定所需模擬的分布,然後進行抽樣,然後應用層面的各種公式就可以在抽樣的基礎上進行計算了。 --------以下是補充的-------- 根據上面提到的思路,其實可以很便捷地為期權做定價。下面就用蒙特卡洛方法為一個普通的歐式看漲期權定價(蒙特卡洛在為普通期權plain vanilla option定價時不佔優勢,因為相對於解析法而言計算量很大。但是,如果要給結構比較復雜的奇異期權定價時,可能蒙特卡洛法就比較實用,有時可能成為唯一的方法)。 1)假設這個期權是歐式看漲期權,行權價格為50元,標的股票當前的價格也是50元,期權剩餘時間是1天。 2)假設標的股票的價格服從對數正態分布,即股票的每日收益率服從正態分布,均值為0,每日標准差為1%。 根據分布假設,首先用rand()函數產生在0到1之間的均勻分布樣本。為了提高精確度,這里抽樣的數量為1000個(其實1000個是很少的了,通常需要10萬個甚至50萬個,但是在Excel表格中操作這么多數字,不方便,這是Excel的不足之處)。 下一步,用norminv(probability, mean, std)函數來獲得股票收益率分布的1000個抽樣,其中的probability參數由rand()產生的抽樣逐個代入,mean=0.0, std = 0.01。注意這里抽樣得到的日度收益率。也就是說,這個樣本對應的下一個交易日股票價格的收益率分布。 下一步,股票價格=50×exp(收益率樣本),得到股票價格分布的抽樣,有1000個樣本。 根據我做的實驗,這1000個樣本的分布圖形(histogram)跟對數正態分布是比較接近的,如下圖所示: 圖的橫軸是股票價格,縱軸是樣本中出現的頻率。 得到了股票價格未來一天分布的樣本之後,就可以以此樣本來計算期權的價格了。 歐式看漲期權的定義為: C=max(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來做的話,比較困難。 這就是我的工作台: ------ 再來一個 -------- 看到有人提到利用蒙特卡洛方法來估計圓周率Pi,挺有意思,也簡單,所以就在Excel中做了一個實驗。 基本原理在於在直角坐標系中的第一個象限中的一個單位圓,如下圖所示: 在這個面積為1的正方形中,有四分之一的圓,圓的半徑與正方向的邊長都是1。那麼根據圓的面積公式,這個圖形中陰影部分的面積應該是 Pi/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 <=1, 1, 0) 即,如果樣本點在陰影中,得到1,否則得到0。這樣就把樣本點區分開來了。 最後,把所有得到的1和0加總,就知道所有樣本點中處於陰影中樣本點的數量了。 最後根據 Pi = 4 × 陰影內的樣本點數量 ÷ 總數量 就可以算出Pi來了。 我這個試驗中算出來的 Pi=3.142。 以下是樣本點的散點圖: 由於樣本數量有限,所以計算出來的Pi的精度並不高。 以下是工作界面,挺簡單的。 來源:知乎