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. Click here to see
To view all translated materials including this page, select Country from the country navigator on the bottom of this page.


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


PriceSens = maxassetsensbystulz(RateSpec,StockSpec1,StockSpec2,Settle,Maturity,OptSpec,Strike,Corr)
PriceSens = maxassetsensbystulz(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] = maxassetsensbystulz(..., '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 = maxassetsensbystulz(RateSpec,StockSpec1,StockSpec2,Settle,Maturity,OptSpec,Strike,Corr) computes rainbow option prices using the Stulz option pricing model.

PriceSens = maxassetsensbystulz(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 values.


collapse all

Consider a European rainbow option that gives the holder the right to buy either $100,000 of an equity index at a strike price of 1000 (asset 1) or $100,000 of a government bond (asset 2) with a strike price of 100% of face value, whichever is worth more at the end of 12 months. On January 15, 2008, the equity index is trading at 950, pays a dividend of 2% annually, and has a return volatility of 22%. Also on January 15, 2008, the government bond is trading at 98, pays a coupon yield of 6%, and has a return volatility of 15%. The risk-free rate is 5%. Using this data, calculate the price and sensitivity of the European rainbow option if the correlation between the rates of return is -0.5, 0, and 0.5.

Since the asset prices in this example are in different units, it is necessary to work in either index points (for asset 1) or in dollars (for asset 2). The European rainbow option allows the holder to buy the following: 100 units of the equity index at $1000 each (for a total of $100,000) or 1000 units of the government bonds at $100 each (for a total of $100,000). To convert the bond price (asset 2) to index units (asset 1), you must make the following adjustments:

  • Multiply the strike price and current price of the government bond by 10 (1000/100).

  • Multiply the option price by 100, considering that there are 100 equity index units in the option.

Once these adjustments are introduced, the strike price is the same for both assets ($1000). First, create the RateSpec:

Settle = 'Jan-15-2008';
Maturity = 'Jan-15-2009';
Rates = 0.05;
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.9512
            Rates: 0.0500
         EndTimes: 1
       StartTimes: 0
         EndDates: 733788
       StartDates: 733422
    ValuationDate: 733422
            Basis: 1
     EndMonthRule: 1

Create the two StockSpec definitions.

AssetPrice1 = 950;   % Asset 1 => Equity index
AssetPrice2 = 980;   % Asset 2 => Government bond
Sigma1 = 0.22;
Sigma2 = 0.15;
Div1 = 0.02; 
Div2 = 0.06; 

StockSpec1 = stockspec(Sigma1, AssetPrice1, 'continuous', Div1)
StockSpec1 = struct with fields:
             FinObj: 'StockSpec'
              Sigma: 0.2200
         AssetPrice: 950
       DividendType: {'continuous'}
    DividendAmounts: 0.0200
    ExDividendDates: []

StockSpec2 = stockspec(Sigma2, AssetPrice2, 'continuous', Div2)
StockSpec2 = struct with fields:
             FinObj: 'StockSpec'
              Sigma: 0.1500
         AssetPrice: 980
       DividendType: {'continuous'}
    DividendAmounts: 0.0600
    ExDividendDates: []

Calculate the price and delta for different correlation levels.

Strike = 1000 ; 
Corr = [-0.5; 0; 0.5];
OutSpec = {'price'; 'delta'};
OptSpec = 'call';
[Price, Delta] = maxassetsensbystulz(RateSpec, StockSpec1, StockSpec2,...
Settle, Maturity, OptSpec, Strike, Corr,'OutSpec', OutSpec)
Price = 3×1


Delta = 3×2

    0.4594    0.3698
    0.4292    0.3166
    0.4053    0.2512

The output Delta has two columns: the first column represents the Delta with respect to the equity index (asset 1), and the second column represents the Delta with respect to the government bond (asset 2). The value 0.4595 represents Delta with respect to one unit of the equity index. Since there are 100 units of the equity index, the overall Delta would be 45.94 (100 * 0.4594 ) for a correlation level of -0.5. To calculate the Delta with respect to the government bond, remember that an adjusted price of 980 was used instead of 98. Therefore, for example, the Delta with respect to government bond, for a correlation of 0.5 would be 251.2 (0.2512 * 100 * 10 ).

Introduced in R2009a