Rainbow Options
Table of Contents
Rainbow options are European calls or puts on the maximum or minimum of a range of assets. ORE documents the family in one catalogue section with sixteen variations, each with its own payoff script. This note records the domain grounding, as ORE documents it in its product catalogue.
1. Identifiers
What a trader books it as, and what to grep for. The codes are the trade type catalogue's, which is what the database enforces.
| Field | Value |
|---|---|
| Full name | Rainbow Options |
| Short name | Rainbow Options |
| ORE Studio product code | FxRainbowOption, EquityRainbowOption, CommodityRainbowOption |
| Asset class | commodity, equity, fx |
| Family | Option |
| ORE trade data node | FxRainbowOptionData, EquityRainbowOptionData, CommodityRainbowOptionData |
| ORE documentation | rainbow_option.tex |
2. Summary
A rainbow option looks at several assets at once and pays off the best or the worst of them. The core forms pay the best or worst of the weighted asset values against a cash alternative, or a call or a put on the maximum or the minimum of the weighted assets. The call spread forms sort the assets by performance, weight them by rank and apply a floor and a cap. One form adds a knock-in barrier, another averages the assets first. Nine worst performance forms complete the family. ORE prices the family on equity, FX and commodity underlyings, in a traditional container or as scripted trades.
3. Detail
3.1. What it is
ORE's catalogue defines rainbow options as European calls or puts on the maximum or minimum of a range of assets, with constant weights per asset. The catalogue opens with a payoff table of the core forms: the best of the weighted assets or cash, the worst of the weighted assets or cash, and calls or puts on the maximum or minimum of the weighted assets. ORE states the two input representations as follows:
Rainbow Options are represented as traditional trades or scripted trades, refer to the scripted trade documentation in ore/Docs/ScriptedTrade for an introduction of the latter.
Source: ORE User Guide, Products catalogue, rainbow_option.tex.
ORE scopes the asset classes and their trade types:
The supported underlying types are Equity, Fx or Commodity resulting in corresponding trade types and trade data container names EquityRainbowOption / EquityRainbowOptionData FxRainbowOption / FxRainbowOptionData CommodityRainbowOption / CommodityRainbowOptionData
Source: ORE User Guide, Products catalogue, rainbow_option.tex.
Trade input and the associated payoff script are described in the following for 12 supported Rainbow Option variations.
Source: ORE User Guide, Products catalogue, rainbow_option.tex.
3.2. In plain terms
A rainbow option is a bet on the spread across several markets. One form pays the best market at the end, with a cash floor. Another pays the worst market, with a cash ceiling. Call and put forms buy or sell the maximum or the minimum of the group. The spread forms rank the markets by their performance, weight the ranks and pay the capped result above a floor. A barrier version only pays when one market has knocked the structure in. An Asian version looks at average levels instead of one final look. The worst performance forms pay the drop of the weakest market, with a reduced loss share below par.
3.3. How it works in ORE
The catalogue's variations are:
- Best Of Asset Or Cash Rainbow Option, script
BestOfAssetOrCashRainbowOption. It pays the greater of the strike and the best weighted asset value at expiry. - Worst Of Asset Or Cash Rainbow Option, script
WorstOfAssetOrCashRainbowOption. It pays the lesser of the strike and the worst weighted asset value at expiry. - Put/Call on Max Rainbow Option, script
MaxRainbowOption. It pays a call or put on the maximum of the weighted asset values against the strike. - Put/Call on Min Rainbow Option, script
MinRainbowOption. It pays a call or put on the minimum of the weighted asset values against the strike. - European Rainbow Call Spread Option, script
EuropeanRainbowCallSpreadOption. It ranks the asset performances, weights them from best to worst, and pays the notional times the capped and floored return. - Rainbow Call Spread Barrier Option, script
RainbowCallSpreadBarrierOption. It adds a knock-in barrier to the call spread, observed on a schedule or at expiry. - Asian Rainbow Call Spread Option, script
AsianRainbowCallSpreadOption. It averages each asset over its averaging dates before the ranking. - Worst Performance Rainbow Option 01 through 09, scripts
WorstPerformanceRainbowOption01through 09. They extend the worst performance structure with further parameters, each variant with its own script.
The first four variations exist in a traditional form. The trade is
one of EquityRainbowOption, FxRainbowOption or
CommodityRainbowOption with the matching data node. In the example
below the option on the best of two equity indices uses
EquityRainbowOptionData. The node carries Currency, the pay
currency; Notional, the quantity for equity and commodity
underlyings or the foreign amount for an FX underlying; Strike,
the cash level of the payoff; Underlyings, the basket with one
Weight per underlying; and OptionData. The OptionData node
carries the long or short flag, the payoff type, which must name the
variation, and exactly one exercise date. Settlement is the
settlement date, optional and defaulting to the exercise date.
The call spread and worst performance variations exist only as
scripted trades. Every variation has a data node under the
ScriptedTrade trade type, named after the variation, with typed
fields. List fields such as Underlyings and Weights hold their
values under repeated Value elements, in the same order. Each data
node names its payoff script, and the catalogue lists the script in
full. PayCcy is the payment currency. For FX the underlying name
has the form FX-SOURCE-CCY1-CCY2 and PayCcy should be CCY2.
Choosing CCY1, or the underlying currency for equity and commodity
underlyings, produces a quanto payoff.
3.4. Mathematical notes
ORE writes the prices of the n assets at expiry as S-1 to S-n, their initial prices with a zero superscript, and constant weights w-1 to w-n. A plus-one omega marks a call and a minus-one omega marks a put.
The core payoffs of the payoff table are:
- Best of asset or cash: the maximum of the weighted asset values and the cash level K, that is max(w-1 S-1, …, w-n S-n, K).
- Worst of asset or cash: the minimum of the weighted asset values and the cash level K.
- Call or put on the maximum: the positive part of omega times the maximum of the weighted asset values minus K.
- Call or put on the minimum: the same form on the minimum of the weighted asset values.
The European rainbow call spread ranks each asset's performance, the ratio of its price at expiry to its initial strike. The return is the weighted sum of the ranked performances, with the weights applied from the best performer to the worst. The payout is the notional times the return minus one, floored at the floor and capped at the cap. The barrier version strikes the return at a strike instead of one, applies a gearing multiplier, and multiplies the payout by a knock-in indicator. The knock-in fires when any asset's performance touches the barrier level; a Bermudan flag chooses observation on a schedule, and the alternative checks once at expiry. The Asian version replaces each asset's final price by its average over the averaging dates, then applies the same ranking, floor and cap.
The worst performance option 01 observes the basket once, on the observation date. The worst performance is the minimum over the assets of the final price over the initial price. The payout is the quantity times the worst performance minus one. When the worst performance is below one, the payout is scaled by the payoff multiplier, which reduces the loss share. The option value is the long-short signed difference between the payoff, settled on the settlement date, and the premium, paid on the premium date. The variants 02 to 09 extend this core: 02 adds a floor; 03 and 04 add a strike, a cap, a floor and a Bermudan barrier with level and schedule; 05 adds a put or call flag with a barrier type and level; 06 adds strike prices, barrier levels, knock-in prices and a bonus coupon; 07 adds two fixed rates with a day count fraction, strike prices and trigger levels over determination dates; 08 is a call or put on the worst performance against strike prices; 09 adds knock-out levels on barrier dates to that form.
3.5. What moves its value (static sensitivities)
- The levels of the underlyings at expiry, or on their averaging dates.
- The weights of the underlyings, and the rank order in the spread forms.
- The initial prices and initial strikes, which anchor the performances.
- The cash level or strike, the floor, the cap and the gearing.
- The barrier level and the barrier style of the barrier form.
- The volatility of each underlying and the correlation between them. Both shape the spread of the best and worst performers.
- The payoff multiplier of the worst performance forms.
- The interest rates that discount the payoff and the premium.
3.6. How the profile ages (dynamic sensitivities)
The averaging forms fix their asset levels on each averaging date. A barrier form watches its schedule until a knock-in fires. The expiry date decides the terminal levels, the ranking and the payoff branch. The worst performance forms fix the basket on their observation date. The settlement date settles the payoff, and the premium date settles the premium.
3.7. Why a customer would want it
A rainbow option prices a view on several assets with one payoff. The best of forms buy the strongest market with a cash floor. The worst performance forms give access to a diversified basket at a lower cost, with a capped loss share. The spread forms pay the spread of the ranked field. Banks use the family in structured notes that reference a basket of indices. In ORE Studio a customer books rainbow options to value them and run sensitivities on the ORE engine.
3.8. Example
ORE's catalogue shows the best of asset or cash form on two equity indices. The trade compares the S&P 500 and the Euro Stoxx 50 at expiry and pays the better weighted level, but at least the strike of
- The S&P index is quoted in USD, the Euro Stoxx index carries
its EUR currency, and the pay currency is USD:
<Trade id="BestOfAssetOrCashRainbowOption#1"> <TradeType>EquityRainbowOption</TradeType> <Envelope> <CounterParty>CPTY_A</CounterParty> <NettingSetId>CPTY_A</NettingSetId> <AdditionalFields/> </Envelope> <EquityRainbowOptionData> <Currency>USD</Currency> <Notional>1</Notional> <Strike>2000</Strike> <Underlyings> <Underlying> <Type>Equity</Type> <Name>RIC:.SPX</Name> <Weight>1.0</Weight> </Underlying> <Underlying> <Type>Equity</Type> <Name>RIC:.STOXX50E</Name> <Currency>EUR</Currency> <Weight>1.0</Weight> </Underlying> </Underlyings> <OptionData> <LongShort>Long</LongShort> <PayoffType>BestOfAssetOrCash</PayoffType> <ExerciseDates> <ExerciseDate>2020-02-15</ExerciseDate> </ExerciseDates> </OptionData> <Settlement>2020-02-20</Settlement> </EquityRainbowOptionData> </Trade>
ORE prices the payoff with the BestOfAssetOrCashRainbowOption
script. The script starts the best price at the strike, scans the
basket and keeps the highest weighted price, then pays the long or
short signed notional times that level on the settlement date:
REQUIRE SIZE(Underlyings) == SIZE(Weights);
NUMBER u, thisPrice, bestPrice, Payoff, currentNotional;
bestPrice = Strike;
FOR u IN (1, SIZE(Underlyings)) DO
thisPrice = Underlyings[u](Expiry) * Weights[u];
IF thisPrice > bestPrice THEN
bestPrice = thisPrice;
END;
END;
Option = LongShort * Notional * PAY(bestPrice, Expiry, Settlement, PayCcy);
currentNotional = Notional * Strike;
Source: ORE User Guide, Products catalogue, rainbow_option.tex,
listing Payoff script for a BestOfAssetOrCashRainbowOption. The
trade listing above it shows the same option in the traditional
container, with a notional of 1 and a strike of 2000. The same trade
exists as a scripted trade with a BestOfAssetOrCashRainbowOptionData
node and typed fields.
4. See also
- Knowledge — the hub of all knowledge notes, with the alphabetical product run.
- ORE User Guide, Product catalogue: products.tex, which inputs rainbow_option.tex. The upstream project is OpenSourceRisk/Engine.