Black-Scholes
幾何布朗運動小時間步高波動性
我正在嘗試為一種資產生成一些範例幾何布朗運動路徑,該資產 24/7 不間斷交易並且高度波動(期權市場隱含波動率高達 150%)。
我目前正在使用這個腳本:https ://stackoverflow.com/a/13203189/5433929
我想生成具有任意解析度的範例路徑,例如一分鐘、一小時、一天或介於這些之間的任何解析度。我的理解是,如果我假設年化波動率為 150%,並且我想使用我連結的腳本生成每小時 GBM,我需要將這 150% 轉換為每小時波動率,這是通過將
1.5/sqrt(number of hours in a year)
. 但是,當我這樣做時,在例如 30 天的時間範圍內生成的範例路徑根本不現實。根據漂移參數,它幾乎呈直線上升,在 +/- 0.1% 的極窄範圍內隨典型 GBM 特徵變化,根本不代表具有如此高波動性的資產。我在這裡做錯了什麼?
提前致謝。
編輯:
由於@Kermittfrog 的要求,我正在粘貼我的特定腳本。
def generateGBM(T, mu, sigma, S0, dt): ''' Generate a geometric brownian motion time series. Shamelessly copy pasted from here: https://stackoverflow.com/a/13203189 Params: T: time horizon mu: drift sigma: percentage volatility S0: initial price dt: size of time steps Returns: t: time array S: time series ''' N = round(T/dt) t = np.linspace(0, T, N) W = np.random.standard_normal(size = N) W = np.cumsum(W)*np.sqrt(dt) ### standard brownian motion ### X = (mu-0.5*sigma**2)*t + sigma*W S = S0*np.exp(X) ### geometric brownian motion ### return t, S
我正在使用以下參數執行此操作:
#Initial reference market price INITIAL_PRICE = 1100 #The desired annualized volatility ANNUALIZED_VOL = 1.5 #The annual drift of the geometric brownian motion DRIFT = 0.04 #The time horizon in days TIME_HORIZON = 30 #The size of the time steps in days (20 minutes here) TIME_STEPS_SIZE = 0.0138889
並通過除以一年內的時間步數的平方根來縮小年化波動率和漂移
N_timesteps = 365/dt sigma_timestep = sigma/np.sqrt(N_timesteps) mu = DRIFT/np.sqrt(N_timesteps)
結果是看起來不像人們對一個月內波動率為 150% 的資產的預期,除非我的預期真的錯了
給定您的程式碼,以下將產生您所追求的:
t,S = generateGBM(TIME_HORIZON/365, DRIFT, ANNUALIZED_VOL, INITIAL_PRICE, 1/365/24/3)
由於所有輸入都是年化的,因此您還必須以年分數為單位考慮:時間範圍是 30 天超過 365 天,時間步長為 20 分鐘,是一年以上
365 * 24 * 3
(在一個週期中有三個 20 分鐘的間隔)小時)。另一方面,如果您想使用日常輸入,您可以執行:
t,S = generateGBM(TIME_HORIZON, DAILY_DRIFT, DAILY_VOL, INITIAL_PRICE, 1/24/3)
您可以將年波動率和年漂移量轉換為每日對應項
DAILY_VOL = np.sqrt(1/365) * ANNUALIZED_VOL DAILY_DRIFT = 1/365 * DRIFT
HTH?