Arbitrage Smoothing¶
- class TonicSmoother(*args, **kwargs)¶
Bases:
object- classmethod __caller__(vslice, space='volatility|price')¶
Check if current slice has butterfly arbitrages. a) If there are none, we return a copy. b) If there are, we transform the k->sigma(k) using isotonic regression for dC/dk so as to remove arbitrages.
CAVEAT: The resulting slice is not garanteed to be arbitrage free. Thus we return a “success” boolean too.
- Parameters:
vslice (KVMVolSlice)
space (str)
- Return type:
Tuple[bool, KVMVolSlice]
- class HullSmoother(*args, **kwargs)¶
Bases:
object- classmethod __caller__(vslice, interpolate=False)¶
This method is mostly suitable for a vol slice based on ask prices only. It relies on the fact the mapping k->call_price(k) should be convex (and decreasing). In the case of ask prices it means the “ideal” price curve is lower than the convex hull of the ask price curve. This function returns a vol slice based solely on the strikes whose ask prices are on the boundary of that convex hull.
WARNING: In the following example the method returns the upper bound :
as_of_date = date(2024, 12, 5) ticker = ‘DE’ expiration_date = datetime.date(2025, 1, 17)
This requires more investigation
- To review:
GE, 2025 Feb 21 NVDA, 2024 Dec 13 AMD, 2025 Mar 21 JNJ, 2025 Mar 21 MRK, 2025 Jun 20
- Parameters:
vslice (KVMVolSlice)
interpolate (bool)
- Return type:
Tuple[bool, KVMVolSlice]
- class QPSmoother(*args, **kwargs)¶
Bases:
object- classmethod __caller__(vslice, side)¶
- Parameters:
vslice (KVMVolSlice)
side (str)
- Return type:
Tuple[bool, KVMVolSlice]