布朗運動

是否有用於估計幾何布朗運動參數的 python 程式碼?

  • November 28, 2015

我試圖找到 GBM 的參數,但找不到相同的 python 程式碼。

下面的程式碼從 Yahoo Finance 提取 AAPL 時間序列,計算均值/標準差並模擬 20 天長的 100 條路徑。

輸入:

import pandas as pd
import numpy as np
from numpy.random import normal

# bring data
ticker = 'AAPL'
url = 'http://real-chart.finance.yahoo.com/table.csv?s=%s' % ticker
data = pd.read_csv(url, index_col='Date', parse_dates=True)
data.sort_index(inplace=True)
r = np.log(data['Adj Close']).diff().as_matrix()[1:]

# estimate parameters
sigma = np.std(r)
mu = np.mean(r) +0.5*sigma*sigma

# simulate paths
T = 20 # number of periods to simulate
N = 100 # number of scenarios
epsilon = normal(size=[T, N])
paths = data['Adj Close'][-1]*np.exp(np.cumsum(mu-0.5*sigma*sigma +sigma*epsilon, axis=0))

# output
print 'data from %s to %s' % (data.index[0].date(), data.index[-1].date())
print '%d scenarios of %d periods' % (N, T)
print paths[-1]

輸出:

data from 1980-12-12 to 2015-11-27
100 scenarios of 20 periods
[ 110.05103396  115.22220256  102.15942834  137.8933195   128.98220659
 123.78995167  119.78760965  111.55081804  101.28873804  150.01698323
 118.17378031  129.26568517  116.89831894  120.14299291  100.92602175
 129.08661341  126.11134726  131.05832164  105.40035237  148.56201625
 117.6589326   135.80459977  116.3256132   118.11022374  138.24069944
 130.23096841  121.44359248   93.36990366  120.40376295  113.86096665
 112.79238568  104.29584358  154.99719687  133.25955192  108.20838712
 120.11125973  104.21453197  112.78981396  108.77688605  118.40240356
 156.99140878  130.91871886  111.0078855   139.71865207  145.2893878
 135.05797455  122.57696229   93.85711338  148.3231574   105.5308185
  98.42940505  106.28268823   99.49360753  118.41985903  152.10864408
 100.48435239   96.49837802  124.98286066  112.95868168  134.59980791
 132.01882861  109.43251849  151.64664262  116.37618346  112.04417492
 119.18353134  120.73513746   96.41828595  107.16867675  121.18435982
  90.45490766  110.88758748  126.11216937  106.48179123  147.52005583
 121.25689013  118.6405851   103.84301241  120.88770293  110.99499809
 119.6822996   112.84273236  131.80224893  124.77742484  135.99716652
 141.02784531  117.44045644  110.02261302  128.75145159  115.82045737
 129.60995183  115.7623887   133.83373679  116.89180599  103.1893998
 138.25279665  106.56185885  138.59835512  101.29356076  152.75506114]

如果要在物理測量中使用 GBM,則只需計算對數返回的標準差即可得到 $ \sigma $ . 為了 $ \mu $ 有很多選擇。

如果您想校準 GBM 以獲得期權價格,那麼您需要隱含波動率並且有一個

OP 說他/她想模擬路徑。如果您不想為衍生品定價,那麼您可以使用“現實世界”衡量標準。

然後 $ \sigma $ 可以如前所述估計。 $ \mu $ 很難假設(對於未來)。如果您查看有關動量策略的文獻,那麼其中一些將過去 3 到 6 個月的預期預測為未來 3 到 6 個月。我這樣說是因為有一個典型的事實,即贏家往往會贏,輸家往往會輸。

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