This is machine translation

Translated by Microsoft
Mouseover text to see original. Click the button below to return to the English version of the page.

Note: This page has been translated by MathWorks. Please click here
To view all translated materials including this page, select Japan from the country navigator on the bottom of this page.


Determine European rainbow option prices or sensitivities on minimum of two risky assets using Stulz pricing model


PriceSens = minassetsensbystulz(RateSpec,StockSpec1,StockSpec2,Settle,Maturity,OptSpec,Strike,Corr)
PriceSens = minassetsensbystulz(RateSpec,StockSpec1,StockSpec2,Settle,Maturity,OptSpec,Strike,Corr,OutSpec)



The annualized continuously compounded rate term structure. For information on the interest rate specification, see intenvset.


Stock specification for asset 1. See stockspec.


Stock specification for asset 2. See stockspec.


NINST-by-1 vector of settlement or trade dates.


NINST-by-1 vector of maturity dates.


NINST-by-1 cell array of character vectors 'call' or 'put'.


NINST-by-1 vector of strike price values.


NINST-by-1 vector of correlation between the underlying asset prices.


(Optional) All optional inputs are specified as matching parameter name-value pairs. The parameter name is specified as a character vector, followed by the corresponding parameter value. You can specify parameter name-value pairs in any order. Names are case-insensitive and partial matches are allowed provided no ambiguities exist. Valid parameter names are:

  • NOUT-by-1 or 1-by-NOUT cell array of character vectors indicating the nature and order of the outputs for the function. Possible values are 'Price', 'Delta', 'Gamma', 'Vega', 'Lambda', 'Rho', 'Theta', or 'All'.

    For example, OutSpec = {'Price'; 'Lambda'; 'Rho'} specifies that the output should be Price, Lambda, and Rho, in that order.

    To invoke from a function: [Price, Lambda, Rho] = minassetsensbystulz(..., 'OutSpec', {'Price', 'Lambda', 'Rho'})

    OutSpec = {'All'} specifies that the output should be Delta, Gamma, Vega, Lambda, Rho, Theta, and Price, in that order. This is the same as specifying OutSpec as OutSpec = {'Delta', 'Gamma', 'Vega', 'Lambda', 'Rho', 'Theta', 'Price'};.

  • Default is OutSpec = {'Price'}.


PriceSens = minassetsensbystulz(RateSpec,StockSpec1,StockSpec2,Settle,Maturity,OptSpec,Strike,Corr) computes rainbow option prices using the Stulz option pricing model.

PriceSens = minassetsensbystulz(RateSpec,StockSpec1,StockSpec2,Settle,Maturity,OptSpec,Strike,Corr,OutSpec) computes rainbow option prices or sensitivities using the Stulz option pricing model.

PriceSens is a NINST-by-1 or NINST-by-2 vector of expected prices or sensitivities.


collapse all

Consider a European rainbow put option that gives the holder the right to sell either stock A or stock B at a strike of 50.25, whichever has the lower value on the expiration date May 15, 2009. On November 15, 2008, stock A is trading at 49.75 with a continuous annual dividend yield of 4.5% and has a return volatility of 11%. Stock B is trading at 51 with a continuous dividend yield of 5% and has a return volatility of 16%. The risk-free rate is 4.5%. Using this data, if the correlation between the rates of return is -0.5, 0, and 0.5, calculate the price and sensitivity of the minimum of two assets that are European rainbow put options. First, create the RateSpec:

Settle = 'Nov-15-2008';
Maturity = 'May-15-2009';
Rates = 0.045;
Basis = 1;

RateSpec = intenvset('ValuationDate', Settle, 'StartDates', Settle,...
'EndDates', Maturity, 'Rates', Rates, 'Compounding', -1, 'Basis', Basis)
RateSpec = struct with fields:
           FinObj: 'RateSpec'
      Compounding: -1
             Disc: 0.9778
            Rates: 0.0450
         EndTimes: 0.5000
       StartTimes: 0
         EndDates: 733908
       StartDates: 733727
    ValuationDate: 733727
            Basis: 1
     EndMonthRule: 1

Create the two StockSpec definitions.

AssetPriceA = 49.75;
AssetPriceB = 51;
SigmaA = 0.11;
SigmaB = 0.16;
DivA = 0.045; 
DivB = 0.05; 

StockSpecA = stockspec(SigmaA, AssetPriceA, 'continuous', DivA)
StockSpecA = struct with fields:
             FinObj: 'StockSpec'
              Sigma: 0.1100
         AssetPrice: 49.7500
       DividendType: {'continuous'}
    DividendAmounts: 0.0450
    ExDividendDates: []

StockSpecB = stockspec(SigmaB, AssetPriceB, 'continuous', DivB)
StockSpecB = struct with fields:
             FinObj: 'StockSpec'
              Sigma: 0.1600
         AssetPrice: 51
       DividendType: {'continuous'}
    DividendAmounts: 0.0500
    ExDividendDates: []

Calculate price and delta for different correlation levels.

Strike = 50.25;
Corr = [-0.5;0;0.5];
OptSpec = 'put';
OutSpec = {'Price'; 'delta'};
[P, D] = minassetsensbystulz(RateSpec, StockSpecA, StockSpecB,...
Settle, Maturity, OptSpec, Strike, Corr, 'OutSpec', OutSpec)
P = 


D = 

   -0.4183   -0.3496
   -0.3746   -0.3189
   -0.3304   -0.2905

The output Delta has two columns: the first column represents the Delta with respect to the stock A (asset 1), and the second column represents the Delta with respect to the stock B (asset 2). The value 0.4183 represents Delta with respect to the stock A for a correlation level of -0.5. The Delta with respect to stock B, for a correlation of zero is -0.3189.

Introduced in R2009a

Was this topic helpful?