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.
Files changed (150) hide show
  1. {qis-3.0.3 → qis-3.0.4}/PKG-INFO +1 -1
  2. {qis-3.0.3 → qis-3.0.4}/pyproject.toml +1 -1
  3. {qis-3.0.3 → qis-3.0.4}/qis/portfolio/ewm_portfolio_risk.py +7 -1
  4. {qis-3.0.3 → qis-3.0.4}/qis/settings.yaml +0 -1
  5. {qis-3.0.3 → qis-3.0.4}/qis/utils/np_ops.py +2 -3
  6. {qis-3.0.3 → qis-3.0.4}/LICENSE.txt +0 -0
  7. {qis-3.0.3 → qis-3.0.4}/README.md +0 -0
  8. {qis-3.0.3 → qis-3.0.4}/qis/__init__.py +0 -0
  9. {qis-3.0.3 → qis-3.0.4}/qis/examples/best_returns.py +0 -0
  10. {qis-3.0.3 → qis-3.0.4}/qis/examples/bond_futures_portfolio.py +0 -0
  11. {qis-3.0.3 → qis-3.0.4}/qis/examples/bootstrap_analysis.py +0 -0
  12. {qis-3.0.3 → qis-3.0.4}/qis/examples/boxplot_conditional_returns.py +0 -0
  13. {qis-3.0.3 → qis-3.0.4}/qis/examples/btc_asset_corr.py +0 -0
  14. {qis-3.0.3 → qis-3.0.4}/qis/examples/constant_notional.py +0 -0
  15. {qis-3.0.3 → qis-3.0.4}/qis/examples/constant_weight_portfolios.py +0 -0
  16. {qis-3.0.3 → qis-3.0.4}/qis/examples/core/perf_bbg_prices.py +0 -0
  17. {qis-3.0.3 → qis-3.0.4}/qis/examples/core/price_plots.py +0 -0
  18. {qis-3.0.3 → qis-3.0.4}/qis/examples/core/us_election.py +0 -0
  19. {qis-3.0.3 → qis-3.0.4}/qis/examples/credit_spreads.py +0 -0
  20. {qis-3.0.3 → qis-3.0.4}/qis/examples/credit_trackers.py +0 -0
  21. {qis-3.0.3 → qis-3.0.4}/qis/examples/europe_futures.py +0 -0
  22. {qis-3.0.3 → qis-3.0.4}/qis/examples/factsheets/multi_assets.py +0 -0
  23. {qis-3.0.3 → qis-3.0.4}/qis/examples/factsheets/multi_strategy.py +0 -0
  24. {qis-3.0.3 → qis-3.0.4}/qis/examples/factsheets/pyblogs_reports.py +0 -0
  25. {qis-3.0.3 → qis-3.0.4}/qis/examples/factsheets/strategy.py +0 -0
  26. {qis-3.0.3 → qis-3.0.4}/qis/examples/factsheets/strategy_benchmark.py +0 -0
  27. {qis-3.0.3 → qis-3.0.4}/qis/examples/generate_option_rolls.py +0 -0
  28. {qis-3.0.3 → qis-3.0.4}/qis/examples/interpolation_infrequent_returns.py +0 -0
  29. {qis-3.0.3 → qis-3.0.4}/qis/examples/leveraged_strategies.py +0 -0
  30. {qis-3.0.3 → qis-3.0.4}/qis/examples/long_short.py +0 -0
  31. {qis-3.0.3 → qis-3.0.4}/qis/examples/momentum_indices.py +0 -0
  32. {qis-3.0.3 → qis-3.0.4}/qis/examples/oakmark_analysis.py +0 -0
  33. {qis-3.0.3 → qis-3.0.4}/qis/examples/ohlc_vol_analysis.py +0 -0
  34. {qis-3.0.3 → qis-3.0.4}/qis/examples/overnight_returns.py +0 -0
  35. {qis-3.0.3 → qis-3.0.4}/qis/examples/perf_external_assets.py +0 -0
  36. {qis-3.0.3 → qis-3.0.4}/qis/examples/perp_pricing.py +0 -0
  37. {qis-3.0.3 → qis-3.0.4}/qis/examples/readme_performances.py +0 -0
  38. {qis-3.0.3 → qis-3.0.4}/qis/examples/risk_return_frontier.py +0 -0
  39. {qis-3.0.3 → qis-3.0.4}/qis/examples/rolling_performance.py +0 -0
  40. {qis-3.0.3 → qis-3.0.4}/qis/examples/seasonality.py +0 -0
  41. {qis-3.0.3 → qis-3.0.4}/qis/examples/sharpe_vs_sortino.py +0 -0
  42. {qis-3.0.3 → qis-3.0.4}/qis/examples/simulate_quant_strats.py +0 -0
  43. {qis-3.0.3 → qis-3.0.4}/qis/examples/test_ewm.py +0 -0
  44. {qis-3.0.3 → qis-3.0.4}/qis/examples/test_scatter.py +0 -0
  45. {qis-3.0.3 → qis-3.0.4}/qis/examples/try_pybloqs.py +0 -0
  46. {qis-3.0.3 → qis-3.0.4}/qis/examples/universe_corrs.py +0 -0
  47. {qis-3.0.3 → qis-3.0.4}/qis/examples/vix_beta_to_equities_bonds.py +0 -0
  48. {qis-3.0.3 → qis-3.0.4}/qis/examples/vix_conditional_returns.py +0 -0
  49. {qis-3.0.3 → qis-3.0.4}/qis/examples/vix_spy_by_year.py +0 -0
  50. {qis-3.0.3 → qis-3.0.4}/qis/examples/vix_tenor_analysis.py +0 -0
  51. {qis-3.0.3 → qis-3.0.4}/qis/examples/vol_without_weekends.py +0 -0
  52. {qis-3.0.3 → qis-3.0.4}/qis/file_utils.py +0 -0
  53. {qis-3.0.3 → qis-3.0.4}/qis/local_path.py +0 -0
  54. {qis-3.0.3 → qis-3.0.4}/qis/models/README.md +0 -0
  55. {qis-3.0.3 → qis-3.0.4}/qis/models/__init__.py +0 -0
  56. {qis-3.0.3 → qis-3.0.4}/qis/models/linear/__init__.py +0 -0
  57. {qis-3.0.3 → qis-3.0.4}/qis/models/linear/auto_corr.py +0 -0
  58. {qis-3.0.3 → qis-3.0.4}/qis/models/linear/corr_cov_matrix.py +0 -0
  59. {qis-3.0.3 → qis-3.0.4}/qis/models/linear/ewm.py +0 -0
  60. {qis-3.0.3 → qis-3.0.4}/qis/models/linear/ewm_convolution.py +0 -0
  61. {qis-3.0.3 → qis-3.0.4}/qis/models/linear/ewm_factors.py +0 -0
  62. {qis-3.0.3 → qis-3.0.4}/qis/models/linear/ewm_winsor_outliers.py +0 -0
  63. {qis-3.0.3 → qis-3.0.4}/qis/models/linear/pca.py +0 -0
  64. {qis-3.0.3 → qis-3.0.4}/qis/models/linear/plot_correlations.py +0 -0
  65. {qis-3.0.3 → qis-3.0.4}/qis/models/linear/ra_returns.py +0 -0
  66. {qis-3.0.3 → qis-3.0.4}/qis/models/stats/__init__.py +0 -0
  67. {qis-3.0.3 → qis-3.0.4}/qis/models/stats/bootstrap.py +0 -0
  68. {qis-3.0.3 → qis-3.0.4}/qis/models/stats/ohlc_vol.py +0 -0
  69. {qis-3.0.3 → qis-3.0.4}/qis/models/stats/rolling_stats.py +0 -0
  70. {qis-3.0.3 → qis-3.0.4}/qis/models/stats/test_bootstrap.py +0 -0
  71. {qis-3.0.3 → qis-3.0.4}/qis/perfstats/README.md +0 -0
  72. {qis-3.0.3 → qis-3.0.4}/qis/perfstats/__init__.py +0 -0
  73. {qis-3.0.3 → qis-3.0.4}/qis/perfstats/cond_regression.py +0 -0
  74. {qis-3.0.3 → qis-3.0.4}/qis/perfstats/config.py +0 -0
  75. {qis-3.0.3 → qis-3.0.4}/qis/perfstats/desc_table.py +0 -0
  76. {qis-3.0.3 → qis-3.0.4}/qis/perfstats/fx_ops.py +0 -0
  77. {qis-3.0.3 → qis-3.0.4}/qis/perfstats/perf_stats.py +0 -0
  78. {qis-3.0.3 → qis-3.0.4}/qis/perfstats/regime_classifier.py +0 -0
  79. {qis-3.0.3 → qis-3.0.4}/qis/perfstats/returns.py +0 -0
  80. {qis-3.0.3 → qis-3.0.4}/qis/perfstats/timeseries_bfill.py +0 -0
  81. {qis-3.0.3 → qis-3.0.4}/qis/plots/README.md +0 -0
  82. {qis-3.0.3 → qis-3.0.4}/qis/plots/__init__.py +0 -0
  83. {qis-3.0.3 → qis-3.0.4}/qis/plots/bars.py +0 -0
  84. {qis-3.0.3 → qis-3.0.4}/qis/plots/boxplot.py +0 -0
  85. {qis-3.0.3 → qis-3.0.4}/qis/plots/contour.py +0 -0
  86. {qis-3.0.3 → qis-3.0.4}/qis/plots/derived/__init__.py +0 -0
  87. {qis-3.0.3 → qis-3.0.4}/qis/plots/derived/data_timeseries.py +0 -0
  88. {qis-3.0.3 → qis-3.0.4}/qis/plots/derived/desc_table.py +0 -0
  89. {qis-3.0.3 → qis-3.0.4}/qis/plots/derived/drawdowns.py +0 -0
  90. {qis-3.0.3 → qis-3.0.4}/qis/plots/derived/perf_table.py +0 -0
  91. {qis-3.0.3 → qis-3.0.4}/qis/plots/derived/prices.py +0 -0
  92. {qis-3.0.3 → qis-3.0.4}/qis/plots/derived/regime_class_table.py +0 -0
  93. {qis-3.0.3 → qis-3.0.4}/qis/plots/derived/regime_data.py +0 -0
  94. {qis-3.0.3 → qis-3.0.4}/qis/plots/derived/regime_pdf.py +0 -0
  95. {qis-3.0.3 → qis-3.0.4}/qis/plots/derived/regime_scatter.py +0 -0
  96. {qis-3.0.3 → qis-3.0.4}/qis/plots/derived/returns_heatmap.py +0 -0
  97. {qis-3.0.3 → qis-3.0.4}/qis/plots/derived/returns_scatter.py +0 -0
  98. {qis-3.0.3 → qis-3.0.4}/qis/plots/errorbar.py +0 -0
  99. {qis-3.0.3 → qis-3.0.4}/qis/plots/heatmap.py +0 -0
  100. {qis-3.0.3 → qis-3.0.4}/qis/plots/histogram.py +0 -0
  101. {qis-3.0.3 → qis-3.0.4}/qis/plots/histplot2d.py +0 -0
  102. {qis-3.0.3 → qis-3.0.4}/qis/plots/lineplot.py +0 -0
  103. {qis-3.0.3 → qis-3.0.4}/qis/plots/pie.py +0 -0
  104. {qis-3.0.3 → qis-3.0.4}/qis/plots/qqplot.py +0 -0
  105. {qis-3.0.3 → qis-3.0.4}/qis/plots/reports/__init__.py +0 -0
  106. {qis-3.0.3 → qis-3.0.4}/qis/plots/reports/econ_data_single.py +0 -0
  107. {qis-3.0.3 → qis-3.0.4}/qis/plots/reports/gantt_data_history.py +0 -0
  108. {qis-3.0.3 → qis-3.0.4}/qis/plots/reports/price_history.py +0 -0
  109. {qis-3.0.3 → qis-3.0.4}/qis/plots/reports/utils.py +0 -0
  110. {qis-3.0.3 → qis-3.0.4}/qis/plots/scatter.py +0 -0
  111. {qis-3.0.3 → qis-3.0.4}/qis/plots/stackplot.py +0 -0
  112. {qis-3.0.3 → qis-3.0.4}/qis/plots/table.py +0 -0
  113. {qis-3.0.3 → qis-3.0.4}/qis/plots/time_series.py +0 -0
  114. {qis-3.0.3 → qis-3.0.4}/qis/plots/utils.py +0 -0
  115. {qis-3.0.3 → qis-3.0.4}/qis/portfolio/README.md +0 -0
  116. {qis-3.0.3 → qis-3.0.4}/qis/portfolio/__init__.py +0 -0
  117. {qis-3.0.3 → qis-3.0.4}/qis/portfolio/backtester.py +0 -0
  118. {qis-3.0.3 → qis-3.0.4}/qis/portfolio/multi_portfolio_data.py +0 -0
  119. {qis-3.0.3 → qis-3.0.4}/qis/portfolio/portfolio_data.py +0 -0
  120. {qis-3.0.3 → qis-3.0.4}/qis/portfolio/reports/__init__.py +0 -0
  121. {qis-3.0.3 → qis-3.0.4}/qis/portfolio/reports/brinson_attribution.py +0 -0
  122. {qis-3.0.3 → qis-3.0.4}/qis/portfolio/reports/config.py +0 -0
  123. {qis-3.0.3 → qis-3.0.4}/qis/portfolio/reports/multi_assets_factsheet.py +0 -0
  124. {qis-3.0.3 → qis-3.0.4}/qis/portfolio/reports/multi_strategy_factseet_pybloqs.py +0 -0
  125. {qis-3.0.3 → qis-3.0.4}/qis/portfolio/reports/multi_strategy_factsheet.py +0 -0
  126. {qis-3.0.3 → qis-3.0.4}/qis/portfolio/reports/strategy_benchmark_factsheet.py +0 -0
  127. {qis-3.0.3 → qis-3.0.4}/qis/portfolio/reports/strategy_benchmark_factsheet_pybloqs.py +0 -0
  128. {qis-3.0.3 → qis-3.0.4}/qis/portfolio/reports/strategy_factsheet.py +0 -0
  129. {qis-3.0.3 → qis-3.0.4}/qis/portfolio/reports/strategy_signal_factsheet.py +0 -0
  130. {qis-3.0.3 → qis-3.0.4}/qis/portfolio/strats/__init__.py +0 -0
  131. {qis-3.0.3 → qis-3.0.4}/qis/portfolio/strats/quant_strats_delta1.py +0 -0
  132. {qis-3.0.3 → qis-3.0.4}/qis/portfolio/strats/seasonal_strats.py +0 -0
  133. {qis-3.0.3 → qis-3.0.4}/qis/sql_engine.py +0 -0
  134. {qis-3.0.3 → qis-3.0.4}/qis/test_data.py +0 -0
  135. {qis-3.0.3 → qis-3.0.4}/qis/utils/README.md +0 -0
  136. {qis-3.0.3 → qis-3.0.4}/qis/utils/__init__.py +0 -0
  137. {qis-3.0.3 → qis-3.0.4}/qis/utils/dates.py +0 -0
  138. {qis-3.0.3 → qis-3.0.4}/qis/utils/df_agg.py +0 -0
  139. {qis-3.0.3 → qis-3.0.4}/qis/utils/df_cut.py +0 -0
  140. {qis-3.0.3 → qis-3.0.4}/qis/utils/df_freq.py +0 -0
  141. {qis-3.0.3 → qis-3.0.4}/qis/utils/df_groups.py +0 -0
  142. {qis-3.0.3 → qis-3.0.4}/qis/utils/df_melt.py +0 -0
  143. {qis-3.0.3 → qis-3.0.4}/qis/utils/df_ops.py +0 -0
  144. {qis-3.0.3 → qis-3.0.4}/qis/utils/df_str.py +0 -0
  145. {qis-3.0.3 → qis-3.0.4}/qis/utils/df_to_scores.py +0 -0
  146. {qis-3.0.3 → qis-3.0.4}/qis/utils/df_to_weights.py +0 -0
  147. {qis-3.0.3 → qis-3.0.4}/qis/utils/generic.py +0 -0
  148. {qis-3.0.3 → qis-3.0.4}/qis/utils/ols.py +0 -0
  149. {qis-3.0.3 → qis-3.0.4}/qis/utils/sampling.py +0 -0
  150. {qis-3.0.3 → qis-3.0.4}/qis/utils/struct_ops.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: qis
3
- Version: 3.0.3
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
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "qis"
3
- version = "3.0.3"
3
+ version = "3.0.4"
4
4
  description = "Implementation of visualisation and reporting analytics for Quantitative Investment Strategies"
5
5
  license = "LICENSE.txt"
6
6
  authors = ["Artur Sepp <artursepp@gmail.com>"]
@@ -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
@@ -17,4 +17,3 @@ OUTPUT_PATH:
17
17
 
18
18
  AWS_POSTGRES:
19
19
  ""
20
-
@@ -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
- @njit
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 *= norm
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