Бермудские опционы через значения продолжения - PullRequest
0 голосов
/ 05 января 2020

Я хочу оценить опцион «Бермудский пут» с 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.

Так как я не знаю, как печатать математические формулы здесь, я не могу действительно определить значения продолжения. Надеюсь, кто-то знает, о чем я говорю, и может сказать мне, правильна ли установка или нет!

С уважением,

Питер

...