以后要记得在别人面前维护老婆！

## 从一而终

今天是跟小宝贝相识一周年的纪念日，去年的今天我们在西贡爬山相识，从此开始了一年的快乐生活，小宝贝我觉得自己真的好幸运可以认识你呀，你还带我去买最爱的Royce巧克力吃，还要给我做一本相册，我真的好感动欧。

今晚跟我家小宝贝去吃了第一次约会吃的肉骨茶，真的好好吃，只要有小帅哥在身边吃什么都好吃，小宝贝还一直要我多吃还非要给我多点一些吃的总是怕我吃不饱，小宝贝你为什么对我这么好呀

小帅宝我真的不知道还能怎么表达我对你的爱了，你的一切都是那么完美，我一定会今后加倍努力好好爱你的！

今后我们要有更多的一年又一年的美好回忆！

爱你 小帅帅！

## 不摔东西

晚上跟小宝吵架，我又没有控制我自己，摔碎了镜子。我错了，我以后一定会改过自新！

爱你 小美宝！

我最爱的一首歌就是perfect，我最爱给小宝宝深情地唱这首歌，唱到动情处，我不自觉地眼睛都湿润了。我想啊，我这辈子就是眼前这个女人了，我一定会好好爱她的！

## 继续努力

小美宝说 喜欢我虽然很优秀但还是很谦虚很踏实 还是很努力。夸得我感觉有点不好意思了，不过我会继续加油，不会让小宝贝失望的！

爱你！

## 惊喜爱心蛋糕

今天小西瓜一下班就跑回家，还给我买了一个爱心小蛋糕作为惊喜，真的好感动啊！一个好漂亮的爱心蛋糕上面还有金箔点缀

再想到之前小宝宝经常下班时候给我买巧克力买蛋糕作为惊喜，简直都数不清买过多少回了，小宝宝你为什么对我这么好呢，你真的是我最完美的老公，我每天只要看到你就觉得好幸福哦

## Statistics Basics

# Expectation

# Variance and Covariance

# Correlation

## Volatility Surface

# Vol Surface: Term Structure

Term Structure usually refers to ATM implied vols by Time to maturity. And of course, these vols are all annualised vols for consistency.

Term Structure is usually upward sloping. But front-end vols are more sensitive to changes of realised vols and anticipated events (e.g. French election etc.). So market turmoil could lead to Term Structure inversion.

The Term Structure shape tend to be mean-reverting in nature. Trading strategies exploiting this mean-reverting feature involves buying and selling two options in Vega-neutral amounts, so that we have exposure to only the vols curve shape, not the level shift. This is similar to Duration-neutral Yield curve trades in Fixed Income.

Front-end vols are primarily Gamma plays, so views on Gamma is essential to formulating Term Structure. ?

Back-end vols are usually considered as sum of Front-end vols and vols curve. ?

# Vol Surface: Vol Skew (Risk Reversal)

By FX market convention, Risk Reversal is quoted as

Risk Reversal represents **directional** variation of implied vol with Strike. This corresponds to the **Third Standardised Central Moment** of underlying spot distribution.

For reference, the n-th moment of Probability Density Function about value is defined as:

Risk Reversal is well correlated to the **correlation between spot and vol moves. **We can think of Risk Reversal as the **implied skew** while spot-vol correlation as **realised skew**. And this means:

**Positive skew**: Option market expects spot rallies to be more volatile than sell-offs. E.g. USD/EM pairs. The option-implied spot distribution is tilted to the right.

**Negative skew**: Option market expects spot sell-offs to be more volatile than rallies. E.g. JPY cross pairs. The option-implied spot distribution is tilted to the left.

Skews are also often to be valued by comparing to ATM vols, i.e. ratio.

# Vol Surface: Vol Fly (Butterfly)

By FX market convention, Butterfly is quoted as

Butterfly represents **undirectional** variation of implied vol with Strike or **convexity** of vol curve / smile. This corresponds to the **Fourth Standardised Central Moment** of underlying spot distribution.

We can think of Butterfly as the dimension of vol curve / smile that richens “wings” or low-delta options compared to ATM options. So non-Zero Butterfly means underlying spot distribution deviates from log normality assumed by Black-Scholes, and wing / low-delta vols are priced at premium to ATM vol.

Butterfly is well correlated with **volatility of ATM vol**. Thus, it is often considered as the parameter capturing **vol-of-vol**.

# Vol Surface Arbitrage

# Vol Surface Interpolation

## Option Greeks

# European Vanilla Option Greeks

## Delta

### Interpretations

- Option price sensitivity to spot (Spot Delta)

gradient of option price tangent line

- Proxy for Probability of option finishing ITM.

Delta value is between 0 and 1. But this is just a proxy for exercising probability for interpretation purpose.

In fact, the risk neutral Probability Density Function (PDF) is the 2nd derivative of call price with respect to Strike, i.e.

- Hedge ratio

### Delta used on Vol Smile

Conventionally in FX Option space, the x-axis of Vol Smile plot is denoted as Delta (10d, 25d) instead of strikes.

### Adapted Delta

Adapted Delta is the “real delta”, i.e. the actual hedge ratio, taking into account the shape of the vol smile.

Black-Scholes assumes constant vol.

### Spot Delta vs Forward Delta

We normally refers Delta as Spot Delta, i.e. spot sensitivity .

Forward Delta is the sensitivity to Forward price, i.e. which captures interest rate risk implicit in forward points.

Forward Delta is typically used for NDF currencies and long-dated options.

### Impact of Spot

### Impact of Time to expiry

As we see from the below plot, as time passes, the option price curve moves closer to the At-Expiry payoff. Therefore, ITM Delta moves closer to 1 and OTM Delta moves closer to 0. ATM Delta has greater uncertainty (high Gamma) near expiry.

### Impact of Vol

For ITM options, higher vol means less certainty that it will finish ITM, i.e. smaller Delta.

For OTM options, higher vol means higher probability that it will finish ITM, i.e. higher Delta.

A doubling of vol has roughly the same effect on an option’s Delta (and its price) as a quadrupling of time. For example,

## Gamma

### Impact of Time to expiry

### Impact of Vol

A doubling of vol has roughly the same effect on an option’s Gamma as a quadrupling of time. For example,

### Gamma Trading

If we long an Option with Delta hedged, we will have positive P/L from long Gamma.

However, this Gamma P/L comes at cost of Theta decay as we are long option.

## Theta

Theta measures the Option value decay as time passes. We say Theta is positive, meaning, as time passes (time to expiry decreases), Option price also decreases.

But can European Put Option Theta be negative?

### Impact of Time to expiry

### Impact of Vol

## Vega

### Impact of Time to expiry

### Impact of Vol

# Continuous Barrier Option Greeks

**Reversed Knock-Out (RKO)**: Up and Out Call with Barrier > Strike ** OR** Down and Out Put with Barrier < Strike

**Reversed Knock-In (RKI):** Up and In Call with Barrier > Strike ** OR** Down and In Put with Barrier < Strike

**Reversed** means the Barrier level is In-The-Money (ITM).

RKO Call / Put + RKI Call / Put = Vanilla Call / Put

This is true for option price and all greeks.

## Delta

### Impact of Spot

Delta is the gradient of curve. We notice there’s a Delta gap on barrier trigger, for both RKI and RKO.

RKI Call Option

RKO Call Option

## American Vanilla Option Pricing – Binomial Tree Method

We first divide the American Call option tenor into smaller time steps, each represented as .

In each time step, assume underlying asset price may move from initial value either up to with real-world probability or down to with .

We assume the annualised risk free rate is .

At the end of this time step , the payoff of the American Call option is

We then construct a portfolio with shares of underlying asset and amount of cash invested at risk free rate. The initial portfolio cost is , the portfolio value at end of the time step is or depending on underlying.

And we can carefully choose below and so that this portfolio replicates the payoff of American Call option at end of this time step.

With no arbitrage, the value of the American Call option has to be equal to the portfolio initial cost at beginning of the time step. So we have:

with

So we notice that the real-world probability q is NOT in the formula, which means the American Call option prices does not depend on investors’ individual risk preference.

We also notice is between 0 and 1, and therefore be regarded as the risk neutral probability. And the American Call option price is just the discounted value of future expected payoffs.

In the risk neutral world, is the probability that underlying asset price goes up to , and is the probability it goes down to . And the current underlying price is just the discounted value of future expected payoffs, i.e.

which can be simplified as:

From our assumption, we know the underlying asset price return over one time step follows Binomial distribution, thus the one-step variance of price return is .

Cox introduced another condition:

Now, from the above 3 equations, we can solve for for given as below:

So now we can use above Binomial Tree model to calculate the American Call option price step by step backward from expiry. At each step, we need to evaluate the discounted future expected payoffs and the payoff if we exercise at this step. We take the bigger value of the two as the value for this time step node.

Python code:

def binomialTree(callPut, spot, strike, rate, sigma, tenor, N=2000, american=True): # Each time step period deltaT = float(tenor) / N u = np.exp(sigma * np.sqrt(deltaT)) d = 1.0 / u a = np.exp(rate * deltaT) p = (a - d) / (u - d) oneMinusP = 1.0 - p # Initialize the arrays fs = np.asarray([0.0 for i in xrange(N + 1)]) # Stock tree for calculations of expiration values fs2 = np.asarray([(spot * u ** j * d ** (N - j)) for j in xrange(N + 1)]) # Vectorize the strikes to speed up expiration check fs3 = np.asarray([float(strike) for i in xrange(N + 1)]) # Compute the Binomial Tree leaves, f_{N, j} if callPut == 'Call': fs[:] = np.maximum(fs2 - fs3, 0.0) else: fs[:] = np.maximum(-fs2 + fs3, 0.0) # Calculate backward the option prices for i in xrange(N - 1, -1, -1): fs[:-1] = np.exp(-rate * deltaT) * (p * fs[1:] + oneMinusP * fs[:-1]) fs2[:] = fs2[:] * u if american: # Simply check if the option is worth more alive or dead if callPut == 'Call': fs[:] = np.maximum(fs[:], fs2[:] - fs3[:]) else: fs[:] = np.maximum(fs[:], -fs2[:] + fs3[:]) return fs[0]

## European Vanilla Option Pricing – Black-Scholes PDE

Assume underlying spot follows Geometric Brownian Motion, i.e.

Let be the call option price. We obtain using Ito Lemma

Construct a delta neutral portfolio (short call option and long underlying), then we have:

If we combine the terms, we will get

Realise is independent of random term , thus portfolio is risk free.

Realise is independent of expected return .

Thus, portfolio should earn the risk free rate of return, i.e.

Therefore, combining with in the previous step, we have below Black-Scholes PDE:

Now we need to solve the above Black-Scholes PDE.

Step 1

Transformation: Let’s introduce new variables , and .

Therefore, the Call option price can be represented using new variables and as .

Now we introduce a new function . We need to find the PDE for where

By Chain rule for partial derivatives, we have:

Now we plug into the Black-Scholes PDE, then we find the PDE for :

Step 2

Transformation to Heat Equation: Let’s introduce a new function . We need to choose constants so that the PDE of is Heat Equation.

Together with the PDE for , we can derive the PDE for :

To be a Heat Equation, we need to force the last two terms be . Thus

Then we have

Step 3

The solution of PDE is given by Green formula as below:

Step 4

We look at the boundary condition .

Then

which can be integrated as below, where is the cumulative distribution function (CDF) for Normal distribution.

Step 5

From the above steps, we have relation

And from Step 4, we know the result of .

Therefore, we derive as

Now we plug in , , , from previous steps. Finally, Call option price can be represented as

where

Python implementation of Black-Scholes formula:

def ncdf(x): """ Cumulative distribution function for the standard normal distribution. Alternatively, we can use below: from scipy.stats import norm norm.cdf(x) """ return (1.0 + math.erf(x / math.sqrt(2.0))) / 2.0 def npdf(x): """ Probability distribution function for the standard normal distribution. Alternatively, we can use below: from scipy.stats import norm norm.pdf(x) """ return np.exp(-np.square(x) / 2) / np.sqrt(2 * np.pi) def blackScholesOptionPrice(callPut, spot, strike, tenor, rate, sigma): """ Black-Scholes option pricing tenor is float in years. e.g. tenor for 6 month is 0.5 """ d1 = (np.log(spot / strike) + (rate + 0.5 * sigma ** 2) * tenor) / (sigma * np.sqrt(tenor)) d2 = d1 - sigma * np.sqrt(tenor) if callPut == 'Call': return spot * ncdf(d1) - strike * np.exp(-rate * tenor) * ncdf(d2) elif callPut == 'Put': return -spot * ncdf(-d1) + strike * np.exp(-rate * tenor) * ncdf(-d2) def blackScholesVega(callPut, spot, strike, tenor, rate, sigma): """ Black-Scholes vega """ d1 = (np.log(spot / strike) + (rate + 0.5 * sigma ** 2) * tenor) / (sigma * np.sqrt(tenor)) return spot * np.sqrt(tenor) * npdf(d1) def blackScholesDelta(callPut, spot, strike, tenor, rate, sigma): """ Black-Scholes delta """ d1 = (np.log(spot / strike) + (rate + 0.5 * sigma ** 2) * tenor) / (sigma * np.sqrt(tenor)) if callPut == 'Call': return ncdf(d1) elif callPut == 'Put': return ncdf(d1) - 1 def blackScholesGamma(callPut, spot, strike, tenor, rate, sigma): """" Black-Scholes gamma """ d1 = (np.log(spot / strike) + (rate + 0.5 * sigma ** 2) * tenor) / (sigma * np.sqrt(tenor)) return npdf(d1) / (spot * sigma * np.sqrt(tenor))