voly 0.0.249__tar.gz → 0.0.251__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.249/src/voly.egg-info → voly-0.0.251}/PKG-INFO +1 -1
  2. {voly-0.0.249 → voly-0.0.251}/pyproject.toml +2 -2
  3. {voly-0.0.249 → voly-0.0.251}/src/voly/core/fit.py +11 -12
  4. {voly-0.0.249 → voly-0.0.251/src/voly.egg-info}/PKG-INFO +1 -1
  5. {voly-0.0.249 → voly-0.0.251}/LICENSE +0 -0
  6. {voly-0.0.249 → voly-0.0.251}/README.md +0 -0
  7. {voly-0.0.249 → voly-0.0.251}/setup.cfg +0 -0
  8. {voly-0.0.249 → voly-0.0.251}/setup.py +0 -0
  9. {voly-0.0.249 → voly-0.0.251}/src/voly/__init__.py +0 -0
  10. {voly-0.0.249 → voly-0.0.251}/src/voly/client.py +0 -0
  11. {voly-0.0.249 → voly-0.0.251}/src/voly/core/__init__.py +0 -0
  12. {voly-0.0.249 → voly-0.0.251}/src/voly/core/charts.py +0 -0
  13. {voly-0.0.249 → voly-0.0.251}/src/voly/core/data.py +0 -0
  14. {voly-0.0.249 → voly-0.0.251}/src/voly/core/hd.py +0 -0
  15. {voly-0.0.249 → voly-0.0.251}/src/voly/core/interpolate.py +0 -0
  16. {voly-0.0.249 → voly-0.0.251}/src/voly/core/rnd.py +0 -0
  17. {voly-0.0.249 → voly-0.0.251}/src/voly/exceptions.py +0 -0
  18. {voly-0.0.249 → voly-0.0.251}/src/voly/formulas.py +0 -0
  19. {voly-0.0.249 → voly-0.0.251}/src/voly/models.py +0 -0
  20. {voly-0.0.249 → voly-0.0.251}/src/voly/utils/__init__.py +0 -0
  21. {voly-0.0.249 → voly-0.0.251}/src/voly/utils/density.py +0 -0
  22. {voly-0.0.249 → voly-0.0.251}/src/voly/utils/logger.py +0 -0
  23. {voly-0.0.249 → voly-0.0.251}/src/voly.egg-info/SOURCES.txt +0 -0
  24. {voly-0.0.249 → voly-0.0.251}/src/voly.egg-info/dependency_links.txt +0 -0
  25. {voly-0.0.249 → voly-0.0.251}/src/voly.egg-info/requires.txt +0 -0
  26. {voly-0.0.249 → voly-0.0.251}/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.249
3
+ Version: 0.0.251
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.249"
7
+ version = "0.0.251"
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.249"
63
+ python_version = "0.0.251"
64
64
  warn_return_any = true
65
65
  warn_unused_configs = true
66
66
  disallow_untyped_defs = true
@@ -67,8 +67,7 @@ class SVICalibrator:
67
67
  def filter_market_data(self, group):
68
68
  """Filter and prepare market data"""
69
69
  # Filter for call options only
70
- group = group[group['flag'] == 'C']
71
- group['log_moneyness'] = np.log(group['strikes'] / group['spot_price'].iloc[0])
70
+ group = group[group['option_type'] == 'C']
72
71
 
73
72
  # Handle duplicated IVs by keeping the row closest to log_moneyness=0
74
73
  duplicated_iv = group[group.duplicated('mark_iv', keep=False)]
@@ -150,7 +149,7 @@ class SVICalibrator:
150
149
  result = self.failed_calibration(expiry, maturity, t, len(k))
151
150
  logger.error(f'\033[31mFAILED\033[0m for {maturity} (insufficient data points)')
152
151
  self.update_results(result)
153
- return maturity
152
+ return expiry
154
153
 
155
154
  # Perform SVI fitting
156
155
  params, loss = SVIModel.fit(tiv=w, vega=vega, k=k, tau=t)
@@ -160,10 +159,10 @@ class SVICalibrator:
160
159
  result = self.failed_calibration(expiry, maturity, t, len(k))
161
160
  logger.error(f'\033[31mFAILED\033[0m for {maturity}')
162
161
  self.update_results(result)
163
- return maturity
162
+ return expiry
164
163
 
165
164
  # Successful fitting
166
- self.params_dict[maturity] = (t, params)
165
+ self.params_dict[expiry] = (t, params)
167
166
 
168
167
  # Calculate all model statistics
169
168
  stats = self.calculate_model_stats(params, t, k, iv)
@@ -185,7 +184,7 @@ class SVICalibrator:
185
184
  logger.info(f'\033[32mSUCCESS\033[0m for {maturity}')
186
185
 
187
186
  self.update_results(result)
188
- return maturity
187
+ return expiry
189
188
 
190
189
  def update_results(self, result_row):
191
190
  """Update results data dictionary"""
@@ -211,7 +210,7 @@ class SVICalibrator:
211
210
  # Create results DataFrame and mapping for updates
212
211
  fit_results = pd.DataFrame(self.results_data, index=self.results_data['maturity'])
213
212
  fit_results = fit_results.sort_values(by='t')
214
- maturity_dict = {row['expiry']: idx for idx, row in fit_results.iterrows()}
213
+ maturities_dict = {row['expiry']: idx for idx, row in fit_results.iterrows()}
215
214
 
216
215
  # Check for calendar arbitrage
217
216
  sorted_maturities = sorted(self.params_dict.keys(), key=lambda x: self.params_dict[x][0])
@@ -221,11 +220,11 @@ class SVICalibrator:
221
220
 
222
221
  # Update calendar arbitrage status
223
222
  for mat in sorted_maturities:
224
- mat_name = maturity_dict[mat]
223
+ mat_name = maturities_dict[mat]
225
224
  fit_results.at[mat_name, 'calendar_arbitrage_free'] = calendar_arbitrage_free
226
225
 
227
226
  # Correct calendar arbitrage violations
228
- self.correct_calendar_arbitrage(sorted_maturities, fit_results, maturity_dict)
227
+ self.correct_calendar_arbitrage(sorted_maturities, fit_results, maturities_dict)
229
228
 
230
229
  # Clean up results and report execution time
231
230
  fit_results = fit_results.drop(columns='maturity')
@@ -234,7 +233,7 @@ class SVICalibrator:
234
233
 
235
234
  return fit_results
236
235
 
237
- def correct_calendar_arbitrage(self, sorted_maturities, fit_results, maturity_dict):
236
+ def correct_calendar_arbitrage(self, sorted_maturities, fit_results, maturities_dict):
238
237
  """Handle calendar arbitrage corrections"""
239
238
  for i in range(1, len(sorted_maturities)):
240
239
  mat2 = sorted_maturities[i]
@@ -260,7 +259,7 @@ class SVICalibrator:
260
259
 
261
260
  # Calculate new stats and update results
262
261
  stats = self.calculate_model_stats(new_params, t2, k, iv)
263
- mat2_name = maturity_dict[mat2]
262
+ mat2_name = maturities_dict[mat2]
264
263
 
265
264
  # Update all stats at once
266
265
  for key, value in stats.items():
@@ -274,7 +273,7 @@ class SVICalibrator:
274
273
 
275
274
  # Update final status
276
275
  for mat in sorted_maturities:
277
- mat_name = maturity_dict[mat]
276
+ mat_name = maturities_dict[mat]
278
277
  fit_results.at[mat_name, 'calendar_arbitrage_free'] = calendar_arbitrage_free
279
278
 
280
279
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: voly
3
- Version: 0.0.249
3
+ Version: 0.0.251
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