voly 0.0.257__tar.gz → 0.0.259__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.257/src/voly.egg-info → voly-0.0.259}/PKG-INFO +1 -1
  2. {voly-0.0.257 → voly-0.0.259}/pyproject.toml +2 -2
  3. {voly-0.0.257 → voly-0.0.259}/src/voly/core/charts.py +6 -4
  4. {voly-0.0.257 → voly-0.0.259}/src/voly/core/data.py +0 -53
  5. {voly-0.0.257 → voly-0.0.259}/src/voly/core/rnd.py +1 -1
  6. {voly-0.0.257 → voly-0.0.259/src/voly.egg-info}/PKG-INFO +1 -1
  7. {voly-0.0.257 → voly-0.0.259}/LICENSE +0 -0
  8. {voly-0.0.257 → voly-0.0.259}/README.md +0 -0
  9. {voly-0.0.257 → voly-0.0.259}/setup.cfg +0 -0
  10. {voly-0.0.257 → voly-0.0.259}/setup.py +0 -0
  11. {voly-0.0.257 → voly-0.0.259}/src/voly/__init__.py +0 -0
  12. {voly-0.0.257 → voly-0.0.259}/src/voly/client.py +0 -0
  13. {voly-0.0.257 → voly-0.0.259}/src/voly/core/__init__.py +0 -0
  14. {voly-0.0.257 → voly-0.0.259}/src/voly/core/fit.py +0 -0
  15. {voly-0.0.257 → voly-0.0.259}/src/voly/core/hd.py +0 -0
  16. {voly-0.0.257 → voly-0.0.259}/src/voly/core/interpolate.py +0 -0
  17. {voly-0.0.257 → voly-0.0.259}/src/voly/exceptions.py +0 -0
  18. {voly-0.0.257 → voly-0.0.259}/src/voly/formulas.py +0 -0
  19. {voly-0.0.257 → voly-0.0.259}/src/voly/models.py +0 -0
  20. {voly-0.0.257 → voly-0.0.259}/src/voly/utils/__init__.py +0 -0
  21. {voly-0.0.257 → voly-0.0.259}/src/voly/utils/density.py +0 -0
  22. {voly-0.0.257 → voly-0.0.259}/src/voly/utils/logger.py +0 -0
  23. {voly-0.0.257 → voly-0.0.259}/src/voly.egg-info/SOURCES.txt +0 -0
  24. {voly-0.0.257 → voly-0.0.259}/src/voly.egg-info/dependency_links.txt +0 -0
  25. {voly-0.0.257 → voly-0.0.259}/src/voly.egg-info/requires.txt +0 -0
  26. {voly-0.0.257 → voly-0.0.259}/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.257
3
+ Version: 0.0.259
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.257"
7
+ version = "0.0.259"
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.257"
63
+ python_version = "0.0.259"
64
64
  warn_return_any = true
65
65
  warn_unused_configs = true
66
66
  disallow_untyped_defs = true
@@ -38,6 +38,7 @@ def plot_volatility_smile(x_array: np.ndarray,
38
38
  Returns:
39
39
  - Plotly figure
40
40
  """
41
+
41
42
  # Map domain types to axis labels
42
43
  domain_labels = {
43
44
  'log_moneyness': 'Log Moneyness',
@@ -62,6 +63,7 @@ def plot_volatility_smile(x_array: np.ndarray,
62
63
 
63
64
  # Add market data if provided
64
65
  if option_chain is not None and maturity is not None:
66
+ currency = option_chain['currency'].iloc[0]
65
67
  maturity_data = option_chain[option_chain['maturity'] == maturity]
66
68
  if return_domain == 'delta':
67
69
  maturity_data = maturity_data[maturity_data['flag'] == 'C']
@@ -80,9 +82,9 @@ def plot_volatility_smile(x_array: np.ndarray,
80
82
  )
81
83
  )
82
84
 
83
- title = f'Vol Smile for {maturity}'
85
+ title = f'{currency} - Vol Smile for {maturity}'
84
86
  else:
85
- title = f'Vol Smile for {maturity}'
87
+ title = f'{currency} - Vol Smile for {maturity}'
86
88
  else:
87
89
  title = 'Volatility Smile'
88
90
 
@@ -182,7 +184,7 @@ def plot_raw_parameters(fit_results: pd.DataFrame) -> go.Figure:
182
184
 
183
185
  # Update layout
184
186
  fig.update_layout(
185
- title='Raw SVI Parameters Across Expiries',
187
+ title='Raw SVI Parameters Across Maturities',
186
188
  template='plotly_dark',
187
189
  showlegend=False
188
190
  )
@@ -245,7 +247,7 @@ def plot_jw_parameters(fit_results: pd.DataFrame) -> go.Figure:
245
247
 
246
248
  # Update layout
247
249
  fig.update_layout(
248
- title='Jump-Wing Parameters Across Expiries',
250
+ title='Jump-Wing Parameters Across Maturities',
249
251
  template='plotly_dark',
250
252
  showlegend=False
251
253
  )
@@ -182,59 +182,6 @@ async def get_deribit_data(currency: str = "BTC") -> pd.DataFrame:
182
182
 
183
183
  return pd.DataFrame(all_data)
184
184
 
185
- '''
186
- @catch_exception
187
- def process_option_chain(df: pd.DataFrame, currency: str) -> pd.DataFrame:
188
- """
189
- Process raw option chain data into a standardized format.
190
-
191
- Parameters:
192
- df (pd.DataFrame): Raw option chain data
193
- currency (str): Currency code (e.g., 'BTC', 'ETH')
194
-
195
- Returns:
196
- pd.DataFrame: Processed option chain data
197
- """
198
- logger.info(f"Processing data for {currency}...")
199
-
200
- # Apply extraction to create new columns
201
- splits = df['instrument_name'].str.split('-')
202
- df['maturity_name'] = splits.str[1]
203
- if currency == 'XRP':
204
- df['strikes'] = splits.str[2].str.replace('d', '.', regex=False).astype(float)
205
- else:
206
- df['strikes'] = splits.str[2].astype(float)
207
- df['option_type'] = splits.str[3]
208
-
209
- # Create maturity date at 8:00 AM UTC
210
- df['maturity_date'] = pd.to_datetime(df['maturity_name'].apply(
211
- lambda x: int(dt.datetime.strptime(x, "%d%b%y")
212
- .replace(hour=8, minute=0, second=0, tzinfo=dt.timezone.utc)
213
- .timestamp() * 1000)), unit='ms')
214
-
215
- # Get reference time from timestamp
216
- reference_time = dt.datetime.fromtimestamp(df['timestamp'].iloc[0] / 1000)
217
-
218
- # Calculate time to expiry in years
219
- df['t'] = ((df['maturity_date'] - reference_time).dt.total_seconds() / (24 * 60 * 60)) / 365.25
220
-
221
- # Calculate implied volatility (convert from percentage)
222
- df['mark_iv'] = df['mark_iv'] / 100
223
- df['bid_iv'] = df['bid_iv'].replace({0: np.nan}) / 100
224
- df['ask_iv'] = df['ask_iv'].replace({0: np.nan}) / 100
225
-
226
- # Calculate log-moneyness
227
- df['log_moneyness'] = np.log(df['strikes'] / df['index_price'].iloc[0])
228
- # Calculate moneyness
229
- df['moneyness'] = np.exp(df['log_moneyness'])
230
- # Calculate returns
231
- df['returns'] = df['moneyness'] - 1
232
-
233
- logger.info(f"Processing complete!")
234
-
235
- return df
236
- '''
237
-
238
185
 
239
186
  @catch_exception
240
187
  def process_option_chain(df: pd.DataFrame, currency: str) -> pd.DataFrame:
@@ -51,7 +51,7 @@ def breeden(domain_params, s, r, o, t, return_domain):
51
51
  dx = domains['dx']
52
52
 
53
53
  # Calculate option prices and derivatives
54
- c = bs(s, K, r, o, t, option_type='call')
54
+ c = [bs(s, strike, r, vol, t, flag='call') for strike, vol in zip(K, o)]
55
55
  c1 = np.gradient(c, K)
56
56
  c2 = np.gradient(c1, K)
57
57
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: voly
3
- Version: 0.0.257
3
+ Version: 0.0.259
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