voly 0.0.82__py3-none-any.whl → 0.0.83__py3-none-any.whl
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/core/fit.py +18 -11
- voly/core/interpolate.py +5 -2
- {voly-0.0.82.dist-info → voly-0.0.83.dist-info}/METADATA +1 -1
- {voly-0.0.82.dist-info → voly-0.0.83.dist-info}/RECORD +7 -7
- {voly-0.0.82.dist-info → voly-0.0.83.dist-info}/LICENSE +0 -0
- {voly-0.0.82.dist-info → voly-0.0.83.dist-info}/WHEEL +0 -0
- {voly-0.0.82.dist-info → voly-0.0.83.dist-info}/top_level.txt +0 -0
voly/core/fit.py
CHANGED
|
@@ -188,14 +188,16 @@ def fit_model(option_chain: pd.DataFrame,
|
|
|
188
188
|
|
|
189
189
|
|
|
190
190
|
@catch_exception
|
|
191
|
-
def get_iv_surface(
|
|
191
|
+
def get_iv_surface(model_results: pd.DataFrame,
|
|
192
192
|
log_moneyness_params: Tuple[float, float, int] = (-1.5, 1.5, 1000),
|
|
193
193
|
return_domain: str = 'log_moneyness') -> Tuple[Dict[str, np.ndarray], Dict[str, np.ndarray]]:
|
|
194
194
|
"""
|
|
195
195
|
Generate implied volatility surface using optimized SVI parameters.
|
|
196
196
|
|
|
197
|
+
Works with both regular fit_results and interpolated_results dataframes.
|
|
198
|
+
|
|
197
199
|
Parameters:
|
|
198
|
-
-
|
|
200
|
+
- model_results: DataFrame from fit_model() or interpolate_model()
|
|
199
201
|
- log_moneyness_params: Tuple of (min, max, num_points) for the moneyness grid
|
|
200
202
|
- return_domain: Domain for x-axis values ('log_moneyness', 'moneyness', 'strikes', 'delta')
|
|
201
203
|
|
|
@@ -204,6 +206,11 @@ def get_iv_surface(fit_results: pd.DataFrame,
|
|
|
204
206
|
iv_surface: Dictionary mapping maturity names to IV arrays
|
|
205
207
|
x_surface: Dictionary mapping maturity names to requested x domain arrays
|
|
206
208
|
"""
|
|
209
|
+
# Check if required columns are present
|
|
210
|
+
required_columns = ['a', 'b', 'rho', 'm', 'sigma', 'ytm']
|
|
211
|
+
missing_columns = [col for col in required_columns if col not in model_results.columns]
|
|
212
|
+
if missing_columns:
|
|
213
|
+
raise VolyError(f"Required columns missing in model_results: {missing_columns}")
|
|
207
214
|
|
|
208
215
|
# Generate implied volatility surface in log-moneyness domain
|
|
209
216
|
min_m, max_m, num_points = log_moneyness_params
|
|
@@ -213,16 +220,16 @@ def get_iv_surface(fit_results: pd.DataFrame,
|
|
|
213
220
|
x_surface = {}
|
|
214
221
|
|
|
215
222
|
# Process each maturity
|
|
216
|
-
for
|
|
223
|
+
for i in model_results.index:
|
|
217
224
|
# Calculate SVI total implied variance and convert to IV
|
|
218
225
|
params = [
|
|
219
|
-
fit_results.loc[
|
|
220
|
-
fit_results.loc[
|
|
221
|
-
fit_results.loc[
|
|
222
|
-
fit_results.loc[
|
|
223
|
-
fit_results.loc[
|
|
226
|
+
fit_results.loc[i, 'a'],
|
|
227
|
+
fit_results.loc[i, 'b'],
|
|
228
|
+
fit_results.loc[i, 'sigma'],
|
|
229
|
+
fit_results.loc[i, 'rho'],
|
|
230
|
+
fit_results.loc[i, 'm']
|
|
224
231
|
]
|
|
225
|
-
ytm = fit_results.loc[
|
|
232
|
+
ytm = fit_results.loc[i, 'ytm']
|
|
226
233
|
|
|
227
234
|
# Calculate implied volatility
|
|
228
235
|
w_svi = np.array([SVIModel.svi(x, *params) for x in log_moneyness_array])
|
|
@@ -233,8 +240,8 @@ def get_iv_surface(fit_results: pd.DataFrame,
|
|
|
233
240
|
x_surface[maturity] = get_x_domain(
|
|
234
241
|
log_moneyness_params=log_moneyness_params,
|
|
235
242
|
return_domain=return_domain,
|
|
236
|
-
s=fit_results.loc[
|
|
237
|
-
r=fit_results.loc[
|
|
243
|
+
s=fit_results.loc[i, 's'],
|
|
244
|
+
r=fit_results.loc[i, 'r'],
|
|
238
245
|
iv_array=iv_array,
|
|
239
246
|
ytm=ytm
|
|
240
247
|
)
|
voly/core/interpolate.py
CHANGED
|
@@ -88,6 +88,9 @@ def interpolate_model(fit_results: pd.DataFrame,
|
|
|
88
88
|
|
|
89
89
|
# Sort fit_results by ytm
|
|
90
90
|
sorted_fit_results = fit_results.iloc[sorted_indices]
|
|
91
|
+
recent_row = sorted_fit_results.iloc[-1]
|
|
92
|
+
interpolated_df['s'] = recent_row['s']
|
|
93
|
+
interpolated_df['r'] = recent_row['r']
|
|
91
94
|
|
|
92
95
|
# Interpolate model parameters
|
|
93
96
|
for param in param_columns:
|
|
@@ -117,8 +120,8 @@ def interpolate_model(fit_results: pd.DataFrame,
|
|
|
117
120
|
interpolated_df[param] = f(target_years)
|
|
118
121
|
|
|
119
122
|
# Ensure consistent ordering of columns with expected structure
|
|
120
|
-
expected_columns = ['u', 'maturity_date', 'dtm', 'ytm', 'a', 'b', 'rho', 'm', 'sigma',
|
|
121
|
-
'nu', 'psi', 'p', 'c', 'nu_tilde']
|
|
123
|
+
expected_columns = ['s', 'u', 'maturity_date', 'dtm', 'ytm', 'a', 'b', 'rho', 'm', 'sigma',
|
|
124
|
+
'nu', 'psi', 'p', 'c', 'nu_tilde', 'r']
|
|
122
125
|
|
|
123
126
|
# Create final column order based on available columns
|
|
124
127
|
column_order = [col for col in expected_columns if col in interpolated_df.columns]
|
|
@@ -6,13 +6,13 @@ voly/models.py,sha256=LXXIlpXZQEfXTuCngxC8Hd3bWtw6wdXDCSGxTLmHM-c,3659
|
|
|
6
6
|
voly/core/__init__.py,sha256=bu6fS2I1Pj9fPPnl-zY3L7NqrZSY5Zy6NY2uMUvdhKs,183
|
|
7
7
|
voly/core/charts.py,sha256=ycZgbPeROYVRMO61auVXCGLmKZA2NwS3vLOsQ9wqCyo,27526
|
|
8
8
|
voly/core/data.py,sha256=JCPD44UDSJqh83jjapAtXVpJEHm8Hq4JC8lVhl5Zb4A,8935
|
|
9
|
-
voly/core/fit.py,sha256=
|
|
10
|
-
voly/core/interpolate.py,sha256=
|
|
9
|
+
voly/core/fit.py,sha256=g6slA9rBC2_Pys5ipAYZNzfCdHdaZF8To8c4HBGHviQ,9549
|
|
10
|
+
voly/core/interpolate.py,sha256=BzLwEuE-PIf0k0oVka7gH6NASlaEdtZAo7zUVwarkoQ,5384
|
|
11
11
|
voly/core/rnd.py,sha256=8FTU-Qp9epW9yE4XSOdiFGIRXrGyXqF6mVgZn1NMvxk,11813
|
|
12
12
|
voly/utils/__init__.py,sha256=E05mWatyC-PDOsCxQV1p5Xi1IgpOomxrNURyCx_gB-w,200
|
|
13
13
|
voly/utils/logger.py,sha256=4-_2bVJmq17Q0d7Rd2mPg1AeR8gxv6EPvcmBDMFWcSM,1744
|
|
14
|
-
voly-0.0.
|
|
15
|
-
voly-0.0.
|
|
16
|
-
voly-0.0.
|
|
17
|
-
voly-0.0.
|
|
18
|
-
voly-0.0.
|
|
14
|
+
voly-0.0.83.dist-info/LICENSE,sha256=wcHIVbE12jfcBOai_wqBKY6xvNQU5E909xL1zZNq_2Q,1065
|
|
15
|
+
voly-0.0.83.dist-info/METADATA,sha256=3Cg0LlfzBCr4ndTbluDuP_mGboM7igJZIs8ak9PXsoU,4092
|
|
16
|
+
voly-0.0.83.dist-info/WHEEL,sha256=52BFRY2Up02UkjOa29eZOS2VxUrpPORXg1pkohGGUS8,91
|
|
17
|
+
voly-0.0.83.dist-info/top_level.txt,sha256=ZfLw2sSxF-LrKAkgGjOmeTcw6_gD-30zvtdEY5W4B7c,5
|
|
18
|
+
voly-0.0.83.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|