qis 3.0.3__tar.gz → 3.0.4__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.
- {qis-3.0.3 → qis-3.0.4}/PKG-INFO +1 -1
- {qis-3.0.3 → qis-3.0.4}/pyproject.toml +1 -1
- {qis-3.0.3 → qis-3.0.4}/qis/portfolio/ewm_portfolio_risk.py +7 -1
- {qis-3.0.3 → qis-3.0.4}/qis/settings.yaml +0 -1
- {qis-3.0.3 → qis-3.0.4}/qis/utils/np_ops.py +2 -3
- {qis-3.0.3 → qis-3.0.4}/LICENSE.txt +0 -0
- {qis-3.0.3 → qis-3.0.4}/README.md +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/__init__.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/examples/best_returns.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/examples/bond_futures_portfolio.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/examples/bootstrap_analysis.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/examples/boxplot_conditional_returns.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/examples/btc_asset_corr.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/examples/constant_notional.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/examples/constant_weight_portfolios.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/examples/core/perf_bbg_prices.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/examples/core/price_plots.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/examples/core/us_election.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/examples/credit_spreads.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/examples/credit_trackers.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/examples/europe_futures.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/examples/factsheets/multi_assets.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/examples/factsheets/multi_strategy.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/examples/factsheets/pyblogs_reports.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/examples/factsheets/strategy.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/examples/factsheets/strategy_benchmark.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/examples/generate_option_rolls.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/examples/interpolation_infrequent_returns.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/examples/leveraged_strategies.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/examples/long_short.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/examples/momentum_indices.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/examples/oakmark_analysis.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/examples/ohlc_vol_analysis.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/examples/overnight_returns.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/examples/perf_external_assets.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/examples/perp_pricing.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/examples/readme_performances.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/examples/risk_return_frontier.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/examples/rolling_performance.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/examples/seasonality.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/examples/sharpe_vs_sortino.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/examples/simulate_quant_strats.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/examples/test_ewm.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/examples/test_scatter.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/examples/try_pybloqs.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/examples/universe_corrs.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/examples/vix_beta_to_equities_bonds.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/examples/vix_conditional_returns.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/examples/vix_spy_by_year.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/examples/vix_tenor_analysis.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/examples/vol_without_weekends.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/file_utils.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/local_path.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/models/README.md +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/models/__init__.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/models/linear/__init__.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/models/linear/auto_corr.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/models/linear/corr_cov_matrix.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/models/linear/ewm.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/models/linear/ewm_convolution.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/models/linear/ewm_factors.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/models/linear/ewm_winsor_outliers.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/models/linear/pca.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/models/linear/plot_correlations.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/models/linear/ra_returns.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/models/stats/__init__.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/models/stats/bootstrap.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/models/stats/ohlc_vol.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/models/stats/rolling_stats.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/models/stats/test_bootstrap.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/perfstats/README.md +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/perfstats/__init__.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/perfstats/cond_regression.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/perfstats/config.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/perfstats/desc_table.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/perfstats/fx_ops.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/perfstats/perf_stats.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/perfstats/regime_classifier.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/perfstats/returns.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/perfstats/timeseries_bfill.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/plots/README.md +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/plots/__init__.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/plots/bars.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/plots/boxplot.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/plots/contour.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/plots/derived/__init__.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/plots/derived/data_timeseries.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/plots/derived/desc_table.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/plots/derived/drawdowns.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/plots/derived/perf_table.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/plots/derived/prices.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/plots/derived/regime_class_table.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/plots/derived/regime_data.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/plots/derived/regime_pdf.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/plots/derived/regime_scatter.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/plots/derived/returns_heatmap.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/plots/derived/returns_scatter.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/plots/errorbar.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/plots/heatmap.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/plots/histogram.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/plots/histplot2d.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/plots/lineplot.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/plots/pie.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/plots/qqplot.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/plots/reports/__init__.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/plots/reports/econ_data_single.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/plots/reports/gantt_data_history.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/plots/reports/price_history.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/plots/reports/utils.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/plots/scatter.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/plots/stackplot.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/plots/table.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/plots/time_series.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/plots/utils.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/portfolio/README.md +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/portfolio/__init__.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/portfolio/backtester.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/portfolio/multi_portfolio_data.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/portfolio/portfolio_data.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/portfolio/reports/__init__.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/portfolio/reports/brinson_attribution.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/portfolio/reports/config.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/portfolio/reports/multi_assets_factsheet.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/portfolio/reports/multi_strategy_factseet_pybloqs.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/portfolio/reports/multi_strategy_factsheet.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/portfolio/reports/strategy_benchmark_factsheet.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/portfolio/reports/strategy_benchmark_factsheet_pybloqs.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/portfolio/reports/strategy_factsheet.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/portfolio/reports/strategy_signal_factsheet.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/portfolio/strats/__init__.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/portfolio/strats/quant_strats_delta1.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/portfolio/strats/seasonal_strats.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/sql_engine.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/test_data.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/utils/README.md +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/utils/__init__.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/utils/dates.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/utils/df_agg.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/utils/df_cut.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/utils/df_freq.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/utils/df_groups.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/utils/df_melt.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/utils/df_ops.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/utils/df_str.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/utils/df_to_scores.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/utils/df_to_weights.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/utils/generic.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/utils/ols.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/utils/sampling.py +0 -0
- {qis-3.0.3 → qis-3.0.4}/qis/utils/struct_ops.py +0 -0
{qis-3.0.3 → qis-3.0.4}/PKG-INFO
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.3
|
2
2
|
Name: qis
|
3
|
-
Version: 3.0.
|
3
|
+
Version: 3.0.4
|
4
4
|
Summary: Implementation of visualisation and reporting analytics for Quantitative Investment Strategies
|
5
5
|
License: LICENSE.txt
|
6
6
|
Keywords: quantitative,investing,portfolio optimization,systematic strategies,volatility
|
@@ -217,7 +217,13 @@ def compute_portfolio_independent_var_by_ac(prices: pd.DataFrame,
|
|
217
217
|
def compute_portfolio_risk_contributions(w: Union[np.ndarray, pd.Series],
|
218
218
|
covar: Union[np.ndarray, pd.DataFrame]
|
219
219
|
) -> Union[np.ndarray, pd.Series]:
|
220
|
+
if isinstance(covar, pd.DataFrame) and isinstance(w, pd.Series): # make sure weights are alined
|
221
|
+
w = w.reindex(index=covar.index).fillna(0.0)
|
222
|
+
elif isinstance(covar, np.ndarray) and isinstance(w, np.ndarray):
|
223
|
+
assert covar.shape[0] == covar.shape[1] == w.shape[0]
|
224
|
+
else:
|
225
|
+
raise ValueError(f"unnsuported types {type(w)} and {type(covar)}")
|
220
226
|
portfolio_vol = np.sqrt(w.T @ covar @ w)
|
221
227
|
marginal_risk_contribution = covar @ w.T
|
222
228
|
rc = np.multiply(marginal_risk_contribution, w) / portfolio_vol
|
223
|
-
return rc
|
229
|
+
return rc
|
@@ -249,14 +249,13 @@ def to_finite_ratio(x: Union[pd.Series, pd.DataFrame, np.ndarray],
|
|
249
249
|
return x_y
|
250
250
|
|
251
251
|
|
252
|
-
|
253
|
-
def covar_to_corr(covar: np.ndarray) -> np.ndarray:
|
252
|
+
def covar_to_corr(covar: Union[np.ndarray, pd.DataFrame]) -> Union[np.ndarray, pd.DataFrame]:
|
254
253
|
"""
|
255
254
|
compute correlation out of covariance
|
256
255
|
"""
|
257
256
|
inv_vol = np.reciprocal(np.sqrt(np.diag(covar)))
|
258
257
|
norm = np.outer(inv_vol, inv_vol)
|
259
|
-
covar
|
258
|
+
covar = covar.multiply(norm)
|
260
259
|
return covar
|
261
260
|
|
262
261
|
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|