voly 0.0.258__tar.gz → 0.0.260__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.
- {voly-0.0.258/src/voly.egg-info → voly-0.0.260}/PKG-INFO +1 -1
- {voly-0.0.258 → voly-0.0.260}/pyproject.toml +2 -2
- {voly-0.0.258 → voly-0.0.260}/src/voly/core/data.py +0 -53
- {voly-0.0.258 → voly-0.0.260}/src/voly/core/rnd.py +1 -1
- {voly-0.0.258 → voly-0.0.260/src/voly.egg-info}/PKG-INFO +1 -1
- {voly-0.0.258 → voly-0.0.260}/LICENSE +0 -0
- {voly-0.0.258 → voly-0.0.260}/README.md +0 -0
- {voly-0.0.258 → voly-0.0.260}/setup.cfg +0 -0
- {voly-0.0.258 → voly-0.0.260}/setup.py +0 -0
- {voly-0.0.258 → voly-0.0.260}/src/voly/__init__.py +0 -0
- {voly-0.0.258 → voly-0.0.260}/src/voly/client.py +0 -0
- {voly-0.0.258 → voly-0.0.260}/src/voly/core/__init__.py +0 -0
- {voly-0.0.258 → voly-0.0.260}/src/voly/core/charts.py +0 -0
- {voly-0.0.258 → voly-0.0.260}/src/voly/core/fit.py +0 -0
- {voly-0.0.258 → voly-0.0.260}/src/voly/core/hd.py +0 -0
- {voly-0.0.258 → voly-0.0.260}/src/voly/core/interpolate.py +0 -0
- {voly-0.0.258 → voly-0.0.260}/src/voly/exceptions.py +0 -0
- {voly-0.0.258 → voly-0.0.260}/src/voly/formulas.py +0 -0
- {voly-0.0.258 → voly-0.0.260}/src/voly/models.py +0 -0
- {voly-0.0.258 → voly-0.0.260}/src/voly/utils/__init__.py +0 -0
- {voly-0.0.258 → voly-0.0.260}/src/voly/utils/density.py +0 -0
- {voly-0.0.258 → voly-0.0.260}/src/voly/utils/logger.py +0 -0
- {voly-0.0.258 → voly-0.0.260}/src/voly.egg-info/SOURCES.txt +0 -0
- {voly-0.0.258 → voly-0.0.260}/src/voly.egg-info/dependency_links.txt +0 -0
- {voly-0.0.258 → voly-0.0.260}/src/voly.egg-info/requires.txt +0 -0
- {voly-0.0.258 → voly-0.0.260}/src/voly.egg-info/top_level.txt +0 -0
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
4
4
|
|
5
5
|
[project]
|
6
6
|
name = "voly"
|
7
|
-
version = "0.0.
|
7
|
+
version = "0.0.260"
|
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.
|
63
|
+
python_version = "0.0.260"
|
64
64
|
warn_return_any = true
|
65
65
|
warn_unused_configs = true
|
66
66
|
disallow_untyped_defs = true
|
@@ -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,
|
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
|
|
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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|