voly 0.0.196__tar.gz → 0.0.198__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.
Files changed (26) hide show
  1. {voly-0.0.196/src/voly.egg-info → voly-0.0.198}/PKG-INFO +1 -1
  2. {voly-0.0.196 → voly-0.0.198}/pyproject.toml +2 -2
  3. {voly-0.0.196 → voly-0.0.198}/src/voly/core/fit.py +10 -10
  4. {voly-0.0.196 → voly-0.0.198/src/voly.egg-info}/PKG-INFO +1 -1
  5. {voly-0.0.196 → voly-0.0.198}/LICENSE +0 -0
  6. {voly-0.0.196 → voly-0.0.198}/README.md +0 -0
  7. {voly-0.0.196 → voly-0.0.198}/setup.cfg +0 -0
  8. {voly-0.0.196 → voly-0.0.198}/setup.py +0 -0
  9. {voly-0.0.196 → voly-0.0.198}/src/voly/__init__.py +0 -0
  10. {voly-0.0.196 → voly-0.0.198}/src/voly/client.py +0 -0
  11. {voly-0.0.196 → voly-0.0.198}/src/voly/core/__init__.py +0 -0
  12. {voly-0.0.196 → voly-0.0.198}/src/voly/core/charts.py +0 -0
  13. {voly-0.0.196 → voly-0.0.198}/src/voly/core/data.py +0 -0
  14. {voly-0.0.196 → voly-0.0.198}/src/voly/core/hd.py +0 -0
  15. {voly-0.0.196 → voly-0.0.198}/src/voly/core/interpolate.py +0 -0
  16. {voly-0.0.196 → voly-0.0.198}/src/voly/core/rnd.py +0 -0
  17. {voly-0.0.196 → voly-0.0.198}/src/voly/exceptions.py +0 -0
  18. {voly-0.0.196 → voly-0.0.198}/src/voly/formulas.py +0 -0
  19. {voly-0.0.196 → voly-0.0.198}/src/voly/models.py +0 -0
  20. {voly-0.0.196 → voly-0.0.198}/src/voly/utils/__init__.py +0 -0
  21. {voly-0.0.196 → voly-0.0.198}/src/voly/utils/density.py +0 -0
  22. {voly-0.0.196 → voly-0.0.198}/src/voly/utils/logger.py +0 -0
  23. {voly-0.0.196 → voly-0.0.198}/src/voly.egg-info/SOURCES.txt +0 -0
  24. {voly-0.0.196 → voly-0.0.198}/src/voly.egg-info/dependency_links.txt +0 -0
  25. {voly-0.0.196 → voly-0.0.198}/src/voly.egg-info/requires.txt +0 -0
  26. {voly-0.0.196 → voly-0.0.198}/src/voly.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: voly
3
- Version: 0.0.196
3
+ Version: 0.0.198
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.196"
7
+ version = "0.0.198"
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.196"
63
+ python_version = "0.0.198"
64
64
  warn_return_any = true
65
65
  warn_unused_configs = true
66
66
  disallow_untyped_defs = true
@@ -120,7 +120,7 @@ def fit_model(option_chain: pd.DataFrame, num_points: int = 2000) -> Tuple[pd.Da
120
120
  nu, psi, p, c, nu_tilde = SVIModel.raw_to_jw_params(a_scaled, b_scaled, m, rho, sigma, t)
121
121
 
122
122
  # Compute fit statistics
123
- w_model = np.array([SVIModel.svi_raw(x, a_scaled, b_scaled, m, rho, sigma) for x in k])
123
+ w_model = np.array([SVIModel.svi(x, a_scaled, b_scaled, m, rho, sigma) for x in k])
124
124
  iv_model = np.sqrt(w_model / t)
125
125
  iv_market = iv
126
126
  rmse = np.sqrt(mean_squared_error(iv_market, iv_model))
@@ -134,7 +134,7 @@ def fit_model(option_chain: pd.DataFrame, num_points: int = 2000) -> Tuple[pd.Da
134
134
 
135
135
  # Butterfly arbitrage check
136
136
  k_range = np.linspace(min(k), max(k), num_points)
137
- w_k = lambda k: SVIModel.svi_raw(k, a_scaled, b_scaled, m, rho, sigma)
137
+ w_k = lambda k: SVIModel.svi(k, a_scaled, b_scaled, m, rho, sigma)
138
138
  w_prime = lambda k: b_scaled * (rho + (k - m) / np.sqrt((k - m)**2 + sigma**2))
139
139
  w_double_prime = lambda k: b_scaled * sigma**2 / ((k - m)**2 + sigma**2)**(3/2)
140
140
  for k_val in k_range:
@@ -221,8 +221,8 @@ def fit_model(option_chain: pd.DataFrame, num_points: int = 2000) -> Tuple[pd.Da
221
221
  k_check = np.unique(np.concatenate([k_market[mask], np.linspace(min(k_market[mask]), max(k_market[mask]), num_points)]))
222
222
 
223
223
  for k_val in k_check:
224
- w1 = SVIModel.svi_raw(k_val, a1 * t1, b1 * t1, m1, rho1, sigma1)
225
- w2 = SVIModel.svi_raw(k_val, a2 * t2, b2 * t2, m2, rho2, sigma2)
224
+ w1 = SVIModel.svi(k_val, a1 * t1, b1 * t1, m1, rho1, sigma1)
225
+ w2 = SVIModel.svi(k_val, a2 * t2, b2 * t2, m2, rho2, sigma2)
226
226
  if w2 < w1 - 1e-6:
227
227
  logger.warning(f"Calendar arbitrage violation at t1={t1:.4f}, t2={t2:.4f}, k={k_val:.4f}: w1={w1:.6f}, w2={w2:.6f}")
228
228
  calendar_arbitrage_free = False
@@ -264,7 +264,7 @@ def fit_model(option_chain: pd.DataFrame, num_points: int = 2000) -> Tuple[pd.Da
264
264
  nu, psi, p, c, nu_tilde = SVIModel.raw_to_jw_params(a_scaled, b_scaled, sigma, rho, m, t2)
265
265
 
266
266
  # Recompute fit statistics
267
- w_model = np.array([SVIModel.svi_raw(x, a_scaled, b_scaled, m, rho, sigma) for x in k])
267
+ w_model = np.array([SVIModel.svi(x, a_scaled, b_scaled, m, rho, sigma) for x in k])
268
268
  iv_model = np.sqrt(w_model / t2)
269
269
  iv_market = iv
270
270
  rmse = np.sqrt(mean_squared_error(iv_market, iv_model))
@@ -279,7 +279,7 @@ def fit_model(option_chain: pd.DataFrame, num_points: int = 2000) -> Tuple[pd.Da
279
279
  # Update butterfly arbitrage check
280
280
  butterfly_arbitrage_free = True
281
281
  k_range = np.linspace(min(k), max(k), num_points)
282
- w_k = lambda k: SVIModel.svi_raw(k, a_scaled, b_scaled, m, rho, sigma)
282
+ w_k = lambda k: SVIModel.svi(k, a_scaled, b_scaled, m, rho, sigma)
283
283
  w_prime = lambda k: b_scaled * (rho + (k - m) / np.sqrt((k - m)**2 + sigma**2))
284
284
  w_double_prime = lambda k: b_scaled * sigma**2 / ((k - m)**2 + sigma**2)**(3/2)
285
285
  for k_val in k_range:
@@ -292,7 +292,7 @@ def fit_model(option_chain: pd.DataFrame, num_points: int = 2000) -> Tuple[pd.Da
292
292
  break
293
293
 
294
294
  results_df.at[mat2, 'a'] = float(a_scaled)
295
- results_dfKILLat[mat2, 'b'] = float(b_scaled)
295
+ results_df.at[mat2, 'b'] = float(b_scaled)
296
296
  results_df.at[mat2, 'm'] = float(m)
297
297
  results_df.at[mat2, 'rho'] = float(rho)
298
298
  results_df.at[mat2, 'sigma'] = float(sigma)
@@ -333,8 +333,8 @@ def fit_model(option_chain: pd.DataFrame, num_points: int = 2000) -> Tuple[pd.Da
333
333
  k_check = np.unique(np.concatenate([k_market[mask], np.linspace(min(k_market[mask]), max(k_market[mask]), num_points)]))
334
334
 
335
335
  for k_val in k_check:
336
- w1 = SVIModel.svi_raw(k_val, a1 * t1, b1 * t1, m1, rho1, sigma1)
337
- w2 = SVIModel.svi_raw(k_val, a2 * t2, b2 * t2, m2, rho2, sigma2)
336
+ w1 = SVIModel.svi(k_val, a1 * t1, b1 * t1, m1, rho1, sigma1)
337
+ w2 = SVIModel.svi(k_val, a2 * t2, b2 * t2, m2, rho2, sigma2)
338
338
  if w2 < w1 - 1e-6:
339
339
  logger.warning(f"Calendar arbitrage violation at t1={t1:.4f}, t2={t2:.4f}, k={k_val:.4f}: w1={w1:.6f}, w2={w2:.6f}")
340
340
  calendar_arbitrage_free = False
@@ -401,7 +401,7 @@ def get_iv_surface(model_results: pd.DataFrame,
401
401
  r = model_results.loc[i, 'r'] if 'r' in model_results.columns else 0
402
402
 
403
403
  # Calculate implied volatility
404
- w = np.array([SVIModel.svi_raw(x, *params) for x in LM])
404
+ w = np.array([SVIModel.svi(x, *params) for x in LM])
405
405
  o = np.sqrt(w / t)
406
406
  iv_surface[i] = o
407
407
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: voly
3
- Version: 0.0.196
3
+ Version: 0.0.198
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