В этом примере рассматриваются основные концепции арбитража в двухпериодическом портфеле активов. Портфель состоит из облигации, длинной акции и колл-опциона на акции.
Он использует следующие символьные математические функции 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. Обратите внимание, что < = SU.
syms SU SD CU positive
Цена облигации по time = 0 равно 1. Обратите внимание, что в этом примере игнорируются затраты на трение.
Собрать цены по time = 0 в вектор-столбец.
prices = [1 S0 C0]'
prices =
Сбор выплат по портфелю на time = 1 в payoff матрица. Столбцы payoff соответствуют выплатам для состояний D и U. Строки соответствуют выплатам для облигаций, акций и коллов. Погашение облигации 1 + r. Погашение для вызова в состоянии D равно нулю, поскольку оно не выполняется (поскольку = K).
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 всегда должно иметь значение true с положительным значением 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 Альбанезе, К., Камполиети, Г.