Я хочу оценить опцион «Бермудский пут» с 12 возможными датами исполнения в течение одного года через хорошо известные значения продолжения. Бермудский опцион пут, который я хочу оценить, имеет следующие характеристики:
- Начальная цена акции x0: 100
- Безрисковая ставка mu: 0,05
- волатильность сигма: 0,25
- Цена страйка K: 90
Для задачи я хочу смоделировать цены акций с помощью геометрии c Броуновского движения. Всего 2000 смоделированных цен на акции за такт. Мой код для геометрии c броуновского движения выглядит следующим образом:
def standardBrownianMotion(n, T):
'''
Simulate a 1D standard Brownian motion on [0, ‘T‘] with ‘n‘ Brownian increments .
'''
ts = np.linspace(0, T, n+1)
dxs = np.random.normal(
loc=0, scale=np.sqrt(float(T) / n), size=(n+1))
dxs[0] = 0.0
xs = np.cumsum(dxs)
return xs , ts
def GBM(So, mu, sigma, W, T, N):
t = np.linspace(0.,1.,N+1)
S = []
S.append(So)
for i in range(1,int(N+1)):
dri = (mu - 0.5 * sigma**2) * t[i]
dif = sigma * W[i]
S_temp = So*np.exp(dri + dif)
S.append(S_temp)
return S, t
и для функции выплаты в определенный момент времени
def payoff_function(X, K, t):
X_t = X[t]
if K >= X_t:
return K - X_t
else:
return 0
И мой код в целом для оценки значения продолжения:
#m : Number of Excersice dates within the year
m = 12
#T: Duration of the option in years
T = 1
for t in range(m - 1, -1, -1):
data = {}
for i in range(1, n+1, 1):
W = standardBrownianMotion(m, T)[0]
stock_prices = GBM(x_0, mu, sigma, W, T, m)[0]
if t == m-1:
q_t1 = 0
else:
q_t1 = model.predict([stock_prices[t + 1]])[0][0]
Y_i = np.maximum(np.exp(-mu*(t+1)/12)*payoff_function(stock_prices, K, t + 1), q_t1)
data[i] = (stock_prices[t], Y_i)
data = pd.DataFrame.from_dict(data, orient = 'index',
columns = ['StockPrice', 'TargetValue',
Модель для прогнозирования q_t1 на каждом временном шаге еще не реализована. Сначала я хотел проверить правильность общих настроек, прежде чем начать думать о подходящей модели для использования.
Кроме того, обратите внимание, что выражение перед функцией погашения предназначено для дисконтирования его к t = 0.
Так как я не знаю, как печатать математические формулы здесь, я не могу действительно определить значения продолжения. Надеюсь, кто-то знает, о чем я говорю, и может сказать мне, правильна ли установка или нет!
С уважением,
Питер