exponenta event banner

Изучение арбитража активов за один период

В этом примере рассматриваются основные концепции арбитража в двухпериодическом портфеле активов. Портфель состоит из облигации, длинной акции и колл-опциона на акции.

Он использует следующие символьные математические функции Toolbox™:

  • equationsToMatrix для преобразования линейной системы уравнений в матрицу.

  • linsolve для решения системы.

  • Символические эквиваленты стандартных функций MATLAB ®, например, diag.

Этот пример символически выводит нейтральные для риска вероятности и цену вызова для сценария с одним периодом и двумя состояниями.

Определение параметров портфеля

Создание символьной переменной r представляет собой безрисковую ставку за период. Установите предположение, что r является положительным значением.

syms r positive

Определите параметры для начала одного периода, time = 0. Здесь S0 - цена акций, и C0 - цена опциона колла со страйком, K.

syms S0 C0 K positive

Теперь определите параметры для конца периода. time = 1. Отметьте два возможных состояния в конце периода как U (цена акций за этот период увеличивается) и D (цена акций за этот период снижается). Таким образом, SU и SD являются ценами на акции в штатах U и D, и CU - значение вызова в состоянии U. Обратите внимание, что SD < = K < = SU.

syms SU SD CU positive

Цена облигации по time = 0 равно 1. Обратите внимание, что в этом примере игнорируются затраты на трение.

Собрать цены по time = 0 в вектор-столбец.

prices = [1 S0 C0]'
prices = 

(1S0C0)[sym(1); S0; C0]

Сбор выплат по портфелю на time = 1 в payoff матрица. Столбцы payoff соответствуют выплатам для состояний D и U. Строки соответствуют выплатам для облигаций, акций и коллов. Погашение облигации 1 + r. Погашение для вызова в состоянии D равно нулю, поскольку оно не выполняется (поскольку SD < = K).

payoff = [(1 + r), (1 + r); SD, SU; 0, CU]
payoff = 

(r+1r+1SDSU0CU)[r + 1, r + 1; SD, SU; sym(0), CU]

CU стоит SU - K в состоянии U. Заменить это значение в payoff.

payoff = subs(payoff, CU, SU - K)
payoff = 

(r+1r+1SDSU0SU-K)[r + 1, r + 1; SD, SU; sym(0), SU - K]

Решение для нейтральных по риску вероятностей

Определить вероятности достижения состояний U и D.

syms pU pD real

При отсутствии арбитража, eqns == 0 всегда должно иметь значение true с положительным значением pU и pD.

eqns = payoff*[pD; pU] - prices
eqns = 

(pDr+1+pUr+1-1SDpD-S0+SUpU-C0-pUK-SU)[pD*(r + 1) + pU*(r + 1) - 1; SD*pD - S0 + SU*pU; - C0 - pU*(K - SU)]

Преобразование уравнений для использования вероятностей, нейтральных к риску.

syms pDrn pUrn real;
eqns = subs(eqns, [pD; pU], [pDrn; pUrn]/(1 + r))
eqns = 

(pDrn+pUrn-1SDpDrnr+1-S0+SUpUrnr+1-C0-pUrnK-SUr+1)[pDrn + pUrn - 1; (SD*pDrn)/(r + 1) - S0 + (SU*pUrn)/(r + 1); - C0 - (pUrn*(K - SU))/(r + 1)]

Неизвестные переменные: pDrn, pUrn, и C0. Преобразуйте линейную систему в матричную форму, используя эти неизвестные переменные.

[A, b] = equationsToMatrix(eqns, [pDrn, pUrn, C0]')
A = 

(110SDr+1SUr+100-K-SUr+1-1)[sym(1), sym(1), sym(0); SD/(r + 1), SU/(r + 1), sym(0); sym(0), -(K - SU)/(r + 1), -sym(1)]

b = 

(1S00)[sym(1); S0; sym(0)]

Используя linsolve, найдите решение для нейтральных по риску вероятностей и цены вызова.

x = linsolve(A, b)
x = 

(S0-SU+S0rSD-SU-S0-SD+S0rSD-SUK-SUS0-SD+S0rSD-SUr+1)[(S0 - SU + S0*r)/(SD - SU); -(S0 - SD + S0*r)/(SD - SU); ((K - SU)*(S0 - SD + S0*r))/((SD - SU)*(r + 1))]

Проверка решения

Проверить, что при нейтральных по риску вероятностях, x(1:2), ожидаемая норма прибыли для портфеля, E_return равняется безрисковой ставке, r.

E_return = diag(prices)\(payoff - [prices,prices])*x(1:2);
E_return = simplify(subs(E_return, C0, x(3)))
E_return = 

(rrr)[r; r; r]

Проверка на отсутствие нарушений арбитража

В качестве примера проверки нарушений без арбитража используйте следующие значения: r = 5%, S0 = 100, и K = 100. Для SU < 105, условие отсутствия арбитража нарушено, поскольку pDrn = xSol(1) отрицательный (SU >= SD). Кроме того, для любой цены вызова, кроме xSol(3), есть арбитраж.

xSol = simplify(subs(x, [r,S0,K], [0.05,100,100]))
xSol = 

(-SU-105SD-SUSD-105SD-SU20SD-105SU-10021SD-SU)[-(SU - 105)/(SD - SU); (SD - 105)/(SD - SU); (20*(SD - 105)*(SU - 100))/(21*(SD - SU))]

Печать цены вызова как поверхности

Постройте график цены вызова, C0 = xSol(3), для 50 <= SD <= 100 и 105 <= SU <= 150. Обратите внимание, что вызов стоит больше, когда «отклонение» базовой цены акций, например, выше, SD = 50, SU = 150.

fsurf(xSol(3), [50,100,105,150])
xlabel SD
ylabel SU
title 'Call Price'

Figure contains an axes. The axes with title Call Price contains an object of type functionsurface.

Ссылка

Advanced Derivatives, Pricing and Risk Management: Theory, Tools and Programming Applications Альбанезе, К., Камполиети, Г.