布萊克斯科爾斯

對 GBM 中的對數正態分佈執行 scipy Kolmogorov-Smirnov 檢驗

  • May 4, 2017

我正在使用帶有歐拉方案的 GMB 模擬 n 天的資產價格,計算回報,然後對模擬回報進行 Kolmogorov-Smirnov 檢驗。模擬 GBM 的程式碼:

def simulate_GBM(mu, sig, asset_price, number_of_days):

       delta = 1 / 252
       t = np.arange(0, number_of_days / 252, delta)

       path = np.zeros(len(t))

       path[0] = asset_price

       for i in range(0, len(t) - 1):
           path[i + 1] = path[i] + path[i] * mu * delta + \
                         sig * path[i] * sqrt(delta) * np.random.randn()
           if path[i + 1] < 0:
               print("Zero assset values!")
               path[i + 1] = 1
       return path

蒙地卡羅 GBM 程式碼

def perform_GBM_Monte_Carlo(mu, sig, asset_price, num_sim, number_of_days):

       simulations = np.zeros(num_sim)
       stop_date = number_of_days

       for i in range(0, self.num_sim - 1):
           simulations[i] = (simulate_GBM(mu, sig, asset_price, num_sim, number_of_days)[stop_date - 1])

       return simulations

然後我計算回報並執行測試

data = perform_GBM_Monte_Carlo(0.05, 0.3, 100, 100000, 252)
returns = np.zeros(len(data))
for i in range(0, len(data) - 1):
   returns[i] = data[i]/100 - 1 # initial asset price is 100

lognorm_params = stats.maxwell.fit(returns)
t_stat, p = stats.kstest(returns, 'lognorm', lognorm_params)

理論說回報必須是對數正態分佈的,但我有非常 p_value。是 GBM 模擬的問題還是我執行 KS 測試的方式有問題?

我沒有檢查你的程式碼,但是……即使你的程式碼都是正確的(你已經計算了對數正態返回),你的測試也不會工作。

你有 100000 個樣本,這是一個很大的數字。有了這麼大的樣本量(和巨大的統計能力),KS-test 將拒絕任何東西。如果您不相信我,請嘗試直接從 Python 繪製 100000 對數正態分佈,您的 KS-test 仍然會以非常低的 p 值拒絕您。

除非您想要非常低的顯著性水平,否則統計檢驗對於大樣本量是沒有意義的。

引用自:https://quant.stackexchange.com/questions/34049