Модель Блэка Шоулза

Модель Блэка-Шоулза — это финансовая модель, используемая для расчета теоретической цены европейского опциона колл или пут. Модель учитывает несколько факторов, таких как текущая цена акций, цена исполнения опциона, время до истечения срока действия, безрисковая процентная ставка и волатильность базовой акции. Модель широко используется в индустрии торговли опционами и считается эталоном для ценообразования опционов.

Что касается реализации модели Блэка-Шоулза с Tensorflow, то это можно сделать, создав математическую функцию в Tensorflow, которая моделирует уравнение Блэка-Шоулза. Затем эта функция может быть использована для расчета теоретической цены опционов с использованием входных параметров. Кроме того, Tensorflow можно использовать для выполнения расчетов подразумеваемой волатильности, используя модель Блэка-Шоулза для нахождения волатильности, подразумеваемой текущей рыночной ценой опциона.

Уравнение Блэка–Шоулза

Граничные условия относятся к конкретным условиям, которые должны быть выполнены для реализации опциона. Эти условия могут включать в себя достижение ценой базового актива определенного уровня, определенной даты или периода времени или другие конкретные условия. колл-опционы имеют значение от Max(0, (S-PV(X))) до S Для пут-опционов имеют значение от Max(0,PV(X)-S) до PV(X)

Очень легко рассчитать цену опциона при погашении, но нас больше интересует сегодняшняя цена до погашения. Уравнение Блэка–Шоулза решает эту задачу.

Уравнение Блэка-Шоулза представляет собой параболическое дифференциальное уравнение в частных производных, которое описывает цену опциона с течением времени. Уравнение выглядит следующим образом:

Формула Блэка-Шоулза является широко используемой математической моделью для определения справедливой стоимости опционов европейского образца. Одна из ключевых финансовых идей, лежащих в основе уравнения, заключается в том, что можно идеально хеджировать риск, связанный с опционом, покупая и продавая базовый актив и денежные средства (также известные как актив банковского счета) определенным образом. Это хеджирование известно как дельта-хеджирование и подразумевает, что существует только одна правильная цена опциона, которая возвращается по формуле Блэка-Шоулза.

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

Стоимость колл-опциона на недивидендную базовую акцию с точки зрения параметров Блэка-Шоулза составляет:

Цена соответствующего пут-опциона, основанная на паритете пут-колл с коэффициентом дисконтирования, составляет:

Здесь мы видим, как оценивать ванильные опционы во фреймворке Блэка Шоулза с помощью библиотеки.

Семантика интерфейса

Если S — спотовая цена актива, r — безрисковая ставка, T — время истечения срока действия σ волатильность. Цена вызова C по модели Блэка Шоулза демонстрирует следующую зависимость (подавляя неиспользованную нотацию):

C(S,r)=e−rTC(erTS,0)

Где e−rT — коэффициент дисконтирования, а erTSt — форвардная цена актива до истечения срока действия. Интерфейс tff оформлен с точки зрения форвардных цен и коэффициентов дисконтирования (а не спотовых цен и безрисковых ставок). Это соответствует правой стороне вышеуказанных отношений.

Параллелизм

Обратите внимание, что библиотека позволяет оценивать опционы параллельно: каждый аргумент (например, strikes) представляет собой массив, и каждый индекс соответствует независимому опциону по цене. Например, это позволяет одновременно оценивать один и тот же опцион с разными датами истечения срока действия, или страйк-цены, или и то, и другое.

Когда теория встречается с технологиями

TensorFlow Probability (TFP) — это мощная и универсальная библиотека для вероятностного моделирования и машинного обучения, построенная на основе TensorFlow. Он предназначен для того, чтобы специалистам по обработке и анализу данных, статистикам, исследователям и практикам было легко использовать возможности современного оборудования (например, TPU и графических процессоров) для кодирования знаний предметной области и составления прогнозов на основе данных.

TFP предлагает широкий спектр функций для вероятностного моделирования, в том числе:

  • Обширная библиотека вероятностных распределений и биекторов, которую можно использовать для построения сложных моделей и выполнения вероятностного вывода.
  • Расширенные инструменты для построения глубоких вероятностных моделей, включая вероятностные слои и абстракцию JointDistribution, которая позволяет легко строить модели с несколькими коррелированными переменными.
  • Продвинутые алгоритмы вывода, такие как вариационный вывод и цепь Маркова Монте-Карло (MCMC), которые позволяют эффективно и точно оценивать параметры модели.
  • Ряд оптимизаторов, включая Nelder-Mead, BFGS и SGLD, которые предназначены для бесперебойной работы с вероятностными моделями TFP и алгоритмами вывода.

Таким образом, мы можем использовать TFP в квантовой работе. Но это очень мощно. TFP имеет вспомогательную библиотеку под названием «TF Quant Finance» Библиотека TF Quant Finance предоставляет высокопроизводительные компоненты, использующие аппаратное ускорение, поддержку и автоматическую дифференциацию TensorFlow. Библиотека обеспечит поддержку TensorFlow для фундаментальных математических методов, методов среднего уровня и конкретных моделей ценообразования. Охват расширяется в течение следующих нескольких месяцев.

Мы можем оценить цену опциона с помощью следующего кода:

# blackScholes_py

S = 100
K = 110
dt = 1
sigma = 0.2
r = 0.03
Phi = stats.norm.cdf
d_1 = (np.log(S / K) + (r+sigma**2/2)*dt) / (sigma*np.sqrt(dt))
d_2 = d_1 - sigma*np.sqrt(dt)

blackScholes_price = S*Phi(d_1) - K*np.exp(-r*dt)*Phi(d_2)
blackScholes_price

Выглядит просто и понятно. Но у нас есть более простой способ, когда вы используете TF Quant.

rate = 0.05
expiries = np.array([0.5, 1.0, 2.0, 1.3])
discount_factors = np.exp(-rate * expiries)
spots = np.array([0.9, 1.0, 1.1, 0.9])
forwards = spots / discount_factors
strikes = np.array([1.0, 2.0, 1.0, 0.5])
is_call_options = np.array([True, True, False, False])
volatilities = np.array([0.7, 1.1, 2.0, 0.5])
prices = option_price(
volatilities=volatilities,
strikes=strikes,
expiries=expiries,
forwards=forwards,
discount_factors=discount_factors,
is_call_options=is_call_options)
prices

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

# Initial positions for finding implied vol.
initial_volatilities = np.array([2.0, 0.5, 2.0, 0.5])
# Identifier whether the option is call (True) or put (False)
is_call_options = np.array([True, True, False, False])
# Find the implied vols beginning at initial_volatilities.
implied_vols = implied_vol(
prices=prices,
strikes=strikes,
expiries=expiries,
forwards=forwards,
discount_factors=discount_factors,
is_call_options=is_call_options,
initial_volatilities=initial_volatilities,
validate_args=True,
tolerance=1e-9,
max_iterations=200,
name=None,
dtype=None)
implied_vols

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

def grid_data(strike_vec, vol_vec, dtype=np.float64):
nstrikes = len(strike_vec)
nvolatilities = len(vol_vec)
vol_ones = np.matrix(np.ones((1, nvolatilities)))
strike_ones = np.matrix(np.ones((nstrikes, 1)))
strikes = np.array(np.matrix(strike_vec).T * vol_ones, dtype=dtype)
volatilities = np.array(strike_ones * np.matrix(vol_vec), dtype=dtype)
expiries = np.ones_like(strikes, dtype=dtype)
forwards = np.ones_like(strikes, dtype=dtype)
initials = np.ones_like(strikes, dtype=dtype)
prices = option_price(volatilities=volatilities,
strikes=strikes,
expiries=expiries,
forwards=forwards,
dtype=tf.float64)
return (forwards, strikes, expiries, volatilities, initials, prices)

Постройте сетку вариантов 1000 x 1000, найдите подразумеваемые волатильности

nstrikes = 1000
nvolatilities = 1000
strike_vec = np.linspace(0.0001, 5.0, nstrikes)
vol_vec = np.linspace(0.0001, 5.0, nvolatilities)
max_iterations = 50
grid = grid_data(strike_vec, vol_vec)
forwards0, strikes0, expiries0, volatilities0, initials0, prices0 = grid
initials0 = discounts0 = signs0 = np.ones_like(prices0)

Подразумеваемые воли, запуск поиска корня с 1.

implied_vols_fix = implied_vol(
prices=prices0,
strikes=strikes0,
expiries=expiries0,
forwards=forwards0,
initial_volatilities=initials0,
validate_args=False,
tolerance=1e-8,
max_iterations=max_iterations)

Визуализация точности

# Implied vols starting the root finder at the Radiocic-Polya approximation.
implied_vols_polya = implied_vol(
prices=prices0,
strikes=strikes0,
expiries=expiries0,
forwards=forwards0,
validate_args=False,
tolerance=1e-8,
max_iterations=max_iterations)
plt.clf()

thinner = 100
fig, _axs = plt.subplots(nrows=1, ncols=2)
fig.subplots_adjust(hspace=0.3)
axs = _axs.flatten()

implied_vols = [implied_vols_fix, implied_vols_polya]
titles = ["Fixed initialisation implied vol minus true vol", "Radiocic-Polya initialised implied vol minus true vol"]
vmin = np.min(map(np.min, implied_vols))
vmax = np.max(map(np.max, implied_vols))
images = []

for i in range(2):
_title = axs[i].set_title(titles[i])
_title.set_position([.5, 1.03])
im = axs[i].imshow(implied_vols[i] - volatilities0, origin="lower", interpolation="none", cmap="seismic", vmin=-1.0, vmax=1.0)
images.append(im)
axs[i].set_xticks(np.arange(0, len(vol_vec), thinner))
axs[i].set_yticks(np.arange(0, len(strike_vec), thinner))
axs[i].set_xticklabels(np.round(vol_vec[0:len(vol_vec):thinner], 3))
axs[i].set_yticklabels(np.round(strike_vec[0:len(strike_vec):thinner], 3))
plt.colorbar(im, ax=axs[i], fraction=0.046, pad=0.00)
axs[i].set_ylabel('Strike')
axs[i].set_xlabel('True vol')

plt.show()

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

Финальный Thoght

Модель Блэка-Шоулза — это упрощенная модель, которая делает некоторые предположения о рынке и имеет некоторые ограничения, когда речь идет о реальных рыночных условиях, но она по-прежнему широко используется для ценообразования и в качестве эталона для других моделей.

Модель Блэка Шоулза и греки

Запрограммируйте формулу Блэка-Шоулза и проверьте, справедлива ли цена опционов.

Фото Скотта Грэма с сайта Unsplash

Ключевые слова: модель Блэка-Шоулза, опционы, колл, пут

Основные моменты:

  • Сложность:★★★★☆
  • Использование данных о транзакциях для ценообразования опционов.
  • Совет: Основной целью сегодняшней статьи является кодификация формулы Блэка-Шоулза с помощью Python. Подробное введение в формулу Блэка-Шоулза и атрибуты опций не включены в эту статью. В результате, перед прочтением этой статьи предлагается предварительный просмотр опций и модели Блэка-Шоулза.

Предисловие

В 1997 году Роберт Мертон и Майрон Шоулз получили Нобелевскую премию по экономике за свою формулу ценообразования опционов Блэка-Шоулза, обойдя многих других претендентов. Модель Блэка-Шоулза по-прежнему широко используется в финансовой индустрии и среди инвесторов благодаря своим превосходным математическим свойствам, простоте и удобству использования. Сегодня мы сосредоточимся на программировании этой модели и греков, производных от модели Блэка-Шоулза.

Среда программирования и требуемый модуль

В качестве редактора используется Windows 11 и Jupyter Notebook# Load required modules
import math
import tejapi
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm
plt.style.use(‘bmh’)
plt.rcParams[‘font.sans-serif’]=[‘Microsoft YaHei’]

# log in TEJ API
api_key = ‘YOUR_KEY’
tejapi.ApiConfig.api_key = api_key
tejapi.ApiConfig.ignoretz = True

База данных

База данных по торговле акциями: Нескорректированная ежедневная цена акций, код базы данных (TWN/APRCD).
База данных деривативов: ежедневная информация о сделках опционов, код базы данных (TWN/AOPTION).

Импорт данных

С использованием нескорректированных цен закрытия взвешенного индекса Тайваня (Y9999) с периодом времени с 16 марта 2021 года по 10 апреля 2023 года. И загрузка тайваньского взвешенного индексного колл-опциона (TXO202304C15500), который является европейским колл-опционом, с датой начала торгов 16 марта и датой истечения 19 апреля, и ценой исполнения 15500.gte, lte = ‘2021-03-16’, ‘2023-04-10’
# Underlying asset price
stocks = tejapi.get(‘TWN/APRCD’,
paginate = True,
coid = ‘Y9999’,
mdate = {‘gte’:gte, ‘lte’:lte},
chinese_column_name = True,
opts = {
‘columns’:[ ‘mdate’,’close_d’]
}
)
# Options price
options = tejapi.get(
‘TWN/AOPTION’,
paginate = True,
coid = ‘TXO202304C15500’,
mdate = {‘gte’:gte, ‘lte’:lte},
chinese_column_name = True,
opts = {
‘columns’:[‘mdate’, ‘coid’,’settle’, ‘kk’, ‘theoremp’, ‘acls’, ‘ex_price’, ‘td1y’, ‘avolt’, ‘rtime’]
}
)
# Reset date as index
stocks = stocks.set_index(‘年月日’)
options = options.set_index(‘日期’)

Обработка данных

Расчет дневной доходности и скользящей волатильности доходности с окном в 252 дня.stocks[‘日報酬’] = np.log(stocks[‘收盤價(元)’]) — np.log(stocks[‘收盤價(元)’].shift(1))
stocks[‘移動報酬波動度’] = stocks[‘日報酬’].rolling(252).std()

Результирующий кадр данных после обработки показан ниже:

Введение в модель

Во-первых, мы можем взглянуть на формулу перед программированием.

● C(St, t), P(St, t) : колл, пут-цена в день t.
● St, K : цена базового актива и цена исполнения на день t.
● T, t : Дата погашения и день t.
● sigma : историческая волатильность скользящей доходности, здесь мы берем окно в 252 дня.
● r : безрисковая ставка.
● N() : кумулятивная функция плотности стандартного нормального распределения.

Следуя приведенной выше формуле, мы видим, что существует 5 факторов, влияющих на теоретическую цену опционов: цена базового актива, цена исполнения, время до погашения (T-t), волатильность доходности и безрисковая ставка. Помимо цены исполнения, другие четыре фактора варьируются во времени. Для того, чтобы изучить взаимосвязь между этими четырьмя факторами и ценой опциона, греки придумали количественную оценку этих взаимосвязей. Это дельта, гамма, вега, тета и ро.

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

На графике ниже представлены все аналитические решения греков. Сверху вниз находятся дельта колла, дельта пут, гамма колла и пут, вега колла и пут, тета колла, тета пут, ро колла, ро пут.

Программирование

Без лишних слов, позвольте мне просто показать вам код?.class BS_formula:

def __init__(self, s0, k, r, sigma, T):
self.s0 = s0 # underlying asset price
self.k = k # stike price
self.r = r # risk-free rate
self.sigma = sigma # historical return volatility
self.T = T # time 2 maturity
self.d1 = (np.log(s0/k)+(r+sigma**2/2)*T) / (sigma * np.sqrt(T))
self.d2 = ((np.log(s0/k)+(r+sigma**2/2)*T) / (sigma * np.sqrt(T))) — sigma*np.sqrt(T)

def BS_price(self): # calc theoretical price
c = self.s0*norm.cdf(self.d1) — self.k*np.exp(-self.r*self.T)*norm.cdf(self.d2)
p = self.k*np.exp(-self.r*self.T)*norm.cdf(-self.d2) — self.s0*norm.cdf(-self.d1)
return c,p

def BS_delta(self): # calc delta
return norm.cdf(self.d1), norm.cdf(self.d1)-1

def BS_gamma(self): # calc gamma
return norm.pdf(self.d1)/(self.s0*self.sigma*np.sqrt(self.T)), norm.pdf(self.d1)/(self.s0*self.sigma*np.sqrt(self.T))

def BS_vega(self): # calc vega
return self.s0*np.sqrt(self.T)*norm.pdf(self.d1), self.s0*np.sqrt(self.T)*norm.pdf(self.d1)

def BS_theta(self): # calc theta
c_theta = -self.s0*norm.pdf(self.d1)*self.sigma / (2*np.sqrt(self.T)) — self.r*self.k*np.exp(-self.r*self.T)*norm.cdf(self.d2)
p_theta = -self.s0*norm.pdf(self.d1)*self.sigma / (2*np.sqrt(self.T)) + self.r*self.k*np.exp(-self.r*self.T)*norm.cdf(-self.d2)
return c_theta, p_theta

def BS_rho(self): # calc rho
return self.k*self.T*np.exp(-self.r*self.T)*norm.cdf(self.d2), -self.k*self.T*np.exp(-self.r*self.T)*norm.cdf(-self.d2)

Теоретическая цена

Из приведенного выше кода, при прочих равных условиях, мы можем визуализировать взаимосвязь между ценой базового актива и ценой опционов. На графике ниже мы видим, что кривые цен колл и пут симметричны, в то время как цена колл и цена базового актива положительно коррелируют, цена пут и цена базового актива коррелируют отрицательно. Кроме того, стилизованный факт того, что удержание колла имеет ограниченный риск, но неограниченную прибыль, также может быть обнаружен с помощью этой картинки, поскольку вы можете получить бесконечную прибыль, когда находитесь глубоко в деньгах, и в лучшем случае не получить никакой прибыли, когда находитесь глубоко вне денег. В отличие от удержания колла, прибыль от удержания пут-опциона, когда он находится глубоко в деньгах, не может быть бесконечной, так как самая низкая цена для базового актива равна нулю.s0 = np.linspace(200,800)
k = 500
r = 0.00
sigma = 0.2
T = 252/252

mybs = BS_formula(s0, k, r, sigma, T)
c, p = mybs.BS_price()

fig = plt.figure(figsize = (12,8))
plt.plot(s0, c, label = ‘買權’)
plt.plot(s0, p, label = ‘賣權’)
plt.axvline(x = 500, color = ‘black’, linestyle = ‘—‘)
plt.xlabel(‘標的物價格’, fontsize = 15)
plt.ylabel(‘選擇權價格’, fontsize = 15)
plt.title(‘選擇權價格 VS. 標的物價格’, fontsize = 20)
plt.legend(fontsize = 14)
plt.savefig(‘black scholes put call price.png’)
plt.show()

Дельта

Тогда, при прочих равных условиях, мы можем визуализировать взаимосвязь между ценой базового актива и дельтой. Финансовое значение дельты относится к величине, на которую цена опциона увеличивается или уменьшается, когда цена базового актива увеличивается на одну единицу. На рисунке ниже видно, что когда опцион находится глубоко вне денег, дельта как колла, так и пут стремится к нулю. Когда опцион находится глубоко в деньгах, дельта колла стремится к единице, в то время как дельта пут-опциона стремится к отрицательной. Это указывает на то, что небольшие изменения в цене базового актива оказывают незначительное влияние на цену опциона, когда он находится глубоко вне денег, в то время как небольшие изменения в цене базового актива могут вызвать значительные колебания цены опциона, когда он находится глубоко в деньгах, и величина колебаний примерно равна величине базового актива.s0 = np.linspace(200,800)
k = 500
r = 0.00
sigma = 0.2
T = 252/252

mybs = BS_formula(s0, k, r, sigma, T)
c, p = mybs.BS_delta()

fig = plt.figure(figsize = (12,8))
plt.plot(s0, c, label = ‘買權’)
plt.plot(s0, p, label = ‘賣權’)
plt.axvline(x = 500, color = ‘black’, linestyle = ‘—‘)
plt.axhline(y = 0, color = ‘black’, linestyle = ‘—‘)
plt.xlabel(‘標的物價格’, fontsize = 15)
plt.ylabel(‘Delta值’, fontsize = 15)
plt.title(‘Delta值 VS. 標的物價格’, fontsize = 20)
plt.legend(fontsize = 14)
plt.savefig(‘black scholes put call delta.png’)
plt.show()

Гамма

Гамма – это частичная производная колл-цены второго порядка по отношению к цене базового актива, ее можно понимать как наклон дельта-кривой. При прочих равных условиях мы можем визуализировать взаимосвязь между ценой базового актива и гаммой. Гаммы колла и пут на самом деле одинаковы, оба достигают максимума при деньгах. Это означает, что величина приращения дельты сначала ускоряется, а затем замедляется, когда цена базового актива переходит из состояния «глубоко вне денег» в состояние «глубоко в деньгах». Код приведен в конце статьи.

Более того, мы можем наблюдать изменение гаммы при разной денежности и сроках погашения. Забавный факт заключается в том, что, находясь в деньгах и приближаясь к зрелости, гамма невероятно растет. Это и есть хорошо известный гамма-риск. Гамма-риск означает, что по мере приближения к погашению волатильность цен опционов в деньгах обычно велика. Таким образом, большинство инвесторов, избегающих риска, пытаются компенсировать позиции по мере приближения к сроку погашения. Тем не менее, некоторые инвесторы могут сделать это наоборот, они могут открывать длинные позиции до погашения и ожидать заработать более приличную премию за риск.s0, s1, s2 = 400, 500, 600
k = 500
r = 0.00
sigma = 0.2
T = np.linspace(1, 0.01)

mybs0 = BS_formula(s0, k, r, sigma, T)
c0, p0 = mybs0.BS_gamma()

mybs1 = BS_formula(s1, k, r, sigma, T)
c1, p1 = mybs1.BS_gamma()

mybs2 = BS_formula(s2, k, r, sigma, T)
c2, p2 = mybs2.BS_gamma()

fig = plt.figure(figsize = (12,8))
plt.plot(T, c0, label = ‘買權(價外)’)
plt.plot(T, c1, label = ‘買權(價平)’)
plt.plot(T, c2, label = ‘買權(價內)’)
plt.xlabel(‘剩餘時間’, fontsize = 15)
plt.ylabel(‘Gamma值’, fontsize = 15)
plt.title(‘Gamma值 VS. 剩餘時間’, fontsize = 20)
plt.legend(fontsize = 14)
plt.axis([1.005, -0, -0.005, .045])
plt.savefig(‘black scholes put call gamma2.png’)
plt.show()

Вега

Как и в случае с гаммой, вега колла и пут точно такие же. Значение vega относится к величине, на которую цена опциона увеличивается или уменьшается при увеличении волатильности цены базового актива на одну единицу. Из приведенного ниже графика видно, что вега достигает максимума при деньгах. То есть цена опционов наиболее чувствительна к волатильности во время at-the-money. Код приведен в конце статьи.

Тета

Значение тета — это величина, на которую увеличивается или уменьшается цена опциона, когда время до погашения увеличивается на одну единицу. Мы можем визуализировать взаимосвязь между тетой и временем достижения зрелости. Мы видим, что во время глубоких «в деньгах» и «вне денег» тета будет приближаться к нулю, приближаясь к зрелости. Наоборот, при деньгах наблюдается крутое нисходящее движение. Более того, тета всегда отрицательна, потому что по мере движения времени временная стоимость опционов постепенно снижается. Код приведен в конце статьи.

Ро

В конечном счете, rho представляет собой величину, на которую цена опциона увеличивается или уменьшается, когда безрисковая ставка увеличивается на одну единицу. Также мы построим приведенную ниже кривую, чтобы проследить взаимосвязь между rho и ценой базового актива. С ростом цены базового актива rho становится больше. Код приведен в конце статьи.

Упражнение с реальными данными

И последнее, но не менее важное: возьмем, к примеру, колл-опционы TAIEX, рассчитав теоретическую цену колла при страйк-цене 15500, время до погашения 6 дней.r = 0.012
s0 = stocks.loc[‘2023-04-10’][‘收盤價(元)’]
k = 15500
sigma = stocks.loc[‘2023-04-10’][‘移動報酬波動度’]*np.sqrt(252)
T = 6/252

mybs = BS_formula(s0, k, r, sigma, T)
c, p = mybs.BS_price()
c_delta, p_delta = mybs.BS_delta()
c_gamma, p_gamma = mybs.BS_gamma()
c_vega, p_vega = mybs.BS_vega()
c_theta, p_theta = mybs.BS_theta()
c_rho, p_rho = mybs.BS_rho()

print(‘==2023-04-10履約價為525的台積電買權==’)
print(‘當前標的物價格為 %.3f, 年化波動度為 %.3f, 剩餘期間為 %.3f’%(s0, sigma, T*252))
print(‘買權理論價格: %.4f, 賣權理論價格: %.4f’ %(c,p))
print(‘買權delta: %.4f, 賣權delta: %.4f’ %(c_delta,p_delta))
print(‘買權gamma: %.4f, 賣權gamma: %.4f’ %(c_gamma,p_gamma))
print(‘買權vega: %.4f, 賣權vega: %.4f’ %(c_vega,p_vega))
print(‘買權theta: %.4f, 賣權theta: %.4f’ %(c_theta,p_theta))
print(‘買權rho: %.4f, 賣權rho: %.4f’ %(c_rho,p_rho))

options.loc[‘2023-04-10’] # 實際買權價格

Сравнивая рассчитанную нами теоретическую цену со страйк-ценой, мы видим, что существует существенная разница (435,54–385), указывающая на то, что колл-опцион может быть недооценен в данный момент. Кроме того, TEJ API также предоставляет услугу теоретического ценообразования в базе данных производных финансовых продуктов. Теоретическая цена, рассчитанная TEJ API, имеет небольшое отличие от нашей (440,36 против 435,54), что может быть связано с разными методами расчета исторической волатильности или использованием разных стандартов безрисковых процентных ставок.

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

Код

https://medium.com/media/8b0d1698f13209a8e71f1b5776558a39

Расширенное чтение

● 【Анализ данных】ГРУ и LSTM
● 【Применение】Торговая стратегия полос Боллинджера

Ссылки по теме

● TEJ API
● Интернет-магазин TEJ

Источник

Источник