Этот пример исследует основные арбитражные концепции в однопериодическом портфеле активов с двумя состояниями. Портфель состоит из облигации, длинного запаса и длинной опции на акции.
Он использует эти функции Symbolic Math 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. Обратите внимание, что .
syms SU SD CU positive
Цена облигаций в time = 0 равен 1. Обратите внимание, что этот пример игнорирует затраты на трение.
Собирайте цены по time = 0 в вектор-столбец.
prices = [1 S0 C0]'
prices =
Собирайте выплаты портфеля по адресу time = 1 в payoff матрица. Столбцы payoff соответствуют выплате для состояний D и U. Строки соответствуют выплате для облигации, акции и вызова. Выплата по облигации 1 + r. Выплата для вызова в состоянии D равна нулю, поскольку она не выполняется (потому что ).
payoff = [(1 + r), (1 + r); SD, SU; 0, CU]
payoff =
CU стоит SU - K в состоянии U. Заменить это значение на payoff.
payoff = subs(payoff, CU, SU - K)
payoff =
Задайте вероятности достижения состояний U и D.
syms pU pD real
Без арбитража, eqns == 0 всегда должно соответствовать положительным pU и pD.
eqns = payoff*[pD; pU] - prices
eqns =
Преобразуйте уравнения, чтобы использовать нейтральные к риску вероятности.
syms pDrn pUrn real; eqns = subs(eqns, [pD; pU], [pDrn; pUrn]/(1 + r))
eqns =
Неизвестные переменные pDrn, pUrn, и C0. Преобразуйте линейную систему в матричную форму, используя эти неизвестные переменные.
[A, b] = equationsToMatrix(eqns, [pDrn, pUrn, C0]')
A =
b =
Использование linsolve, найдите решение для нейтральных к риску вероятностей и цены вызова.
x = linsolve(A, b)
x =
Проверьте, что при нейтральных к риску вероятностях 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 =
В качестве примера проверки нарушений без арбитража используйте следующие значения: 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 =
Постройте график стоимости вызова, 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'

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