qis 3.2.11__tar.gz → 3.2.12__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.2.11 → qis-3.2.12}/PKG-INFO +1 -1
- {qis-3.2.11 → qis-3.2.12}/pyproject.toml +1 -1
- {qis-3.2.11 → qis-3.2.12}/qis/examples/factsheets/multi_assets.py +1 -1
- {qis-3.2.11 → qis-3.2.12}/qis/examples/factsheets/multi_strategy.py +1 -1
- {qis-3.2.11 → qis-3.2.12}/qis/examples/factsheets/pyblogs_reports.py +1 -1
- {qis-3.2.11 → qis-3.2.12}/qis/examples/factsheets/strategy.py +1 -1
- {qis-3.2.11 → qis-3.2.12}/qis/examples/factsheets/strategy_benchmark.py +3 -2
- {qis-3.2.11 → qis-3.2.12}/qis/portfolio/reports/config.py +1 -1
- {qis-3.2.11 → qis-3.2.12}/qis/portfolio/reports/strategy_benchmark_factsheet.py +3 -1
- {qis-3.2.11 → qis-3.2.12}/qis/portfolio/reports/strategy_factsheet.py +3 -1
- {qis-3.2.11 → qis-3.2.12}/LICENSE.txt +0 -0
- {qis-3.2.11 → qis-3.2.12}/README.md +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/__init__.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/examples/best_returns.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/examples/bootstrap_analysis.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/examples/boxplot_conditional_returns.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/examples/btc_asset_corr.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/examples/constant_notional.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/examples/constant_weight_portfolios.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/examples/core/perf_bbg_prices.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/examples/core/price_plots.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/examples/core/us_election.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/examples/credit_spreads.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/examples/europe_futures.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/examples/generate_option_rolls.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/examples/interpolation_infrequent_returns.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/examples/leveraged_strategies.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/examples/long_short.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/examples/momentum_indices.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/examples/ohlc_vol_analysis.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/examples/overnight_returns.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/examples/perf_external_assets.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/examples/readme_performances.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/examples/risk_return_frontier.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/examples/rolling_performance.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/examples/seasonality.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/examples/sharpe_vs_sortino.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/examples/simulate_quant_strats.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/examples/test_ewm.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/examples/test_scatter.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/examples/try_pybloqs.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/examples/universe_corrs.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/examples/vix_beta_to_equities_bonds.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/examples/vix_conditional_returns.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/examples/vix_spy_by_year.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/examples/vix_tenor_analysis.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/examples/vol_without_weekends.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/file_utils.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/local_path.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/models/README.md +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/models/__init__.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/models/linear/__init__.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/models/linear/auto_corr.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/models/linear/corr_cov_matrix.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/models/linear/ewm.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/models/linear/ewm_convolution.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/models/linear/ewm_factors.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/models/linear/ewm_winsor_outliers.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/models/linear/pca.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/models/linear/plot_correlations.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/models/linear/ra_returns.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/models/stats/__init__.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/models/stats/bootstrap.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/models/stats/ohlc_vol.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/models/stats/rolling_stats.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/models/stats/test_bootstrap.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/perfstats/README.md +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/perfstats/__init__.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/perfstats/cond_regression.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/perfstats/config.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/perfstats/desc_table.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/perfstats/fx_ops.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/perfstats/perf_stats.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/perfstats/regime_classifier.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/perfstats/returns.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/perfstats/timeseries_bfill.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/plots/README.md +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/plots/__init__.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/plots/bars.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/plots/boxplot.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/plots/contour.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/plots/derived/__init__.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/plots/derived/data_timeseries.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/plots/derived/desc_table.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/plots/derived/drawdowns.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/plots/derived/perf_table.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/plots/derived/prices.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/plots/derived/regime_class_table.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/plots/derived/regime_data.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/plots/derived/regime_pdf.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/plots/derived/regime_scatter.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/plots/derived/returns_heatmap.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/plots/derived/returns_scatter.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/plots/errorbar.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/plots/heatmap.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/plots/histogram.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/plots/histplot2d.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/plots/lineplot.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/plots/pie.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/plots/qqplot.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/plots/reports/__init__.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/plots/reports/econ_data_single.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/plots/reports/gantt_data_history.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/plots/reports/price_history.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/plots/reports/utils.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/plots/scatter.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/plots/stackplot.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/plots/table.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/plots/time_series.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/plots/utils.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/portfolio/README.md +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/portfolio/__init__.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/portfolio/backtester.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/portfolio/ewm_portfolio_risk.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/portfolio/multi_portfolio_data.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/portfolio/portfolio_data.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/portfolio/reports/__init__.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/portfolio/reports/brinson_attribution.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/portfolio/reports/multi_assets_factsheet.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/portfolio/reports/multi_strategy_factseet_pybloqs.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/portfolio/reports/multi_strategy_factsheet.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/portfolio/reports/strategy_benchmark_factsheet_pybloqs.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/portfolio/reports/strategy_signal_factsheet.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/portfolio/signal_data.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/portfolio/strats/__init__.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/portfolio/strats/quant_strats_delta1.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/portfolio/strats/seasonal_strats.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/settings.yaml +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/sql_engine.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/test_data.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/utils/README.md +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/utils/__init__.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/utils/dates.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/utils/df_agg.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/utils/df_cut.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/utils/df_freq.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/utils/df_groups.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/utils/df_melt.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/utils/df_ops.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/utils/df_str.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/utils/df_to_scores.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/utils/df_to_weights.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/utils/generic.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/utils/np_ops.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/utils/ols.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/utils/sampling.py +0 -0
- {qis-3.2.11 → qis-3.2.12}/qis/utils/struct_ops.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.3
|
2
2
|
Name: qis
|
3
|
-
Version: 3.2.
|
3
|
+
Version: 3.2.12
|
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
|
@@ -67,7 +67,7 @@ def run_unit_test(unit_test: UnitTests):
|
|
67
67
|
|
68
68
|
if unit_test == UnitTests.VOLPARITY_SPAN:
|
69
69
|
# time period for portfolio reporting
|
70
|
-
time_period = qis.TimePeriod('31Dec2005', '
|
70
|
+
time_period = qis.TimePeriod('31Dec2005', '21Apr2025')
|
71
71
|
|
72
72
|
prices, benchmark_prices, group_data = fetch_universe_data()
|
73
73
|
multi_portfolio_data = generate_volparity_multi_strategy(prices=prices,
|
@@ -67,7 +67,7 @@ class UnitTests(Enum):
|
|
67
67
|
|
68
68
|
def run_unit_test(unit_test: UnitTests):
|
69
69
|
|
70
|
-
time_period = qis.TimePeriod('31Dec2005', '
|
70
|
+
time_period = qis.TimePeriod('31Dec2005', '21Apr2025') # time period for portfolio reporting
|
71
71
|
|
72
72
|
prices, benchmark_prices, group_data = fetch_riskparity_universe_data()
|
73
73
|
multi_portfolio_data = generate_volparity_multi_strategy(prices=prices,
|
@@ -86,7 +86,7 @@ class UnitTests(Enum):
|
|
86
86
|
|
87
87
|
def run_unit_test(unit_test: UnitTests):
|
88
88
|
|
89
|
-
time_period = qis.TimePeriod('31Dec2005', '
|
89
|
+
time_period = qis.TimePeriod('31Dec2005', '21Apr2025') # time period for portfolio reporting
|
90
90
|
time_period_short = TimePeriod('31Dec2022', time_period.end)
|
91
91
|
rebalancing_costs = 0.0010 # per traded volume
|
92
92
|
|
@@ -91,7 +91,7 @@ class UnitTests(Enum):
|
|
91
91
|
def run_unit_test(unit_test: UnitTests):
|
92
92
|
|
93
93
|
# time period for portfolio reporting
|
94
|
-
time_period = qis.TimePeriod('31Dec2006', '
|
94
|
+
time_period = qis.TimePeriod('31Dec2006', '21Apr2025')
|
95
95
|
prices, benchmark_prices, group_data = fetch_universe_data()
|
96
96
|
|
97
97
|
multi_portfolio_data = generate_volparity_multiportfolio(prices=prices,
|
@@ -114,6 +114,7 @@ def run_unit_test(unit_test: UnitTests):
|
|
114
114
|
add_strategy_factsheet=True, # for strategy factsheet
|
115
115
|
add_grouped_exposures=False, # for strategy factsheet
|
116
116
|
add_grouped_cum_pnl=False, # for strategy factsheet
|
117
|
+
is_grouped=True,
|
117
118
|
**fetch_default_report_kwargs(time_period=time_period,
|
118
119
|
add_rates_data=True))
|
119
120
|
qis.save_figs_to_pdf(figs=figs,
|
@@ -160,7 +161,7 @@ def run_unit_test(unit_test: UnitTests):
|
|
160
161
|
|
161
162
|
if __name__ == '__main__':
|
162
163
|
|
163
|
-
unit_test = UnitTests.
|
164
|
+
unit_test = UnitTests.STRATEGY_BENCHMARK_PLT
|
164
165
|
|
165
166
|
is_run_all_tests = False
|
166
167
|
if is_run_all_tests:
|
@@ -70,7 +70,7 @@ class FactsheetConfig(NamedTuple):
|
|
70
70
|
freq_beta: str = 'W-WED' # for scatter plot
|
71
71
|
exposures_freq: str = 'W-WED' # for plotting strategy exposures
|
72
72
|
# general data
|
73
|
-
perf_columns: List[PerfStat] =
|
73
|
+
perf_columns: List[PerfStat] = PERF_COLUMNS_RF0
|
74
74
|
perf_stats_labels: List[PerfStat] = (PerfStat.PA_RETURN, PerfStat.VOL, PerfStat.SHARPE_RF0,)
|
75
75
|
short: bool = True # ra columns
|
76
76
|
# next depend on report time period
|
@@ -36,6 +36,7 @@ def generate_strategy_benchmark_factsheet_plt(multi_portfolio_data: MultiPortfol
|
|
36
36
|
is_grouped: Optional[bool] = None,
|
37
37
|
figsize: Tuple[float, float] = (8.3, 11.7), # A4 for portrait
|
38
38
|
fontsize: int = 5,
|
39
|
+
heatmap_fontsize: int = 4,
|
39
40
|
**kwargs
|
40
41
|
) -> List[plt.Figure]:
|
41
42
|
"""
|
@@ -144,7 +145,8 @@ def generate_strategy_benchmark_factsheet_plt(multi_portfolio_data: MultiPortfol
|
|
144
145
|
|
145
146
|
# periodic returns
|
146
147
|
local_kwargs = qis.update_kwargs(kwargs=kwargs,
|
147
|
-
new_kwargs=dict(fontsize=
|
148
|
+
new_kwargs=dict(fontsize=heatmap_fontsize, square=False,
|
149
|
+
x_rotation=90, transpose=False))
|
148
150
|
if add_benchmarks_to_navs:
|
149
151
|
benchmark_prices = multi_portfolio_data.benchmark_prices
|
150
152
|
else:
|
@@ -39,6 +39,7 @@ def generate_strategy_factsheet(portfolio_data: PortfolioData,
|
|
39
39
|
add_benchmarks_to_navs: bool = False,
|
40
40
|
figsize: Tuple[float, float] = (8.5, 11.7), # A4 for portrait
|
41
41
|
fontsize: int = 5,
|
42
|
+
heatmap_fontsize: int = 4,
|
42
43
|
weight_change_sample_size: int = 20,
|
43
44
|
add_current_position_var_risk_sheet: bool = False,
|
44
45
|
add_weights_turnover_sheet: bool = False,
|
@@ -228,7 +229,8 @@ def generate_strategy_factsheet(portfolio_data: PortfolioData,
|
|
228
229
|
portfolio_data.plot_monthly_returns_heatmap(ax=ax,
|
229
230
|
time_period=time_period,
|
230
231
|
title='Monthly Returns',
|
231
|
-
**qis.update_kwargs(kwargs, dict(fontsize=
|
232
|
+
**qis.update_kwargs(kwargs, dict(fontsize=heatmap_fontsize,
|
233
|
+
date_format='%Y')))
|
232
234
|
|
233
235
|
# periodic returns
|
234
236
|
ax = fig.add_subplot(gs[4:6, 2:])
|
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
|