Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Vineet Kumar EquityProductModifications (CDM 6) #3218

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions rosetta-source/src/main/rosetta/product-asset-type.rosetta
Original file line number Diff line number Diff line change
Expand Up @@ -209,10 +209,10 @@ type InterestRatePayout extends PayoutBase: <" A class to specify all of the ter
then compoundingMethod exists

condition FpML_ird_9: <"FpML validation rule ird-9 - If calculationPeriodAmount/calculation/compoundingMethod exists, then resetDates must exist.">
if compoundingMethod exists then resetDates exists
if compoundingMethod exists and compoundingMethod <> CompoundingMethodEnum -> None then resetDates exists

condition FpML_ird_29: <"FpML validation rule ird-29 - If compoundingMethod exists, then fixedRateSchedule must not exist.">
if compoundingMethod exists
if compoundingMethod exists and compoundingMethod <> CompoundingMethodEnum -> None
then rateSpecification -> FixedRateSpecification is absent

condition CalculationPeriodDatesFirstCompoundingPeriodEndDate: <"FpML specifies that the firstCompoundingPeriodEndDate must only be specified when the compounding method is specified and not equal to a value of None.">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,8 @@ func Qualify_AssetClass_Commodity: <"Qualifies a product as having the Asset Cla
))
// Commodity Spot or Forward
or (((economicTerms -> payout -> settlementPayout, economicTerms -> payout -> fixedPricePayout) only exists
or (economicTerms -> payout -> settlementPayout, economicTerms -> payout -> commodityPayout) only exists)
or (economicTerms -> payout -> settlementPayout, economicTerms -> payout -> commodityPayout) only exists
or economicTerms -> payout -> settlementPayout only exists)
and (economicTerms -> payout -> settlementPayout -> underlier -> Observable -> Asset -> Commodity exists
or settlementUnderlier -> Product -> TransferableProduct -> Commodity exists
or if settlementUnderlier -> Product ->> economicTerms exists
Expand Down Expand Up @@ -720,7 +721,10 @@ func Qualify_EquityOption_PriceReturnBasicPerformance_SingleName: <"Qualifies a
and optionUnderlier -> Observable -> Asset -> Instrument -> Security only exists
// qualifies that no feature other than averaging exists
and (economicTerms -> payout -> optionPayout -> feature is absent
or economicTerms -> payout -> optionPayout -> feature -> averagingFeature only exists)
or economicTerms -> payout -> optionPayout -> feature -> averagingFeature only exists
or economicTerms -> payout -> optionPayout -> feature -> fxFeature only-element -> quanto exists
or economicTerms -> payout -> optionPayout -> feature -> fxFeature only-element -> composite exists)
lolabeis marked this conversation as resolved.
Show resolved Hide resolved
and (if economicTerms -> nonStandardisedTerms exists then economicTerms -> nonStandardisedTerms = False else True)

func Qualify_EquityOption_PriceReturnBasicPerformance_Index: <"Qualifies a product as an Equity Option with an index as underlier. The determination of the qualification is based on the economic terms and the following criteria: 1) An option product for which the underlier is an index and 2) No special option feature exists other than option averaging.">
[qualification Product]
Expand All @@ -738,7 +742,10 @@ func Qualify_EquityOption_PriceReturnBasicPerformance_Index: <"Qualifies a produ
and economicTerms -> payout -> optionPayout only-element -> underlier -> Observable -> Index -> EquityIndex exists
// qualifies that no feature other than averaging exists
and (economicTerms -> payout -> optionPayout -> feature is absent
or economicTerms -> payout -> optionPayout -> feature -> averagingFeature only exists)
or economicTerms -> payout -> optionPayout -> feature -> averagingFeature only exists
or economicTerms -> payout -> optionPayout -> feature -> fxFeature only-element -> quanto exists
or economicTerms -> payout -> optionPayout -> feature -> fxFeature only-element -> composite exists)
and (if economicTerms -> nonStandardisedTerms exists then economicTerms -> nonStandardisedTerms = False else True)

func Qualify_EquityOption_PriceReturnBasicPerformance_Basket: <"Qualifies a product as an Equity Option with a basket underlier. The determination of the qualification is based on the economic terms and the following criteria: 1) An option product for which the underlier is a basket and 2) No special option feature exists other than option averaging.">
[qualification Product]
Expand All @@ -756,7 +763,10 @@ func Qualify_EquityOption_PriceReturnBasicPerformance_Basket: <"Qualifies a prod
and economicTerms -> payout -> optionPayout only-element -> underlier -> Observable -> Basket exists
// qualifies that no feature other than averaging exists
and (economicTerms -> payout -> optionPayout -> feature is absent
or economicTerms -> payout -> optionPayout -> feature -> averagingFeature only exists)
or economicTerms -> payout -> optionPayout -> feature -> averagingFeature only exists
or economicTerms -> payout -> optionPayout -> feature -> fxFeature only-element -> quanto exists
or economicTerms -> payout -> optionPayout -> feature -> fxFeature only-element -> composite exists)
and (if economicTerms -> nonStandardisedTerms exists then economicTerms -> nonStandardisedTerms = False else True)

func Qualify_EquityOption_ParameterReturnVariance_SingleName: <"Qualifies a product as an Equity Variance Single Name Option. The determination of the qualification is based on the economic terms and the following criteria: 1) The product contains a single option payout and 2) the underlying product is a Single Name Equity Variance Swap">
[qualification Product]
Expand Down Expand Up @@ -933,6 +943,19 @@ func Qualify_EquityOption_ParameterReturnDividend_Basket: <"Qualifies a product
// qualifies that the underlier is a single name dividend swap
and Qualify_EquitySwap_ParameterReturnDividend_Basket(underlierEconomicTerms) = True

func Qualify_Equity_OtherOption: <"Qualifies a product with properties of an Exotic Option as Equity Option (Other)">
[qualification Product]
inputs:
economicTerms EconomicTerms (1..1)
output:
is_product boolean (1..1)
[synonym ISDA_Taxonomy_v1 value "Qualify_EquityOther"]
[synonym ISDA_Taxonomy_v2 value "Qualify_EquityOther"]
set is_product:
Qualify_AssetClass_Equity(economicTerms) = True
and economicTerms -> payout -> optionPayout only exists
and economicTerms -> nonStandardisedTerms = True

func Qualify_BaseProduct_IRSwap: <"Qualifies a product as having the Base Product classification Interest Rate Swap.">
inputs:
economicTerms EconomicTerms (1..1)
Expand Down Expand Up @@ -1678,4 +1701,6 @@ func Qualify_Commodity_Forward: <"Qualifies a product as a Forward that will be
Qualify_AssetClass_Commodity(economicTerms) = True
and ((economicTerms -> payout -> settlementPayout, economicTerms -> payout -> fixedPricePayout) only exists
or // Fixed Price Forward
(economicTerms -> payout -> settlementPayout, economicTerms -> payout -> commodityPayout) only exists) // Floating Price Forward
(economicTerms -> payout -> settlementPayout, economicTerms -> payout -> commodityPayout) only exists // Floating Price Forward
or // Price Return Vanilla Forward
(economicTerms -> payout -> settlementPayout only exists))
Original file line number Diff line number Diff line change
Expand Up @@ -260,6 +260,7 @@ type Payout: <"Represents the set of future cashflow methodologies in the form o
if optionPayout exists
then optionPayout -> priceQuantity exists
or optionPayout -> underlier -> Product ->> economicTerms -> payout -> interestRatePayout count = 2
or optionPayout -> underlier -> Observable -> Asset -> Cash exists

condition DayCountFraction: <"FpML specifies a required dayCountFraction element as part of the swapStream/calculationPeriodAmount/calculation. As standardized CDS don't have such specified day count fraction, the cardinality has been relaxed as part of the CDM. This data rule specifies that if the product has two interest rate streams, this provision must exist.">
if interestRatePayout count = 2
Expand Down Expand Up @@ -722,7 +723,7 @@ type ExerciseTerms: <"A class defining the exercise period for an option togethe
earliestExerciseTime BusinessCenterTime (0..1) <"The earliest time at which notice of exercise can be given by the buyer to the seller (or seller's agent) to, and including, the expiration date.">
latestExerciseTime BusinessCenterTime (0..1) <"For a Bermuda or American style option, the latest time on an exercise business day (excluding the expiration date) within the exercise period that notice can be given by the buyer to the seller or seller's agent. Notice of exercise given after this time will be deemed to have been given on the next exercise business day.">
expirationTime BusinessCenterTime (1..1) <"The latest time for exercise on expirationDate. It is made mandatory given that for all option styles, this field is required.">
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The expirationTime attribute needs to be made optional, and the condition over its absence or existence in relation to expirationTimeType be reinstated

expirationTimeType ExpirationTimeTypeEnum (0..1) <"The time of day at which the equity option expires, for example the official closing time of the exchange.">
expirationTimeType ExpirationTimeTypeEnum (1..1) <"The time of day at which the equity option expires, for example the official closing time of the exchange.">
multipleExercise MultipleExercise (0..1) <"As defined in the 2000 ISDA Definitions, Section 12.4. Multiple Exercise, the buyer of the option has the right to exercise all or less than all the unexercised notional amount of the underlying swap on one or more days in the exercise period, but on any such day may not exercise less than the minimum notional amount or more that the maximum notional amount, and if an integral multiple amount is specified, the notional amount exercised must be equal to, or be an integral multiple of, the integral multiple amount.">
exerciseFeeSchedule ExerciseFeeSchedule (0..1) <"The fees associated with an exercise date. The fees are conditional on the exercise occurring. The fees can be specified as actual currency amounts or as percentages of the notional amount being exercised.">
exerciseProcedure ExerciseProcedure (0..1) <"The set of parameters defining the procedure associated with the exercise, e.g. manual exercise.">
Expand Down Expand Up @@ -758,7 +759,7 @@ type ExerciseTerms: <"A class defining the exercise period for an option togethe
and exerciseFee is absent

type AutomaticExercise: <"A type to define automatic exercise of a swaption. With automatic exercise the option is deemed to have exercised if it is in the money by more than the threshold amount on the exercise date.">

thresholdRate number (0..1) <"A threshold rate. The threshold of 0.10% would be represented as 0.001">
isApplicable boolean (0..1) <"Boolean that indicates if it has an automaticExercise">

Expand Down