Исследование нескольких методов дискретизации Эйлера геометрического уравнения броуновского движения

Геометрическое броуновское движение (GBM) — это широко используемый стохастический процесс в финансах и других областях для моделирования поведения цен на акции, обменных курсов и других постоянно меняющихся величин. Дискретизация Эйлера — это численный метод, который аппроксимирует уравнение GBM путем дискретизации непрерывного процесса на дискретные шаги по времени. В этой статье блога мы рассмотрим несколько методов реализации дискретизации Эйлера уравнения GBM, а также примеры кода на Python.

Метод 1: базовая дискретизация Эйлера
Базовый метод дискретизации Эйлера аппроксимирует уравнение GBM с использованием простой схемы прямых разностей. Вот пример фрагмента кода:

import numpy as np
def euler_discretization_basic(S0, mu, sigma, dt, n):
    t = np.linspace(0, n*dt, n+1)
    W = np.random.standard_normal(size=n+1)
    W = np.cumsum(W)*np.sqrt(dt) # Brownian motion increment
    X = (mu - 0.5 * sigma2) * t + sigma * W
    S = S0 * np.exp(X) # Geometric Brownian Motion
    return S
# Example usage
S0 = 100  # Initial stock price
mu = 0.05  # Drift
sigma = 0.2  # Volatility
dt = 0.01  # Time step size
n = 1000  # Number of steps
S = euler_discretization_basic(S0, mu, sigma, dt, n)

Метод 2: логарифмическая дискретизация Эйлера
Метод логарифмической дискретизации Эйлера позволяет избежать проблем числовой нестабильности за счет работы с логарифмом уравнения GBM. Вот пример фрагмента кода:

import numpy as np
def euler_discretization_log(S0, mu, sigma, dt, n):
    t = np.linspace(0, n*dt, n+1)
    W = np.random.standard_normal(size=n+1)
    W = np.cumsum(W)*np.sqrt(dt) # Brownian motion increment
    X = (mu - 0.5 * sigma2) * t + sigma * W
    S = S0 * np.exp(X) # Geometric Brownian Motion
    return S
# Example usage
S0 = 100  # Initial stock price
mu = 0.05  # Drift
sigma = 0.2  # Volatility
dt = 0.01  # Time step size
n = 1000  # Number of steps
S = euler_discretization_log(S0, mu, sigma, dt, n)

Метод 3: Дискретизация Мильштейна
Метод дискретизации Мильштейна является расширением дискретизации Эйлера, которое учитывает разложение второго порядка уравнения ГБМ. Вот пример фрагмента кода:

import numpy as np
def milstein_discretization(S0, mu, sigma, dt, n):
    t = np.linspace(0, n*dt, n+1)
    W = np.random.standard_normal(size=n+1)
    W = np.cumsum(W)*np.sqrt(dt) # Brownian motion increment
    dW = np.diff(W)
    dW_sq = dW2 - dt
    X = (mu - 0.5 * sigma2) * t + sigma * W
    S = S0 * np.exp(X + 0.5 * sigma * dW + 0.25 * sigma2 * dW_sq) # Geometric Brownian Motion
    return S
# Example usage
S0 = 100  # Initial stock price
mu = 0.05  # Drift
sigma = 0.2  # Volatility
dt = 0.01  # Time step size
n = 1000  # Number of steps
S = milstein_discretization(S0, mu, sigma, dt, n)

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