Sunday, March 23, 2014

European style Interest Rate Swaption pricing using - Python-Quantlib


In previous posts, I have described how to construct USD LIBOR Swap Yield curve then we have looked at how to price an interest rate swap. In this note I will discuss what is European Swaption and how to value such a product using Quantlib.

Product Description:

 European Swaptions are instruments that give holder of the option right to Pay or receive fixed rate. This option can be classified into two different types. Payer Swaption in which option buyer gets right to receive fixed rate and pay floating rate at the exercise date if exercised. Receiver Swaption works exactly opposite to the payer swaption where the option holder has the right to receive fixed rate.


Variety of players,including, Hedge funds, banks and pension funds are actively participating in this market to monetize their views on the shapes of yield curve or conduct risk management of their existing portfolios. Consequently it becomes imperative to know if the price they are paying or getting on the swaption is right. To understand this one has to have a tool set to price a swaption.

Pricing and Modeling of the Swaption:

 I have covered some details with regards to how to price a 5y into 5y ATM (at the money) swaption. To be able to value this swaption, I have constructed an yield curve ( with the details of the instruments and curve construction provided below) and then priced a 5y forward 5y swap. Then applying a 15.3% implied volatility I have priced a payer swaption yielding price of 23,162. In general these long dated swaptions are vega sesitive. In other words they appreciate or depreciate when Implied volatility changes significantly. To understand this effect,I have changed the price of the option to 60,000 and implied volatility changed to 40%. Calculations for how to perform these computations are provided step by step using python and Quantlib.
Feel free to use these in your calculation or learning process. Also available other articles on this blog that discuss nuances of swaption market, pricing model and risk management.

# Copyright (C) 2014, Khandrika Capital Markets

# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE.  See the license for more details.

from QuantLib import *
import datetime
import numpy as np
import matplotlib.pyplot as plt


# global data
# Here enter the Yield Curve reference Data
calendar = TARGET()
todaysDate = Date(28,February,2014);
Settings.instance().evaluationDate = todaysDate
settlementDate = Date(4,March,2014);

# market quotes
# Update deposit Rates ( usual source will be LIBOR Fixings on the Curve Date
deposits = { (1,Weeks): 0.0023,
             (1,Months): 0.0023,
             (3,Months): 0.0023,
             (6,Months): 0.0023}
# Obtain Futures prices from CME traded Euro Dollar Futures
futures = { Date(19,3,2014): 99.765,
            Date(18,6,2014): 99.75,
            Date(17,9,2014): 99.73,
            Date(17,12,2014): 99.69,
            Date(18,3,2015): 99.605,
            Date(17,6,2015): 99.47,
            Date(16,9,2015): 99.3,
            Date(16,12,2015): 99.085 }
# Obtain Swap rates from Traded Swaps on the Curve data
swaps = { (3,Years): 0.0079,
          (4,Years): 0.012,
          (5,Years): 0.0157,
          (6,Years): 0.01865,
          (7,Years): 0.0216,
          (8,Years): 0.0235,
          (9,Years): 0.0254,
          (10,Years): 0.0273,
          (15,Years): 0.0297,
          (20,Years): 0.0316,
          (25,Years): 0.0335,
          (30,Years): 0.0354}

# convert them to Quote objects
for n,unit in deposits.keys():
    deposits[(n,unit)] = SimpleQuote(deposits[(n,unit)])
for d in futures.keys():
    futures[d] = SimpleQuote(futures[d])
for n,unit in swaps.keys():
    swaps[(n,unit)] = SimpleQuote(swaps[(n,unit)])

# build rate helpers

dayCounter = Actual360()
settlementDays = 2
depositHelpers = [ DepositRateHelper(QuoteHandle(deposits[(n,unit)]),
                                     Period(n,unit), settlementDays,
                                     calendar, ModifiedFollowing,
                                     False, dayCounter)
                   for n, unit in [(1,Weeks),(1,Months),(3,Months),
                                   (6,Months)] ]

dayCounter = Actual360()
months = 3
futuresHelpers = [ FuturesRateHelper(QuoteHandle(futures[d]),
                                     d, months,
                                     calendar, ModifiedFollowing,
                                     True, dayCounter,
                                     QuoteHandle(SimpleQuote(0.0)))
                   for d in futures.keys() ]

settlementDays = 2
fixedLegFrequency = Semiannual
fixedLegTenor = Period(6,Months)
fixedLegAdjustment = Unadjusted
fixedLegDayCounter = Thirty360()
floatingLegFrequency = Quarterly
floatingLegTenor = Period(3,Months)
floatingLegAdjustment = ModifiedFollowing
swapHelpers = [ SwapRateHelper(QuoteHandle(swaps[(n,unit)]),
                               Period(n,unit), calendar,
                               fixedLegFrequency, fixedLegAdjustment,
                               fixedLegDayCounter, Euribor3M())
                for n, unit in swaps.keys() ]

# term structure handles

discountTermStructure = RelinkableYieldTermStructureHandle()
forecastTermStructure = RelinkableYieldTermStructureHandle()

# term-structure construction

helpers = depositHelpers[:2] + futuresHelpers + swapHelpers[1:]
depoFuturesSwapCurve = PiecewiseFlatForward(settlementDate, helpers,
                                            Actual360())
print depoFuturesSwapCurve.dates()
df=[]
dates1=[]
for c in depoFuturesSwapCurve.dates():
    df.append(depoFuturesSwapCurve.discount(c))
    dates1.append(c)
    print depoFuturesSwapCurve.discount(c)

termStructure = YieldTermStructureHandle(depoFuturesSwapCurve)

    

#End of Yield Curve Construction

#Begin building forward Curve

# Forward swap underlying the Swaption to be priced
# In this case I am pricing a 5y into 5Y swap
swapEngine = DiscountingSwapEngine(discountTermStructure)

nominal = 1000000
length = 5
maturity = calendar.advance(settlementDate,length,Years)
payFixed = True

fixedLegFrequency = Semiannual
fixedLegAdjustment = Unadjusted
fixedLegDayCounter = Thirty360()

floatingLegFrequency = Quarterly
spread = 0.0
fixingDays = 2
index = Euribor3M(forecastTermStructure)
floatingLegAdjustment = ModifiedFollowing
floatingLegDayCounter = index.dayCounter()

#ATM forward Rate
fixedRate = 0.040852

forwardStart = calendar.advance(settlementDate,5,Years)
forwardEnd = calendar.advance(forwardStart,length,Years)
fixedSchedule = Schedule(forwardStart, forwardEnd,
                         fixedLegTenor, calendar,
                         fixedLegAdjustment, fixedLegAdjustment,
                         DateGeneration.Forward, False)
floatingSchedule = Schedule(forwardStart, forwardEnd,
                            floatingLegTenor, calendar,
                            floatingLegAdjustment, floatingLegAdjustment,
                            DateGeneration.Forward, False)

forward = VanillaSwap(VanillaSwap.Payer, nominal,
                      fixedSchedule, fixedRate, fixedLegDayCounter,
                      floatingSchedule, index, spread,
                      floatingLegDayCounter)
forward.setPricingEngine(swapEngine)




def formatPrice(p,digits=2):
    format = '%%.%df' % digits
    return format % p

def formatRate(r,digits=2):
    format = '%%.%df %%%%' % digits
    return format % (r*100)

headers = ("term structure", "net present value",
           "fair spread", "fair fixed rate" )
separator = " | "

format = ''
width = 0
for h in headers[:-1]:
    format += '%%%ds' % len(h)
    format += separator
    width += len(h) + len(separator)
format += '%%%ds' % len(headers[-1])
width += len(headers[-1])

rule = "-" * width
dblrule = "=" * width
tab = " " * 8

def report(swap, name):
    print format % (name, formatPrice(swap.NPV(),2),
                    formatRate(swap.fairSpread(),4),
                    formatRate(swap.fairRate(),4))

print dblrule
print "5-year market Spot swap-rate = %s" % formatRate(swaps[(5,Years)].value())
print dblrule

discountTermStructure.linkTo(depoFuturesSwapCurve)
forecastTermStructure.linkTo(depoFuturesSwapCurve)
report(forward,'depo-fut-swap')


##############################################
# Bulding the European Swaption pricer part

exercise = maturity
exercised = EuropeanExercise(exercise)
settlementtype="physical"
atmswaption = Swaption(forward,exercised)
#Applying a 15.3% implied volatility to 5y into 5y ATM swaption
vol1  = QuoteHandle(SimpleQuote(0.1533))
atmswaption.setPricingEngine(BlackSwaptionEngine(termStructure,vol1))
print atmswaption.NPV()

#*****************************
#Now given Market Premium implying the underlying volatility

index = Euribor3M(termStructure)
#Place holder for the iterator to hold the implied volatility in the
#swaption Helper
swaptionVols = [ # maturity,          length,             volatility
                 (Period(5, Years), Period(5, Years), 0.1533)]

helpers = [ SwaptionHelper(maturity, length,
                           QuoteHandle(SimpleQuote(vol)),
                           index, index.tenor(), index.dayCounter(),
                           index.dayCounter(), termStructure)
                    for maturity, length, vol in swaptionVols ]

for swaption, helper in zip(swaptionVols, helpers):
        maturity, length, vol = swaption
        print swaption
        helper.setPricingEngine(BlackSwaptionEngine(termStructure,vol1))
        NPV = helper.modelValue()
        print NPV
        NPV=0.06   # here we are adding a premium of 60,000 per 1 MM Notional
        implied = helper.impliedVolatility(NPV, 1.0e-4, 1000, 0.05, 0.50)
        print implied

Friday, March 21, 2014

Interest Rate Swap - Pricing - Python +Quanlib


In previous note we have understood basic building blocks of an Yield Curve. Now using that Yield Curve we will look into modeling an Interest Rate Swap. Here I am considering a Plain Vanilla style USD 5y interest rate swap with 1,000,000 Notional. This Note pays Fixed rate of 1.57% per annum coupon semi annually and receives 3M Libor quarterly.
Below is the Code used to price up this swap. This code needs to be executed along with the code that has been implemented in the Yield curve note.
swapEngine = DiscountingSwapEngine(discountTermStructure)

nominal = 1000000
length = 5
maturity = calendar.advance(settlementDate,length,Years)
payFixed = True

fixedLegFrequency = Semiannual
fixedLegAdjustment = Unadjusted
fixedLegDayCounter = Thirty360()
fixedRate = 0.0157

floatingLegFrequency = Quarterly
spread = 0.0
fixingDays = 2
index = Euribor6M(forecastTermStructure)
floatingLegAdjustment = ModifiedFollowing
floatingLegDayCounter = index.dayCounter()

fixedSchedule = Schedule(settlementDate, maturity,
                         fixedLegTenor, calendar,
                         fixedLegAdjustment, fixedLegAdjustment,
                         DateGeneration.Forward, False)
floatingSchedule = Schedule(settlementDate, maturity,
                            floatingLegTenor, calendar,
                            floatingLegAdjustment, floatingLegAdjustment,
                            DateGeneration.Forward, False)

spot = VanillaSwap(VanillaSwap.Payer, nominal,
                   fixedSchedule, fixedRate, fixedLegDayCounter,
                   floatingSchedule, index, spread,
                   floatingLegDayCounter)
spot.setPricingEngine(swapEngine)


def formatPrice(p,digits=2):
    format = '%%.%df' % digits
    return format % p

def formatRate(r,digits=2):
    format = '%%.%df %%%%' % digits
    return format % (r*100)

headers = ("term structure", "net present value",
           "fair spread", "fair fixed rate" )
separator = " | "

format = ''
width = 0
for h in headers[:-1]:
    format += '%%%ds' % len(h)
    format += separator
    width += len(h) + len(separator)
format += '%%%ds' % len(headers[-1])
width += len(headers[-1])

rule = "-" * width
dblrule = "=" * width
tab = " " * 8

def report(swap, name):
    print format % (name, formatPrice(swap.NPV(),2),
                    formatRate(swap.fairSpread(),4),
                    formatRate(swap.fairRate(),4))

print dblrule
print "5-year market swap-rate = %s" % formatRate(swaps[(5,Years)].value())
print dblrule
print "Term Structure\t" + "Swap Value\t" + "Swap Spread\t" + "Swap Rate\t"

discountTermStructure.linkTo(depoFuturesSwapCurve)
forecastTermStructure.linkTo(depoFuturesSwapCurve)
report(spot,'depo-fut-swap')

Thursday, March 20, 2014

Effective and Better SDR (Swap Data Repository) reporting for CFTC Regulator

·         6351-01-P
COMMODITY FUTURES TRADING COMMISSION
17 CFR Chapter I
RIN 3038-AE12
Request for Comment on Part 45 and Related Provisions of the Commission’s Swap Data Reporting Rules
AGENCY: Commodity Futures Trading Commission.
ACTION: Request for comment.
SUMMARY: On January 21, 2014, the Commodity Futures Trading Commission (“Commission” or “CFTC”) announced the formation of an interdivisional staff working group (“Working Group”)1 to review its swap data reporting rules and related provisions set forth in part 45 of the Commission’s regulations.2 Among other objectives, the Working Group was asked to identify and make recommendations to resolve reporting challenges, and to consider data field standardization and consistency in reporting by market participants. Consistent with those efforts, and informed by the Working Group’s analysis to date, the Commission today requests comment on specific swap data reporting and recordkeeping rules to help determine how such rules are being applied and to determine whether or what clarifications, enhancements or guidance may be appropriate. This request for comment is limited to part 45 and related provisions.

Summary: CFTC and other regulators are interested to understand the risk in the financial system to consider the oversight functions performed by the Commission, including, but not limited to, financial surveillance; market surveillance; risk monitoring; and trade practice surveillance.  To be able to do this job, regulators need accurate underlying Trade data and process work flow to measure and monitor the risk. Currently CFTC is relying on the OTC Derivative trade information provided by GTR (Global Trade Repository) at DTCC to perform this function. In a world where transactions happen in variety of asset classes, with variety of payoffs and disparate ways to identify trade parties it is a formidable task to aggregate all aspect of the transactions.  So far global investment banks themselves are having tough time to represent this trade information in their internal systems are doing this in a piece meal approach. In that case can this problem of collecting trade information in a way that can lend to our better understanding be solved? The answer is yes. We need to focus on replicating a typical trade booking system approach in place in most banks. Of course, this is not panache for all our problems but it will capture 90% of trade information effectively that is contributing to the global financial risk in the system.
My Recommendations would be as follows
  1.  Divide Transactions into various product types (Swaps, Vanilla options, Exotic options etc) 
  2. Aggregate Notional values, Mark to market values and Counterparty types to estimate exposures for each asset class or Trading entity
  3. Trades should reflect the lifecycle of the transaction otherwise our estimate of risk will be inaccurate
  4. Trade work flow (Trade amendments, Novations, Compressions) should be reflected on the transactions
  5.  Price forming data should be disseminated for market participants to understand the state of market

One can understand what a trade is telling looking at
  •  Price of execution to read where the market is trading ( Price Continuation Data)
  • Nature of transaction to see what risks it is creating (Product type and PET)
  • counterparty details to figure the probable purpose of transaction (Counterparty info, Clearing)
  • Underlying legal and collateral information to understand how to value the trade at fair value.( collateralized, independent amount, thresholds etc)

 I guess if we can replicate this model from one trade to thousands of trades effectively we are in good sh


     Confirmation Data (§ 45.3): What terms of a confirmation of a swap transaction should be reported to an SDR as “confirmation data”?
1. What information should be reported to an SDR as confirmation data? Please include specific data elements and any necessary definitions of such elements.

For every transactions, PET (primary economic terms) are the basis and needs to be disclosed if one needs to understand the transactions. These terms vary for each product type hence individual elements will be different.
For instance to measure risk of the trades below we need all the PET terms that vary by product.
·         IR swap, we need to know who is paying fixed and what floating rate etc.
·         Equity Variance swap, we need to know the Vega notional, Variance strike rate
·         Cliquet, we need to know details like Global cap,  Global floor etc
                So the list of terms is exhaustive but very long.

2. Should the confirmation data reported to an SDR regarding cleared swaps be different from the confirmation data reported to an SDR regarding uncleared swaps? If so, how?

Cleared swaps are cash collateralized compared to un cleared where collateral requirements are counterparty information are needed to understand further on the risk and value of the trade.
Therefore, information pertaining who is counterparty and Collateral related info should be reported to SDR.
4. More generally, please describe any operational, technological, or other challenges faced in reporting confirmation data to an SDR.
Collateral posting requirements and margin call process details information needs to be provided by the Trading party and reporting this information for all existing portfolio of trades is a cumbersome job. As banks are working towards optimizing the use of collateral this process will get matured and process will get simpler.



Tuesday, March 18, 2014

USD Yield Curve building using Python and Quantlib

Yield Curve is fundamental building block in the pricing of Interest rate Derivative products.An Yield Curve constructed using US government issued Treasury securities is termed as Treasury Yield curve, if it is constructed using corporate bonds then it is called Corporate Bond Curve and so on. Here I will describe building LIBOR Yield Curve that is bedrock for Pricing an Interest Rate Derivative product like IR swaps. Yield curve construction starts with identifying instruments needed to build and then applying appropriate bootstrapping technique.

 LIBOR Yield curve is in general constructed blending Cash deposit products, Future contracts and Swap rates based on their liquidity in the market. This is because, each of these products are liquid at particular time to maturity in the market

Cash Deposit products: LIBOR cash deposit markets is very active in overnight, 1week, 1M, 3m and 6M maturities. These deposits are quoted in the market as cash rate earned for a particular maturity. In general LIBOR Rates are now fixed by Intercontinental Exchange after the infamous LIBOR Fixing scandal.These rates are quoted with ACT/360 basis convention. Futures products: Euro Dollar Futures are most liquid traded instruments on CME exchange. These futures imply LIBOR interest rate for that period. Typically they are traded on the market with March, June, September and December expiration dates along with serial months on the front end. These contracts are being traded as far as 10 years from now. A typical contract for instance, Jun 14 ( symbol: EDM4) will imply a 3m rate starting on June as of today. These contracts are very useful in risk management of trading book with interest rate swaps. Future contracts are traded on the exchange and are subject to initial and variation margin. Due to this when comparing futures rates with Over the counter traded markets, players incorporate Convexity adjustment (Here we will not cover that)
In our yield curve construction, we are going to use 8 future contracts for a period of 2 years. Different Banks have different requirements and hence this will vary from 8 to 16 future contracts.
Now let is move on to
Interest rate swaps Dollar Interest rate swaps are traded with in over the counter market. Recent Dodd Frank regulation has enjoined moving these products onto exchanges. Consequently, you are seeing movement of these products onto Swap Execution Facilities run by variety of players. Even to mitigate counterparty risk, these swaps are now moving on Clearing houses where they will become more like futures.
We will use these quoted swap rates from 3y onwards to 30y in our yield curve construction.
We utilize liquid, Deposits till 6M maturity, from there 8 future contracts and then from 3y onward till 30y swap rates are considered and blended together to construct discount curve and then Forward curve.
We will also use Piece wise flat curve interpolation methodology implemented by Quantlib in building our discount factors.Essentially this will serve the purpose of generating a smooth discount curve that can imply a smooth forward curve which is very important in pricing any kind of exotic derivatives.
# Copyright (C) 2014, Khandrika Capital Markets

# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE.  See the license for more details.

from QuantLib import *
import datetime
import numpy as np
import matplotlib.pyplot as plt


# global data
# Here enter the Yield Curve reference Data
calendar = TARGET()
todaysDate = Date(28,February,2014);
Settings.instance().evaluationDate = todaysDate
settlementDate = Date(4,March,2014);

# market quotes
# Update deposit Rates ( usual source will be LIBOR Fixings on the Curve Date
deposits = { (1,Weeks): 0.0023,
             (1,Months): 0.0023,
             (3,Months): 0.0023,
             (6,Months): 0.0023}
# Obtain Futures prices from CME traded Euro Dollar Futures
futures = { Date(19,3,2014): 99.765,
            Date(18,6,2014): 99.75,
            Date(17,9,2014): 99.73,
            Date(17,12,2014): 99.69,
            Date(18,3,2015): 99.605,
            Date(17,6,2015): 99.47,
            Date(16,9,2015): 99.3,
            Date(16,12,2015): 99.085 }
# Obtain Swap rates from Traded Swaps on the Curve data
swaps = { (3,Years): 0.0079,
          (4,Years): 0.012,
          (5,Years): 0.0157,
          (6,Years): 0.01865,
          (7,Years): 0.0216,
          (8,Years): 0.0235,
          (9,Years): 0.0254,
          (10,Years): 0.0273,
          (15,Years): 0.0297,
          (20,Years): 0.0316,
          (25,Years): 0.0335,
          (30,Years): 0.0354}

# convert them to Quote objects
for n,unit in deposits.keys():
    deposits[(n,unit)] = SimpleQuote(deposits[(n,unit)])
for d in futures.keys():
    futures[d] = SimpleQuote(futures[d])
for n,unit in swaps.keys():
    swaps[(n,unit)] = SimpleQuote(swaps[(n,unit)])

# build rate helpers

dayCounter = Actual360()
settlementDays = 2
depositHelpers = [ DepositRateHelper(QuoteHandle(deposits[(n,unit)]),
                                     Period(n,unit), settlementDays,
                                     calendar, ModifiedFollowing,
                                     False, dayCounter)
                   for n, unit in [(1,Weeks),(1,Months),(3,Months),
                                   (6,Months)] ]

dayCounter = Actual360()
months = 3
futuresHelpers = [ FuturesRateHelper(QuoteHandle(futures[d]),
                                     d, months,
                                     calendar, ModifiedFollowing,
                                     True, dayCounter,
                                     QuoteHandle(SimpleQuote(0.0)))
                   for d in futures.keys() ]

settlementDays = 2
fixedLegFrequency = Semiannual
fixedLegTenor = Period(6,Months)
fixedLegAdjustment = Unadjusted
fixedLegDayCounter = Thirty360()
floatingLegFrequency = Quarterly
floatingLegTenor = Period(3,Months)
floatingLegAdjustment = ModifiedFollowing
swapHelpers = [ SwapRateHelper(QuoteHandle(swaps[(n,unit)]),
                               Period(n,unit), calendar,
                               fixedLegFrequency, fixedLegAdjustment,
                               fixedLegDayCounter, Euribor3M())
                for n, unit in swaps.keys() ]

# term structure handles

discountTermStructure = RelinkableYieldTermStructureHandle()
forecastTermStructure = RelinkableYieldTermStructureHandle()

# term-structure construction

helpers = depositHelpers[:2] + futuresHelpers + swapHelpers[1:]
depoFuturesSwapCurve = PiecewiseFlatForward(settlementDate, helpers,
                                            Actual360())
print depoFuturesSwapCurve.dates()
for c in depoFuturesSwapCurve.dates():
    print depoFuturesSwapCurve.discount(c)
#output

1.0
0.999955279778
0.999801983663
0.999304040868
0.99867255034
0.997998353751
0.997225503985
0.996208950194
0.994872376004
0.993129765936
0.990838040119
0.976526437683
0.95283925956
0.923683284288
0.892554279843
0.824681470718
0.790220477256
0.753705873129
0.63046764213
0.517332972767
0.411723283158
0.315258111833

    


So far we have constructed the discount factors using Quantlib and Python. Have a great evening

Monday, March 10, 2014

Structured Note Markets

In the wake of great financial crisis of 2008, FINRA and SEC have come up with regulations around these products to increase transparency and requiring the players to understand these products and their risks.

I will focus this discussion around structured note market place with emphasis on motivations for variety of participants and taxonomy of products created and traded on the market.  Then I will discuss the mechanics and design aspects of a structured note and its components.  From there we will uncover the valuation building blocks needed in pricing of a note. After that we will focus on understanding various risks embedded in a note.
Market Landscape: Structured note product market is a global market place where investors looking for alternative investment opportunities and issuers with need to fund their operations effectively come together.  In Europe region these products are very popular among retail and institutional investors.  My current talk is focused on US structured note market. In United states issuers like investment banks ( goldman, morgan stanly, jp morgan) have been issuing notes to both retail and institutional investors. Average note issuance over last 5 years has been around 40-50 bn. Growth in this market is attributed to factors like,

  1. Investors are able to design customized solutions to meet their investment needs.
  2. Issuers are able to fund cheaply
  3. Financial engineering techniques are now better understood in analyzing risks in these products
For instance, an investor wants exposure to S&P 500 and Gold price not outright performance of these assets but outperformance of S&P 500 over gold.
  1.           He can then approach an issuer (an investment bank) to originate this note.
  2.     Issuers will employ a pricing model (financial engineering  technique) to value the underlying derivative component and then design the note meet the client requirements.
As we know structured note products can be tailored to a variety of needs. There are hundreds of them on the market.  Fortunately we can classify them by the risk inherent in them into following types.

Capital guaranteed: In these notes, investors can safely assume their initial investment is protected from market risks. Commonly traded notes are step up callable notes.
Be aware, they are still exposed to the risk of the default of the issuer.  That is if the issuer defaults on the note, these notes will become worthless.

Yield enhancement:  In these notes, investors are exposed to underlying asset market with some protection around their initial principal.  Commonly traded notes are buffered return notes.

Performance Notes: These notes are mainly designed to gain exposure to commodity markets. Investors participate in market performance of a commodity index like Dowjones UBS Total return commodity index.

Leverage: Finally, some notes are designed with more attractive coupons by adding leverage to their performance. These notes are potentially riskier due to the possibility of loss of entire principal. Next I will cover details of the components of this type of note.
Now that we have learnt about the market place and various note types, let us dive into design components of a structured note.

Here I will consider a note issued by HSBC on S&P 500. This note is called Buffered Accelerated market participation securities.  This note will pay investors twice the gain in S&P 500 with a cap of 12.5% at maturity. On the down side this note will participate in 1:1 market performance with a protection up to 10% of losses.
This note has two components
  1.        Derivative component that tracks the return of the underlying asset
  2.         Bond component that tracks the initial principal investment
For the Derivative component:  we have to long two call options at the initial level 1419 and short two call options at 1589. These four options together replicate the return of the note on the upside.

Now on the down side, we will short a put option at 1277 to protect from losses up to only 10%.
Above 5 options together replicate the derivative component of the Note. To this we will add a zero coupon bond that expires at maturity to replicate the initial principal.

Now we have designed all elements of the note. Now we are ready to value these options and bond to estimate the price of the note.

Valuing the options in this case need volatility as an input. Our note is constructed using some OTM options and volatility skew becomes very important in pricing this product.  We will assume in our case volatility is given and we employ Black scholes model and price these options (Volatility skew is currently out of scope of this discussion)

Now that we have designed and valued a structured note, let us go over the risks embedded in this note to evaluate pros and cons of the note.

Investors of this note are exposed to 3 different risks, market, issuer credit and Liquidity risks.
Market risk: This note is designed with s&P 500 as underlying. Therefore it is exposed to all S&P 500 returns and volatility. On the upside, this note is more like a bull call spread strategy. In this kind of strategy, you are exposed to limited losses. On the down side, we are short a put. This is very dangerous one. As we are exposed to unlimited losses (most of the initial investment)

Credit risk: This note is unsecured debt and if issuer defaults, you might get nothing.
Finally, these notes are traded on a limited basis in secondary markets so the bid-offer spreads are very wide

At this point we have touched upon various aspects of structured note products to get flavor of this market and the product features. Thank you for reading.

Sunday, March 9, 2014

Refreshing and indepth analysis on Partition of India - Dr K. Lakshmana Murthy

Today I am writing a review of most contentious topic - partition of India and Pakistan. In this Book Partition of India – Get you kindle version copy at amazon.

Author Makes a novel attempt to bring the events that have contributed to the vivisection of a nation that has fought for its independence from the colonial rule with the mantra of Non Violence under the leadership of great leaders like Gandhi, Nehru, Patel, Jinnah and many others. It is a tragedy to know that when people from various religions, Hindus, Muslims, Christians, Sikhs and others have fought side by side in the freedom struggle and suddenly found themselves in another fight of epic proportions to form Pakistan ( a Muslim Nation) and India ( Secular Nation).

 In part 1 of this book author focused not just on few leaders who have set the direction to the events of that time, but to even more fundamental events that happened hundreds of years back and shaped the public minds and their thinking from the time when Islam has entered India within few decades after it came into existence in Arabia. In Chapter 1, author analyzes the events and interactions between Muslims and Hindus to understand the socio economic and religious conditions of these communities during Muslim rule that included great rulers like Akbar the Great who is known for religious tolerance to Aurangzeb who is known for his infamous Ziziyah tax. He provides vivid accounts of events by starting with, Islam started as a religion of submission to God was spreading from its epicenter at Mecca in Arabia across all directions. Within few centuries, Islam has reached as far as Cordoba in Spain in Western Europe, Mongolia in Asia and to some parts of North Africa. This kind of rapid growth has been attributed to some basic tenets of Islam like “Along with conquest Islam permits acquisition of enemy property by force and allows the distribution four fifths of the Khamsa2 or spoils of war among the soldiers of Islam. The remaining one fifth of spoils of war becomes the legitimate revenue of an Islamic state. This provision served as an incentive to the enterprising and adventurous followers of Islam.” Here we are given detailed account of when India came under Muslim rule and social conditions of Hindus and Muslims and critically examining facts how Hindus still remained as majority community despite variety of impediments to their way of life, including not able to hold higher positions in the public service, Urdu as official language of administration etc. Hindus have adapted to these harsh measures by accepting them like we accept to wear winter gear in bitter cold conditions and evolved generation after generation.

 In Chapter 2 he describes British Empire which took the control of united India. After the end of Muslim rule, united India was controlled by British Empire by 1850 A.D. During this time, colonization was norm, French and American revolutions have spread their ideas of freedom and Liberty to greater parts of the world. British has established English as the language of administration and Muslim rulers and their subjects have detested losing power to British and refrained to embrace English when Hindus eagerly embraced English. I think Darwin’s theory of evolution, where in like a species that learns to adapt in new environment, Hindus who were forced to learn Urdu were able to adapt to English and obtain economic benefits. Author details these aspects with rigor by citing various accounts and facts surrounding introduction of English and its consequences.

After covering life and events during British rule we are provided detailed account of religious movements that have emerged as a support to reform both Hindu and Muslim communities in Chapter 3. After covering life and events during British rule we are provided detailed account of religious movements that have emerged as a support to reform both Hindu and Muslim communities. These include Wahabbi movement, The Farazias, The Dar-Ul-Ulum Deoband, Syed Ahmad Khan and Aligarh Muslim University and others. Each of these movements have tried to galvanize Muslims by providing, Food Aid and Education and sometimes these movements have morphed into political movements and have heavily contributed to shaping their thinking. Similarly, Brahmo Samaj, Ved Samaj, Araya Samaj, Prarthana samaj etc were started to reform the Hindu society and helped to shape the thinking of Hindu community and other movements for Sikh community. At this point author concludes that, “ Probably as religion and political authority are inseparable in Islam, with the Indian Muslim religious community forging into a homogenous group by the end of 19th century, Muslim political leaders appeared on the Indian scene, to look after the interests of the Indian Muslim community” Through out these 3 chapters, we are given authors critical analysis of prevalent theories, on what caused partition. Some of these include Nehru’s ambitions to lead undivided India, Jinnah’s persistent fear of possible Muslim minority getting crushed under the weight of Majority Hindus or British Empire wanted to take a revenge on India for losing it grip and many more.


In part II Author blends his detailed analysis with the events that are part of India’s freedom struggle leading up to partition of India and creation of Pakistan. At some point he cites one funny incident of unintended consequence of how few Muslim community Leaders actions have contributed to the demise of “Khalifa” the spiritual head of Islam by the Turkey ruling party. Finally, this author towards the end of the book concludes unambiguously partition of India has become an inevitable event.