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

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

В этой части мы познакомимся с вспомогательными понятиями финансовой математики.

Финансовый рынок

Финансовый рынок — рынок, на котором люди торгуют финансовыми ценными бумагами или деривативами (дериватив — контракт между покупателем и продавцом). К ценным бумагам относятся акции и облигации, сырье, драгоценные металлы и т. д.

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

Деривативы

Давайте отойдем от строгих формулировок и рассмотрим простой пример.

Пусть у нас есть три действующих лица, как в хорошей сказке:

  1. Фермер-пингвин, он выращивает и продает рыбу.

  2. Ресторатор-нерпа - владеет баром на глубине Байкала.

  3. Чайка-лудоман - очень любит делать ставки.

Рассмотрим ситуацию с ценой на рыбу в такой маленькой системе. Сейчас допустим 15 декабря и 1 кг рыбы стоит 100 ракушек. Фермер боится, что к нересту рыбы цена упадет, пусть до 70 ракушек. При этом нерпа боится, что к июлю цена взлетит в небеса до 150 ракушек и он разорится, покупая такую дорогую рыбу.

Что же делать нашим персонажам, чтобы они не разорились?

Конечно нужно заключить контракт. В январе пингвин и нерпа заключают сделку:

C 1 июля фермер продаст, а ресторатор купит 1000 кг рыбы по фиксированной цене 100 ракушек за кг

Это и есть дериватив (фьючерс), но давайте подумаем что будет с ценой фьючерса при различных сценариях.

Вариант 1: Цена рыбы на рынке упала до 70 ракушек за кг.

Фермер в восторге, он обязан продать кг рыбы за 100 ракушек при текущей базовой стоимости в 70 ракушек ща кг, его контракт теперь дорогой - он спасает его от убытков. При желании он может продать этот контракт чайке.

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

Вариант 2: Цена рыбы выросла до 150 ракушек за кг

Попробуйте подумать, кто выиграет при таком сценарии и напишите в комментарии, что Вы скажете об этом варианте.

Но причем тут чайка-лудоман? Чайке вообще все равно на рыбу, она кайфуют от ставок на рыбу. Она прочитала в телеграмм канале "Cтавки на рыбу 24/7", что в этом году будет засуха и цены на рыбу взлетит. Она покупает такой фьючерсный контракт не для поставки, а в надежде, что позже продаст его еще дороже, когда цена на рыбу действительно начнет расти, то есть он спекулирует на изменении цены на контракта.

Мы с Вами разобрали только один из видов деривативов, также есть например опционы и свопы, позже мы подробнее разберем, что такое опцион и какие виды бывают.

Нам еще хотелось бы понять, а зачем нам это нужно в рамках глобального финансового рынка деривативы?

  1. Хеджирование(страховка)

  2. Спекуляции - ставки как наша чайка

  3. Арбитраж - купить дешевле тут, и продать дороже там.

Опционы

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

Опционы делятся на два вида:

  1. Опцион колл(call option) - право купить

  2. Опцион пут (put option) - право продать

Давайте снова разберем какой-нибудь простой пример.

Пусть у Иванушки есть корова, стоимость, которой в данный момент 50 000 рублей. Спекулянт Олеженька - считает, что цены на коров взлетят до небес, но к сожалению он не может позволить себе корову по каким-то обстоятельствам. Тогда Олеженька предлагает Иванушке опцион:

-Я плачу тебе премию 3000 рублей, а ты даешь мне право купить у тебя корову через 3 месяца сколько бы она не стоила на рынке.

В данном примере Олеженька купил у Иванушки опцион колл. Какие есть характеристики?

  1. Страйк(цена исполнения) = 50000 рублей

  2. Срок = 3 месяца

  3. Премия = 3000 рублей

Пусть на нашей веселой ферме прошло три месяца и также, как в истории про фьючерсы возможно два варианта:

  1. Коровы - новое золото, ее цена на рынке 70 000 рублей.

Олежик, как владелец опциона, исполняет свое право и покупает корову у Иванушки за 50 000 рублей и тут же продает ее на рынке за 70 000 рублей. Его прибыль в данном сценарии: 70000 - 50000 - 3000 = 17 000 в итоге Олежик прекрасный спекулянт.

  1. Коровы упали в цене до 40 000 рублей

В данных условиях Олеженьке бессмысленно использовать свое право на покупку актива(коровы), он просто говорит "Прости, брат, я не хочу корову". Тут ему заработать не удалось и он понесет убытки в размере премии которую он заплатил Ивану.

То есть опцион колл - некая ставка на рост актива, покупая этот вид опциона мы хотим, чтобы актив вырос выше чем страйк + премии.

Попробуйте самостоятельно придумать объяснение для модели пут опциона и поделитесь им в комментариях.

Сегодня мы разобрали очень важные понятия, кото��ые в последствии нам помогут смоделировать математику финансов, но об этом в следующей части

История

Впервые в 1900 году Луи Башелье использовал идею броуновского движения для ценообразования деривативов, его работа не имела большого влияния, так как содержала большие ограничения к модели.
В 1960-х годах ряд ученых внесли улучшения в теорию ценообразования опционов.
Затем в 1968 году Фишер Блэк и Майрон Шоулз в 1968 году продемонстрировали, что динамическая корректировка портфеля устраняет ожидаемую доходность. Затем авторы пытались применить формулу в реальных условиях, но понесли финансовые потери из-за отсутствия управления рисками в своих сделках. В 1973 году в статье «Ценообразование опционов и корпоративных обязательств» обнародовали свою формулу.

Предположения.

Модель Блэка — Шоулза находится в предположениях, что рынок состоит как минимум из одного рискового актива (акции) и одного безрискового актива (например, ОФЗ).

В отношении активов должно быть выполнено:

  1. Безрисковый актив имеет одинаковую ставку, то есть доходность всегда постоянна.

  2. Движение рискового актива подчиняется случайному блужданию с дрейфом, то есть цена акции следует за геометрическим броуновским движением.

  3. По акциям не выплачиваются дивиденды.

Теперь скажем какие у нас есть ограничения о рынке:

  1. Нет арбитража(без дополнительного риска нельзя получить прибыль сверх безрисковой ставки)

  2. У нас есть некий набор инструментов, которые мы можем использовать продавать, покупать, брать в займы, давать в займы любой объем акций или наличных

Мы тут ввели большое количество понятий, давайте подробнее разберем каждое из них.

Арбитраж

Допустим, акция "Мышкабанк" одновременно торгуются на двух разных биржах:

  • На Московской бирже: цена 100 рублей за акцию.

  • На Санкт-Петербургской бирже: 102 рублей за акцию Это одинаковая акция, с одинаковыми правилами, просто торгуются в разных местах.

Какая тут возможность для арбитража?

Покупаем акции «Мышкабанк» на Московской бирже по 100 рублей и продаем их на Санкт-Петербургской по 102. В итоге с каждой акции имеем 2 рубля прибыли. При этом с каждой такой операции мы имеем нулевой риск, время владения акции минимально, следовательно, цена не может сильно поменяться в течение этого времени.

Вот так выглядит чистый арбитраж — безрисковый заработок на разнице одного и того же актива.

Случайное блуждание

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

Снова у нас очень сложное определение, для понимания закрепим примерами:

Самый простой пример иллюстрации случайного блуждания — путешествие точки по числовой прямой.

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

А теперь мы подбрасываем монетку, если выпадает орел, то наша точка смещается на единицу вправо, если решка, то наоборот. Очевидно, что каждый из исходов будет равновероятным.

После пяти подбрасываний точка могла оказаться в точках -5, -3, -1, 1, 3, 5. Попробуйте придумать примеры, когда это действительно получается, и единственным ли образом можно прийти в эти точки?

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

Допустим, частица находится на квадратной сетке и на каждом шаге с вероятностью 1/4 сдвигается в одну из четырёх сторон: вверх, вниз, влево или вправо.

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

import numpy as np
import matplotlib.pyplot as plt
import random

def random_walk(n_steps, start_position=(0, 0)):
    """
    Генерирует случайное блуждание на квадратной сетке.
    
    Args:
        n_steps: количество шагов
        start_position: начальная позиция (x, y)
    
    Returns:
        x_coords, y_coords: массивы координат x и y
    """
    # Направления: вверх, вниз, влево, вправо
    directions = [(0, 1), (0, -1), (-1, 0), (1, 0)]
    
    x, y = start_position
    x_coords = [x]
    y_coords = [y]
    
    for _ in range(n_steps):
        # Выбираем случайное направление
        dx, dy = random.choice(directions)
        x += dx
        y += dy
        
        x_coords.append(x)
        y_coords.append(y)
    
    return x_coords, y_coords

def plot_random_walk(n_steps=1000, start_position=(0, 0)):
    """
    Генерирует и отображает случайное блуждание.
    
    Args:
        n_steps: количество шагов
        start_position: начальная позиция
    """
    # Генерируем случайное блуждание
    x_coords, y_coords = random_walk(n_steps, start_position)
    
    # Создаем график
    plt.figure(figsize=(10, 8))
    
    plt.plot(x_coords, y_coords, alpha=0.7, linewidth=1.2, color='blue')
   
    plt.scatter(x_coords[0], y_coords[0], color='green', s=100, 
                label=f'Начало: {start_position}', zorder=5)
    
    plt.scatter(x_coords[-1], y_coords[-1], color='red', s=100, 
                label=f'Конец: ({x_coords[-1]}, {y_coords[-1]})', zorder=5)
    
    plt.title(f'Случайное блуждание ({n_steps} шагов)', fontsize=14, fontweight='bold')
    plt.xlabel('X координата', fontsize=12)
    plt.ylabel('Y координата', fontsize=12)
    plt.grid(True, alpha=0.3)
    plt.legend(loc='best')
    plt.axis('equal')
    
    distance = np.sqrt((x_coords[-1] - x_coords[0])**2 + (y_coords[-1] - y_coords[0])**2)
    print(f"Количество шагов: {n_steps}")
    print(f"Начальная позиция: {start_position}")
    print(f"Конечная позиция: ({x_coords[-1]}, {y_coords[-1]})")
    print(f"Смещение от начальной точки: {distance:.2f}")
    
    plt.tight_layout()
    plt.show()

def plot_multiple_walks(n_walks=5, n_steps=200):
    """
    Отображает несколько случайных блужданий на одном графике.
    
    Args:
        n_walks: количество блужданий
        n_steps: количество шагов в каждом блуждании
    """
    plt.figure(figsize=(10, 8))
    
    colors = plt.cm.Set1(np.linspace(0, 1, n_walks))
    
    for i in range(n_walks):
        x_coords, y_coords = random_walk(n_steps)
        plt.plot(x_coords, y_coords, alpha=0.7, linewidth=1.2, 
                color=colors[i], label=f'Блуждание {i+1}')
        
        # Отмечаем начальную и конечную точки
        plt.scatter(x_coords[0], y_coords[0], color=colors[i], s=50, marker='o')
        plt.scatter(x_coords[-1], y_coords[-1], color=colors[i], s=50, marker='s')
    
    plt.title(f'{n_walks} случайных блужданий по {n_steps} шагов', 
              fontsize=14, fontweight='bold')
    plt.xlabel('X координата', fontsize=12)
    plt.ylabel('Y координата', fontsize=12)
    plt.grid(True, alpha=0.3)
    plt.legend(loc='best')
    plt.axis('equal')
    plt.tight_layout()
    plt.show()

print("=== Пример 1: Одно случайное блуждание ===")
plot_random_walk(n_steps=1000)

print("\n=== Пример 2: Несколько случайных блужданий ===")
plot_multiple_walks(n_walks=5, n_steps=200)

print("\n=== Пример 3: Блуждание из другой начальной точки ===")
plot_random_walk(n_steps=500, start_position=(10, 10))

Отлично, мы хорошо поняли, что такое модель случайного блуждания, но почему это интересно для нашего случая? Одним из самых хороших примеров случайного блуждания является траектория молекул движущихся в жидкости или газе или Броуновское движение!

Введем некоторое определение

Винеровский процесс это случайные процесс непрерывном времени. У Винеровского процесса есть ряд уникальных свойств, пусть

W_{t}=\frac{1}{\sqrt{ n }}\sum_{1\leq k\leq[nt]}\xi_{k}

Винеровский процесс, то

  1. W_{0} = 0 почти наверное.

  2. Математическое ожидание равно 0

  3. Дисперсия равна t

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

Тогда броуновское движение - это случайное движение частиц в жидкости или газе. В математическом формализме - винеровский процесс.

Геометрическое броуновское движение(GBM) - случайные процесс с непрерывным временем в котором логарифм случайной величины следует броуновскому движения с дрейфом.

Что такое дрейф?

Дрейф - это изменение ��реднего значения случайной величины.

Пусть у нас есть случайный процесс S он называется геометрическим броуновским движением если удовлетворяет стохастическому дифференциальному уравнению(1):

dS_{t} = \mu S_{t}dt + \sigma S_{t}dW_{t}\tag{1}

где \mu - дрейф, \sigma- волатильность, а W_t - это уже знакомый нам винеровский процесс.

В данной статье(но затем мы выведем его для модели Блэка - Шоулза) мы не будем решать это уравнение, талантливый читатель, может ознакомится с исчислением и формулами Ито и вывести решение этого уравнения, мы просто запишем его:

S_{t} = S_{0}\left( \left( \mu-\frac{\sigma^2}{2} \right)t + \sigma W_{t} \right)

В 1900 году Луи Башелье предлагал именно такой способ описания цен на акции.

Давайте введем некоторые переменные, пусть:

Рынок:
 t - время в годах;
 r - доходность безрискового актива, для простоты ОФЗ(облигации федерального займа)

Актив:

S(t) - цена базового актива в момент времени t
 μ- скорость дрейфа(то есть это производная от функции дрейфа, которую мы вводили во второй части)
σ - стандартное отклонение доходности акций(это квадратный корень из дисперсии процесса роста акции т.е показатель их волатильности )

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

Опцион:

V(t,S) - цена опциона, функция базового актива в момент времени t. Мне кажется очевидно, что эта функция многих переменных, так как цена опциона будет зависеть от того какой актив мы покупаем.

К(S) - страйк опциона или цена исполнения.

Вывод уравнения

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

dS = \mu Sdt + \sigma SdW \tag{1}

где W - винеровский процесс, также стоить отметить из-за того что это случайная величина изменение dW будет в любой промежуток времени равна нулю, тогда получим, что ожидаемое среднее значение равно μdt и дисперсию σ^2dt

Мы хотим оцени опцион, в момент времени t = T выплата V(S,T) известна(если у нас call-опцион: V(S,T) = max(S-K,0)). Нам бы хотелось узнать сколько стоил опцион раньше при t < T, то есть узнаем V(S,t), для этого найдем его дифференциал:

dV = \left( \frac{\partial V}{\partial S}dS + \frac{\partial V}{\partial t}dt + \frac{1}{2}\ \frac{\partial^2 V}{\partial S^2}(dS)^2 \right) \tag{2}

Теперь поставим формулу (1) в (2)

Получим окончательную формулу:

dV = \left( \mu S\frac{\partial V}{\partial S} + \frac{\partial V}{\partial t} + \frac{1}{2}\sigma^2S^2\ \frac{\partial^2 V}{\partial S^2}\right)dt + \sigma S\frac{\partial V}{\partial S}dW \tag{3}

Теперь представим что у нас есть портфель П состоящий из опциона и акций:

П = -V + \frac{\partial V}{\partial S}S

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

Тогда изменение стоимости активов в портфеле:

dП = -dV + \frac{\partial V}{\partial S}ds

Подставляем сюда наши формулу (1),(3) получим:

dП = \left( -\frac{\partial V}{\partial t} - \frac{1}{2}\sigma^2S^2\frac{\partial^2 V}{\partial S^2} \right)dt

Мы рассматривали изменение на произвольном промежутке, давайте теперь возьмем какой то достаточно коротки фиксированный промежуток t, t+dt:

\Delta П = \left( -\frac{\partial V}{\partial t} - \frac{1}{2}\sigma^2S^2\frac{\partial^2 V}{\partial S^2} \right)\Delta t

Стоит отметить, что в этих выражениях нет изменения случайной величины, то есть мы хеджировали свой портфель или исключили риски. Еще очень важно, чтобы доходность такого портфеля была равна доходности безрискового инструмента, иначе возникнет возможность для арбитража, поэтому:

\DeltaП = rП\Delta t

Теперь подставим, то что мы получили:

\left( -\frac{\partial V}{\partial t} - \frac{1}{2}\sigma^2S^2\frac{\partial^2 V}{\partial S^2} \right)\Delta t=r(-V + \frac{\partial V}{\partial S}S)\Delta t

Сократим на dt получим уравнение Блэка - Шоулза:

\frac{\partial V}{\partial t}+rS\frac{\partial V}{\partial S}+\frac{1}{2}\sigma^2S^2\frac{\partial^2 V}{\partial S^2}=rV

Получили дифференциальное уравнение в частных производных, которое при определенных предположениях совпадает с уравнением диффузии, также оно справедливо для любого типа опционов, если функция V(t,S) дважды непрерывно дифференцируема по S и один раз по t.