Рыночная оценка QuantLib: комплексное руководство по методам оценки

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

Метод 1: Модель Блэка-Шоулза
Модель Блэка-Шоулза широко используется для оценки опционов европейского типа. Он предполагает, что базовый актив следует геометрическому броуновскому движению и позволяет рассчитывать цены опционов. Вот пример использования модуля QuantLib Python для оценки рыночной стоимости с использованием модели Блэка-Шоулза:

# Import necessary QuantLib modules
import QuantLib as ql
# Define option parameters
option_type = ql.Option.Call
underlying_price = 100.0
strike_price = 95.0
risk_free_rate = 0.05
volatility = 0.20
maturity_date = ql.Date(31, 12, 2024)
# Create the European option object
option = ql.EuropeanOption(ql.PlainVanillaPayoff(option_type, strike_price), ql.EuropeanExercise(maturity_date))
# Set up the Black-Scholes process
process = ql.BlackScholesProcess(ql.QuoteHandle(ql.SimpleQuote(underlying_price)),
                                ql.YieldTermStructureHandle(ql.FlatForward(0, ql.NullCalendar(), risk_free_rate, ql.Actual365Fixed())),
                                ql.BlackVolTermStructureHandle(ql.BlackConstantVol(0, ql.NullCalendar(), volatility, ql.Actual365Fixed())))
# Calculate the option price
engine = ql.AnalyticEuropeanEngine(process)
option.setPricingEngine(engine)
option_price = option.NPV()
# Print the mark-to-market valuation
print("Mark-to-Market Valuation: ", option_price)

Метод 2: Модель биномиального дерева
Модель биномиального дерева представляет собой модель дискретного времени, которая позволяет оценивать различные типы опционов, включая опционы американского типа. Он дискретизирует время на ряд шагов и предполагает, что цена базового актива может двигаться вверх или вниз на каждом этапе. Вот пример того, как использовать модуль Python QuantLib для проведения рыночной оценки с использованием модели биномиального дерева:

# Import necessary QuantLib modules
import QuantLib as ql
# Define option parameters
option_type = ql.Option.Put
underlying_price = 100.0
strike_price = 95.0
risk_free_rate = 0.05
volatility = 0.20
maturity_date = ql.Date(31, 12, 2024)
steps = 100
# Create the European option object
option = ql.VanillaOption(ql.PlainVanillaPayoff(option_type, strike_price), ql.EuropeanExercise(maturity_date))
# Set up the binomial tree process
process = ql.BlackScholesMertonProcess(ql.QuoteHandle(ql.SimpleQuote(underlying_price)),
                                      ql.YieldTermStructureHandle(ql.FlatForward(0, ql.NullCalendar(), risk_free_rate, ql.Actual365Fixed())),
                                      ql.BlackVolTermStructureHandle(ql.BlackConstantVol(0, ql.NullCalendar(), volatility, ql.Actual365Fixed())))
# Create the binomial tree pricing engine
engine = ql.BinomialVanillaEngine(process, "crr", steps)
option.setPricingEngine(engine)
# Calculate the option price
option_price = option.NPV()
# Print the mark-to-market valuation
print("Mark-to-Market Valuation: ", option_price)

Метод 3: Моделирование Монте-Карло
Моделирование Монте-Карло — это мощный метод оценки сложных финансовых инструментов. Он включает в себя создание случайных путей цен для базового актива и расчет выигрыша инструмента на каждом пути. Взяв среднее значение всех выплат, можно получить оценку стоимости инструмента. Вот пример того, как использовать модуль Python QuantLib для проведения рыночной оценки с использованием моделирования Монте-Карло:

# Import necessary QuantLib modules
import QuantLib as ql
# Define option parameters
option_type = ql.Option.Call
underlying_price = 100.0
strike_price = 95.0
risk_free_rate = 0.05
volatility = 0.20
maturity_date = ql.Date(31, 12, 2024)
num_paths = 10000
# Create the European option object
option = ql.EuropeanOption(ql.PlainVanillaPayoff(option_type, strike_price), ql.EuropeanExercise(maturity_date))
# Set up the Monte Carlo process
process = ql.BlackScholesMertonProcess(ql.QuoteHandle(ql.SimpleQuote(underlying_price)),
                                      ql.YieldTermStructureHandle(ql.FlatForward(0, ql.NullCalendar(), risk_free_rate, ql.Actual365Fixed())),
                                      ql.BlackVolTermStructureHandle(ql.BlackConstantVol(0, ql.NullCalendar(), volatility, ql.Actual365Fixed())))
# Create the Monte Carlo pricing engine
engine = ql.MCEuropeanEngine(process, "pseudorandom", timeSteps=1, requiredSamples=num_paths)
option.setPricingEngine(engine)
# Calculate the option price
option_price = option.NPV()
# Print the mark-to-market valuation
print("Mark-to-Market Valuation: ", option_price)

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