2017-02-04 17 views
0

Я смотрел «везде», но я не могу найти его. Есть ли пример о том, как использовать C++ Quantlib о том, как интерполировать цены опционов на синтетические удары/даты истечения срока действия?Interpolate price/IV для забастовки и истечения срока между датами истечения срока действия рынка и забастовками

Так, например, если «сегодня» - 6 февраля 2017 года, и я получаю массовую цитату цепи опций INTC для истечения срока действия 17 февраля 2017 года, 17 марта 2017 года, 14 апреля 2017 года (и т. Д.), А для ради аргумента говорят, что забастовки в массовой кассе находятся в $ 5 широких инкрементах с 15 до 45, и я вычисляю поверхность IV для этой массовой кавычки для рынка, датой истечения дат/ударов/цен (с использованием некоторой модели), , как интерполировать для __synthetic__ даты истечения срока действия и/или забастовки, скажем, я хочу IV и цену для опции «5 апреля 2017 года, 39.33 удара»?

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

LinearInterpolation (1-D) 
LogLinearInterpolation and LogCubicInterpolation (1-D) 
BackwardFlatInterpolation (1-D) 
ConvexMonotone (1-D) 
CubicInterpolation (1-D) 
ForwardFlatInterpolation (1-D) 
SABRInterpolation (1-D) 
BilinearInterpolation (2-D) 
BicubicSpline (2-D) 

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

Это аналогичная проблема с загрузкой кривой доходности, за исключением того, что мы загружаем размерность удара/тенор между известными значениями на объемной поверхности, до некоторой заданной гранулярности. Также интересно, что мы можем увидеть новые значения изменений в опции путем моделирования изменений базового значения без дополнительной работы [поскольку рыночные данные хранятся в экземплярах котировки и, таким образом, могут уведомлять об этом параметр при изменении любого из параметров) и держа все остальное постоянным. То, что библиотека не поддерживает такой же «симулятор», поворачивая циферблат на удары/тенор, кажется упущением. Это также обратная задача, использующая разные измерения.

Мне нужны как американские, так и европейские с/без дивидендов.

ответ

1

Вы создаете черную поверхность волатильности и позволяете ей интерполировать.

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

volSurface.setInterpolation<Bicubic>(); 

после строительства.

После того, как вы построили поверхность, вы можете использовать ее, чтобы получить волатильность и цены. Чтобы получить волатильность, спросите поверхность:

Volatility v = volSurface.blackVol(exerciseDate, strike); 

будет интерполировать на дату осуществления и нанести удар и вернуть волатильность. Чтобы получить цену, передайте всю поверхность экземпляру процесса Black-Scholes, передайте процесс движку и используйте последний, чтобы оценить опцию; двигатель выберет правильную волатильность для данного упражнения и удара.

+0

Искренне благодарит Луиджи. – Ivan

 Смежные вопросы

  • Нет связанных вопросов^_^