voly 0.0.41__tar.gz → 0.0.42__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: voly
3
- Version: 0.0.41
3
+ Version: 0.0.42
4
4
  Summary: Options & volatility research package
5
5
  Author-email: Manu de Cara <manu.de.cara@gmail.com>
6
6
  License: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "voly"
7
- version = "0.0.41"
7
+ version = "0.0.42"
8
8
  description = "Options & volatility research package"
9
9
  readme = "README.md"
10
10
  authors = [
@@ -60,7 +60,7 @@ line_length = 100
60
60
  multi_line_output = 3
61
61
 
62
62
  [tool.mypy]
63
- python_version = "0.0.41"
63
+ python_version = "0.0.42"
64
64
  warn_return_any = true
65
65
  warn_unused_configs = true
66
66
  disallow_untyped_defs = true
@@ -23,19 +23,18 @@ pio.renderers.default = "browser"
23
23
 
24
24
  @catch_exception
25
25
  def plot_volatility_smile(moneyness_array: np.ndarray,
26
- iv_values: np.ndarray,
26
+ iv_array: np.ndarray,
27
27
  market_data: pd.DataFrame = None,
28
- expiry: Optional[float] = None,
28
+ maturity: Optional[float] = None,
29
29
  ) -> go.Figure:
30
30
  """
31
31
  Plot volatility smile for a single expiry.
32
32
 
33
33
  Parameters:
34
- - moneyness: Moneyness grid
35
- - iv: Implied volatility values
34
+ - moneyness_array: Moneyness grid
35
+ - iv_array: Implied volatility values
36
36
  - market_data: Optional market data for comparison
37
- - expiry: Optional expiry time (in years) for filtering market data
38
- - title: Optional plot title
37
+ - maturity: Maturity name for filtering market data
39
38
 
40
39
  Returns:
41
40
  - Plotly figure
@@ -46,7 +45,7 @@ def plot_volatility_smile(moneyness_array: np.ndarray,
46
45
  fig.add_trace(
47
46
  go.Scatter(
48
47
  x=moneyness_array,
49
- y=iv_values * 100, # Convert to percentage
48
+ y=iv_array * 100, # Convert to percentage
50
49
  mode='lines',
51
50
  name='Model',
52
51
  line=dict(color='#0080FF', width=2)
@@ -54,14 +53,14 @@ def plot_volatility_smile(moneyness_array: np.ndarray,
54
53
  )
55
54
 
56
55
  # Filter market data for the specific expiry
57
- expiry_data = market_data[market_data['yte'] == expiry]
56
+ maturity_data = market_data[market_data['maturity_name'] == maturity]
58
57
 
59
- if not expiry_data.empty:
58
+ if not maturity_data.empty:
60
59
  # Add bid IV
61
60
  fig.add_trace(
62
61
  go.Scatter(
63
- x=expiry_data['log_moneyness'],
64
- y=expiry_data['bid_iv'] * 100, # Convert to percentage
62
+ x=maturity_data['log_moneyness'],
63
+ y=maturity_data['bid_iv'] * 100, # Convert to percentage
65
64
  mode='markers',
66
65
  name='Bid IV',
67
66
  marker=dict(size=8, symbol='circle', opacity=0.7)
@@ -71,20 +70,19 @@ def plot_volatility_smile(moneyness_array: np.ndarray,
71
70
  # Add ask IV
72
71
  fig.add_trace(
73
72
  go.Scatter(
74
- x=expiry_data['log_moneyness'],
75
- y=expiry_data['ask_iv'] * 100, # Convert to percentage
73
+ x=maturity_data['log_moneyness'],
74
+ y=maturity_data['ask_iv'] * 100, # Convert to percentage
76
75
  mode='markers',
77
76
  name='Ask IV',
78
77
  marker=dict(size=8, symbol='circle', opacity=0.7)
79
78
  )
80
79
  )
81
80
 
82
- maturity_name = expiry_data['maturity_name'].iloc[0]
83
- dte_value = expiry_data['dte'].iloc[0]
81
+ dte_value = maturity_data['dte'].iloc[0]
84
82
 
85
83
  # Update layout
86
84
  fig.update_layout(
87
- title=f'Vol Smile for {maturity_name} (DTE: {dte_value:.1f})',
85
+ title=f'Vol Smile for {maturity} (DTE: {dte_value:.1f})',
88
86
  xaxis_title='Log Moneyness',
89
87
  yaxis_title='Implied Volatility (%)',
90
88
  template='plotly_dark',
@@ -111,16 +109,16 @@ def plot_all_smiles(moneyness_array: np.ndarray,
111
109
  """
112
110
  figures = []
113
111
 
114
- # Sort expiries in ascending order
115
- sorted_expiries = sorted(iv_surface.keys())
112
+ # Get maturities
113
+ maturities = list(iv_surface.keys())
116
114
 
117
115
  # Create a figure for each expiry
118
- for expiry in sorted_expiries:
116
+ for maturity in maturities:
119
117
  fig = plot_volatility_smile(
120
118
  moneyness_array=moneyness_array,
121
- iv_values=iv_surface[expiry],
119
+ iv_array=iv_surface[maturity],
122
120
  market_data=market_data,
123
- expiry=expiry
121
+ maturity=maturity
124
122
  )
125
123
  figures.append(fig)
126
124
 
@@ -392,8 +390,7 @@ def plot_3d_surface(moneyness_array: np.ndarray,
392
390
  @catch_exception
393
391
  def plot_rnd(moneyness_array: np.ndarray,
394
392
  rnd_values: np.ndarray,
395
- spot_price: float = 1.0,
396
- title: str = 'Risk-Neutral Density') -> go.Figure:
393
+ spot_price: float = 1.0) -> go.Figure:
397
394
  """
398
395
  Plot risk-neutral density (RND).
399
396
 
@@ -449,7 +446,7 @@ def plot_rnd(moneyness_array: np.ndarray,
449
446
 
450
447
  # Update layout
451
448
  fig.update_layout(
452
- title=title,
449
+ title='Risk-Neutral Density',
453
450
  xaxis_title='Price',
454
451
  yaxis_title='Density',
455
452
  template='plotly_dark',
@@ -462,7 +459,7 @@ def plot_rnd(moneyness_array: np.ndarray,
462
459
  @catch_exception
463
460
  def plot_rnd_all_expiries(moneyness_array: np.ndarray,
464
461
  rnd_surface: Dict[str, np.ndarray],
465
- param_matrix: pd.DataFrame,
462
+ fit_results: Dict[str, Any],
466
463
  spot_price: float = 1.0) -> go.Figure:
467
464
  """
468
465
  Plot risk-neutral densities for all expiries.
@@ -477,7 +474,7 @@ def plot_rnd_all_expiries(moneyness_array: np.ndarray,
477
474
  - Plotly figure
478
475
  """
479
476
  # Get maturity information
480
- dte_values = param_matrix.attrs['dte_values']
477
+ dte_values = fit_results['fit_performance']['DTE']
481
478
 
482
479
  # Create figure
483
480
  fig = go.Figure()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: voly
3
- Version: 0.0.41
3
+ Version: 0.0.42
4
4
  Summary: Options & volatility research package
5
5
  Author-email: Manu de Cara <manu.de.cara@gmail.com>
6
6
  License: MIT
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes