1. 程式人生 > 其它 >Python金融大資料分析

Python金融大資料分析

_無意中發現了一個巨牛的人工智慧教程,忍不住分享一下給大家。教程不僅是零基礎,通俗易懂,而且非常風趣幽默,像看小說一樣!覺得太牛了,所以分享給大家。教程連結:
https://www.cbedai.net/qtlyx
_

1.簡單的例子

瞭解一點金融工程的對這個公式都不會太陌生,是用現在股價預測T時間股價的公式,其背後是股價符合幾何布朗運動,也就是大名鼎鼎的BSM期權定價模型的基礎。

我們假設現在一個股票的價值是100,那麼兩年後是多少呢?

    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    S0 = 100
    r = 0.05
    sigma = 0.25
    T = 2.0
    I = 10000
    ST1 = S0*np.exp((r - 0.5*sigma**2)*T+sigma*np.sqrt(T)*np.random.standard_normal(I))
    plt.hist(ST1,bins = 50)
    plt.xlabel('price')
    plt.ylabel('ferquency')
[/code]

執行的結果如下所示:

![](https://img-
blog.csdn.net/20161213212014882?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXRseXg=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)

很明顯,是一個lognormal分佈,因為這樣的假設下,價格符合lognormal分佈,收益率符合正態分佈。

##  2.簡單的蒙特卡洛路徑

上面是一步到位的,那麼如果我們中間分很多個小時間段來模擬呢?可以知道,物理問題是一樣的,結果也不會有差異。

```code
    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    import scipy.stats as scs
    S0 = 100
    r = 0.05
    sigma = 0.25
    T = 2.0
    I = 10000
    #ST1 = S0*np.exp((r - 0.5*sigma**2)*T+sigma*np.sqrt(T)*np.random.standard_normal(I))
    #plt.hist(ST1,bins = 50)
    #plt.xlabel('price')
    #plt.ylabel('ferquency')
    
    M = 50
    dt = T/M
    S = np.zeros((M + 1,I))
    S[0] = S0
    print S[0]
    for t in range(1,M+1):
        S[t] = S[t-1]*np.exp((r-0.5*sigma**2)*dt+sigma*np.sqrt(dt)*np.random.standard_normal(I))
    plt.hist(S[-1],bins = 50)
    plt.xlabel('price')
    plt.ylabel('frequency')
    plt.show()
    plt.plot(S[:,:],lw = 1.5)
    plt.xlabel('time')
    plt.ylabel('price')
    plt.show()


我們不僅可以得到最終的分佈,也可以知道價格路徑,而這一價格路徑,才是真正代表了蒙特卡洛的精髓。

如果我們繪製得路徑更加多一點,就是這樣的一個效果:

從側面看,其實就是一個lognormal分佈。