ReplicatingVarianceSwap

Создание ReplicatingVarianceSwap объект ценника для VarianceSwap инструмент с использованием ratecurve объект

Описание

Создайте и оцените VarianceSwap объект инструмента со ratecurve объект и ReplicatingVarianceSwap метод ценообразования с использованием этого рабочего процесса:

  1. Использовать fininstrument для создания VarianceSwap объект прибора.

  2. Использование ratecurve для задания модели кривой для VarianceSwap прибора.

  3. Использовать finpricer для задания ReplicatingVarianceSwap объект ценника для VarianceSwap прибора.

Дополнительные сведения об этом рабочем процессе см. в разделе Запуске с рабочими процессами с использованием объектной среды для ценообразования финансовых инструментов.

Для получения дополнительной информации о доступных методах ценообразования для VarianceSwap инструмент, см. «Выбор инструментов», «Модели» и «Цены».

Создание

Описание

пример

ReplicatingVarianceSwapPricerObj = finpricer(PricerType,'DiscountCurve',ratecurve_obj,'VolatilitySmile',volatilitysmile_value,'SpotPrce',spotprice_value) создает ReplicatingVarianceSwap объект прейскуранта путем определения PricerType и устанавливает свойства с помощью необходимых аргументов пары "имя-значение" DiscountCurve, VolatilitySmile, и SpotPrice.

пример

ReplicatingVarianceSwapPricerObj = finpricer(___,Name,Value) устанавливает необязательные свойства с помощью дополнительных пар "имя-значение" в дополнение к необходимым аргументам в предыдущем синтаксисе. Для примера, ReplicatingVarianceSwapPricerObj = finpricer("ReplicatingVarianceSwap",'DiscountCurve',ratecurve_obj,'VolatilitySmile',smiletable,'SpotPrice',1000,'CallPutBoundary',"forwardprice",'InterpMethod',"cubic") создает ReplicatingVarianceSwap объект прейскуранта. Можно задать несколько аргументы пары "имя-значение".

Входные параметры

расширить все

Тип прейскуранта, заданный как строка со значением "ReplicatingVarianceSwap" или вектор символов со значением 'ReplicatingVarianceSwap'.

Типы данных: char | string

ReplicatingVarianceSwap Аргументы в виде пар имя-значение

Укажите требуемые и необязательные разделенные запятой пары Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: ReplicatingVarianceSwapPricerObj = finpricer("ReplicatingVarianceSwap",'DiscountCurve',ratecurve_obj,'VolatilitySmile',smiletable,'SpotPrice',1000,'CallPutBoundary',"forwardprice",'InterpMethod',"cubic")
Требуемая ReplicatingVarianceSwap Аргументы в виде пар имя-значение

расширить все

Это свойство доступно только для чтения.

ratecurve объект для дисконтирования денежных потоков, заданный как разделенная разделенными запятой парами, состоящая из 'DiscountCurve' и имя ratecurve объект.

Примечание

  • Задайте плоскую ratecurve объект для DiscountCurve. Если вы используете нефлят ratecurve объект, программное обеспечение использует скорость в ratecurve объект в Maturity и принимает, что значение является постоянным для срока службы опции.

  • Программное обеспечение использует Basis значение заданного ratecurve объект для вычисления дисконтирования и начисления для VarianceSwap объект прибора.

Типы данных: object

Таблица улыбки волатильности, заданная как разделенная разделенными запятой парами, состоящая из 'VolatilitySmile' и таблицу со столбцами "Strike" и "Volatility" или NumVols-by- 2 матрица, где первый столбец является ударами, а второй - волатильностями в десятичных числах.

Типы данных: table | double

Спотовая цена базового актива, заданная как разделенная разделенными запятой парами, состоящая из 'SpotPrice' и скаляр неотрицательную цифру.

Примечание

SpotPrice должны быть охвачены областью значений ударов в VolatilitySmile.

Типы данных: double

Необязательные ReplicatingVarianceSwap Аргументы в виде пар имя-значение

расширить все

Граничный удар для опций вызова и размещения, заданный как разделенная разделенными запятой парами, состоящая из 'CallPutBoundary' и скаляр число или один из следующих символьных векторов или строк:

  • "spotprice" - Вызов и пут контур страйк является спот цена.

  • "forwardprice" - Забастовка на контуре вызовов и путь» является форвардной ценой.

Примечание

CallPutBoundary должны быть охвачены областью значений ударов в VolatilitySmile.

Типы данных: double | char | string

Метод интерполяции для SmileTable, заданная как разделенная разделенными запятой парами, состоящая из 'InterpMethod' и скалярный строковый или символьный вектор, использующий поддерживаемое значение. Для получения дополнительной информации о методах интерполяции см. interp1.

Типы данных: char | string

Свойства

расширить все

ratecurve объект для дисконтирования денежных потоков, возвращенный как ratecurve объект.

Примечание

Программное обеспечение использует Basis значение заданного ratecurve объект для вычисления дисконтирования и начисления для VarianceSwap объект прибора.

Типы данных: object

Таблица улыбки волатильности, возвращенная как таблица со столбцами "Strike" и "Volatility" или NumVols-by- 2 матрица, где первый столбец является ударами, а второй - волатильностями в десятичных числах.

Типы данных: table | double

Цена страйка базового актива, возвращаемая в виде скалярного неотрицательного числа.

Типы данных: double

Граничный удар для опций вызова и размещения, возвращаемый как число или как строка со значением "spotprice" или "forwardprice".

Типы данных: double | char | string

Метод интерполяции, возвращенный как скалярная строка.

Типы данных: string

Функции объекта

priceВычислите цену для инструмента капитала с ReplicatingVarianceSwap калькулятор цен

Примеры

свернуть все

Этот пример показывает рабочий процесс, чтобы оценить VarianceSwap инструмент, когда вы используете ratecurve и a ReplicatingVarianceSwap метод ценообразования.

Создание VarianceSwap Объект прибора

Использование fininstrument для создания VarianceSwap объект прибора.

VarianceSwapInst = fininstrument("VarianceSwap",'Maturity',datetime(2021,5,1),'Notional',150,'StartDate',datetime(2020,5,1),'RealizedVariance',0.05,'Strike',0.1,'Name',"variance_swap_instrument")
VarianceSwapInst = 
  VarianceSwap with properties:

            Notional: 150
    RealizedVariance: 0.0500
              Strike: 0.1000
           StartDate: 01-May-2020
            Maturity: 01-May-2021
                Name: "variance_swap_instrument"

Создание ratecurve Объект

Создайте плоскую ratecurve объект, использующий ratecurve.

Settle = datetime(2020, 9, 15);
ZeroTimes = [calmonths(6) calyears([1 2 3 4 5 7 10 20 30])];
ZeroRates = [0.0052 0.0055 0.0061 0.0073 0.0094 0.0119 0.0168 0.0222 0.0293 0.0307]';
ZeroDates = Settle + ZeroTimes;
Basis = 1;
ZeroCurve = ratecurve("zero",Settle,ZeroDates,ZeroRates,'Basis',Basis)
ZeroCurve = 
  ratecurve with properties:

                 Type: "zero"
          Compounding: -1
                Basis: 1
                Dates: [10x1 datetime]
                Rates: [10x1 double]
               Settle: 15-Sep-2020
         InterpMethod: "linear"
    ShortExtrapMethod: "next"
     LongExtrapMethod: "previous"

Создание ReplicatingVarianceSwap Объект прейскуранта

Использование finpricer для создания ReplicatingVarianceSwap и используйте объект pricer ratecurve объект для 'DiscountCurve' аргумент пары "имя-значение".

Strike = (50:5:135)';
Volatility = [.49;.45;.42;.38;.34;.31;.28;.25;.23;.21;.2;.21;.21;.22;.23;.24;.25;.26];
VolatilitySmile = table(Strike, Volatility);
SpotPrice = 100;
CallPutBoundary = 100;

outPricer =  finpricer("ReplicatingVarianceSwap",'DiscountCurve', ZeroCurve, 'VolatilitySmile', VolatilitySmile, ...
'SpotPrice', SpotPrice, 'CallPutBoundary', CallPutBoundary)
outPricer = 
  ReplicatingVarianceSwap with properties:

      DiscountCurve: [1x1 ratecurve]
       InterpMethod: "linear"
    VolatilitySmile: [18x2 table]
          SpotPrice: 100
    CallPutBoundary: 100

Ценовые VarianceSwap Инструмент

Использование price вычислить цену и справедливое отклонение для VarianceSwap прибора.

[Price, outPR] = price(outPricer,VarianceSwapInst,["all"])
Price = 8.1997
outPR = 
  priceresult with properties:

       Results: [1x2 table]
    PricerData: [1x1 struct]

outPR.Results
ans=1×2 table
    Price     FairVariance
    ______    ____________

    8.1997      0.21701   

outPR.PricerData.ReplicatingPortfolio
ans=19×6 table
    CallPut    Strike    Volatility      Weight       Value     Contribution
    _______    ______    __________    __________    _______    ____________

    "put"        50         0.49        0.0064038    0.39164      0.002508  
    "put"        55         0.45        0.0052877    0.49353     0.0026097  
    "put"        60         0.42        0.0044402    0.67329     0.0029895  
    "put"        65         0.38        0.0037814    0.80343     0.0030381  
    "put"        70         0.34        0.0032592     0.9419     0.0030698  
    "put"        75         0.31        0.0028382      1.223     0.0034711  
    "put"        80         0.28        0.0024938       1.58     0.0039403  
    "put"        85         0.25        0.0022086     2.0456     0.0045177  
    "put"        90         0.23        0.0019696     2.9221     0.0057554  
    "put"        95         0.21        0.0017675     4.1406     0.0073183  
    "put"       100          0.2       0.00082405     6.1408     0.0050603  
    "call"      100          0.2       0.00077087     6.4715     0.0049887  
    "call"      105         0.21        0.0014465     4.7094     0.0068119  
    "call"      110         0.21        0.0013178     3.1644     0.0041701  
    "call"      115         0.22        0.0012056      2.307     0.0027814  
    "call"      120         0.23        0.0011072     1.7127     0.0018962  
      ⋮

Подробнее о

расширить все

Алгоритмы

Справедливая стоимость будущей дисперсии K var аппроксимируется с точки зрения следующего портфеля опций ᴨ<reservedrangesplaceholder0> :

Kvar=2T{rT(S0S*erT1)logS*S0+erTπCP}πCP=iw(Kip)P(S,Kip)+iw(Kic)C(S,Kic)

Здесь:

  • Забастовки колл-опциона - забастовка колл-опциона - <reservedrangesplaceholder8> 0 <<reservedrangesplaceholder7> 1 <reservedrangesplaceholder6> <<reservedrangesplaceholder5> 2 <reservedrangesplaceholder4> <<reservedrangesplaceholder3> 3 <reservedrangesplaceholder2>... <<reservedrangesplaceholder1> <reservedrangesplaceholder0>.

  • Put option strikes - put option strikes K mp <... <<reservedrangesplaceholder7> 3 <reservedrangesplaceholder6> <<reservedrangesplaceholder5> 2 <reservedrangesplaceholder4> <<reservedrangesplaceholder3> 1 <reservedrangesplaceholder2> <<reservedrangesplaceholder1> 0 = S *.

  • K var - справедливое значение будущего отклонения

  • ᴨ<reservedrangesplaceholder0> - это портфель вызовов и put

  • S 0 - текущая цена актива

  • S * - граница между ударами по опциону вызова и пут (например, спот-цена S 0 или форвардная цена S 0 erT)

  • P (K) - это текущая цена опции с забастовкой K

  • C (K) - текущий вызов опции цена со страйком K

Если портфель опций ᴨ<reservedrangesplaceholder0> имеет бесконечное количество опций с постоянно изменяющимися ударами, он имеет следующую функцию окупаемости при погашении:

f(ST)=2T[STS*S*logSTS*]

Поскольку невозможно создать такой портфель с бесконечным количеством опций и непрерывно изменяющихся ударов, соответствующие веса w (K ip) и w (K ic) для портфеля с конечным количеством опций и дискретно изменяющимися ударами могут быть вычислены путем аппроксимации непрерывной функции окупаемости f (S T) кусочно-линейным способом. Начиная с удара в K 0, первый вес опции вызова может быть вычислен как наклон первой кусочно-линейной функции:

wc(K0)=f(K1c)f(K0)K1cK0

Следующий вес опции вызова с ударным K 1 c вычисляется как наклон следующей кусочно-линейной функции минус предыдущий вес:

wc(K1c)=f(K2c)f(K1c)K2cK1cwc(K0)

Эта процедура продолжается для остальных вызовов, опции удары:

wc(Kn,c)=f(Kn+1,c)f(Knc)Kn+1,cKn,ci=0n1wc(Ki,c)

Чтобы вычислить веса опциона пут, аналогичная процедура может использоваться в противоположном направлении (начиная с K 0):

wp(Km,p)=f(Km+1,p)f(Kmp)Km,pKm+1,pi=0m1wp(Ki,p)

После вычисления справедливого отклонения фактическая цена, уплаченная на рынке в t времени для свопа отклонений с начальной датой в момент 0, вычисляется следующим образом:

VarianceSwap(t)=Notional×Disc(t,T)×[tTRealizedVariance(0,t)+TtTFairVariance(t,T)StrikeVariance]

Здесь:

  • t - это время от начальной даты свопа отклонений до расчетной даты.

  • T - время от начальной даты до даты погашения свопа отклонений.

  • Disc (t, T) - коэффициент скидки от расчета до даты погашения.

  • RealizedVariance (0, t) - это реализованное отклонение от начальной даты до расчетной даты в базисных точках.

  • FairVariance (t, T) является справедливым отклонением для оставшегося срока действия контракта на дату расчета в базисных точках.

  • StrikeVariance является отклонением удара, заданным в начале (дате начала), в базисных точках.

Ссылки

[1] Demeterfi, K., Derman, E., Kamal, M., and J. Zou. More Than You Ever Wanted To Know About Volatility Swaps (неопр.) (недоступная ссылка). Примечания к исследованию количественных стратегий. Goldman Sachs, 1999.

Введенный в R2020b