qis 3.1.2__tar.gz → 3.1.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.1.2 → qis-3.1.4}/PKG-INFO +1 -1
- {qis-3.1.2 → qis-3.1.4}/pyproject.toml +1 -1
- {qis-3.1.2 → qis-3.1.4}/qis/file_utils.py +25 -6
- {qis-3.1.2 → qis-3.1.4}/qis/plots/bars.py +4 -2
- {qis-3.1.2 → qis-3.1.4}/qis/plots/table.py +2 -1
- {qis-3.1.2 → qis-3.1.4}/qis/portfolio/portfolio_data.py +12 -2
- {qis-3.1.2 → qis-3.1.4}/qis/portfolio/reports/strategy_benchmark_factsheet.py +2 -2
- {qis-3.1.2 → qis-3.1.4}/qis/settings.yaml +1 -0
- {qis-3.1.2 → qis-3.1.4}/LICENSE.txt +0 -0
- {qis-3.1.2 → qis-3.1.4}/README.md +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/__init__.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/examples/best_returns.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/examples/bond_futures_portfolio.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/examples/bootstrap_analysis.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/examples/boxplot_conditional_returns.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/examples/btc_asset_corr.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/examples/constant_notional.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/examples/constant_weight_portfolios.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/examples/core/perf_bbg_prices.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/examples/core/price_plots.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/examples/core/us_election.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/examples/credit_spreads.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/examples/credit_trackers.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/examples/europe_futures.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/examples/factsheets/multi_assets.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/examples/factsheets/multi_strategy.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/examples/factsheets/pyblogs_reports.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/examples/factsheets/strategy.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/examples/factsheets/strategy_benchmark.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/examples/generate_option_rolls.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/examples/interpolation_infrequent_returns.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/examples/leveraged_strategies.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/examples/long_short.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/examples/momentum_indices.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/examples/ohlc_vol_analysis.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/examples/overnight_returns.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/examples/perf_external_assets.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/examples/perp_pricing.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/examples/readme_performances.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/examples/risk_return_frontier.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/examples/rolling_performance.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/examples/seasonality.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/examples/sharpe_vs_sortino.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/examples/simulate_quant_strats.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/examples/test_ewm.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/examples/test_scatter.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/examples/try_pybloqs.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/examples/universe_corrs.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/examples/vix_beta_to_equities_bonds.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/examples/vix_conditional_returns.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/examples/vix_spy_by_year.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/examples/vix_tenor_analysis.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/examples/vol_without_weekends.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/local_path.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/models/README.md +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/models/__init__.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/models/linear/__init__.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/models/linear/auto_corr.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/models/linear/corr_cov_matrix.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/models/linear/ewm.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/models/linear/ewm_convolution.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/models/linear/ewm_factors.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/models/linear/ewm_winsor_outliers.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/models/linear/pca.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/models/linear/plot_correlations.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/models/linear/ra_returns.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/models/stats/__init__.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/models/stats/bootstrap.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/models/stats/ohlc_vol.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/models/stats/rolling_stats.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/models/stats/test_bootstrap.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/perfstats/README.md +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/perfstats/__init__.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/perfstats/cond_regression.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/perfstats/config.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/perfstats/desc_table.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/perfstats/fx_ops.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/perfstats/perf_stats.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/perfstats/regime_classifier.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/perfstats/returns.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/perfstats/timeseries_bfill.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/plots/README.md +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/plots/__init__.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/plots/boxplot.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/plots/contour.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/plots/derived/__init__.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/plots/derived/data_timeseries.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/plots/derived/desc_table.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/plots/derived/drawdowns.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/plots/derived/perf_table.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/plots/derived/prices.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/plots/derived/regime_class_table.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/plots/derived/regime_data.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/plots/derived/regime_pdf.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/plots/derived/regime_scatter.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/plots/derived/returns_heatmap.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/plots/derived/returns_scatter.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/plots/errorbar.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/plots/heatmap.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/plots/histogram.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/plots/histplot2d.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/plots/lineplot.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/plots/pie.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/plots/qqplot.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/plots/reports/__init__.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/plots/reports/econ_data_single.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/plots/reports/gantt_data_history.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/plots/reports/price_history.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/plots/reports/utils.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/plots/scatter.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/plots/stackplot.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/plots/time_series.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/plots/utils.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/portfolio/README.md +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/portfolio/__init__.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/portfolio/backtester.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/portfolio/ewm_portfolio_risk.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/portfolio/multi_portfolio_data.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/portfolio/reports/__init__.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/portfolio/reports/brinson_attribution.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/portfolio/reports/config.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/portfolio/reports/multi_assets_factsheet.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/portfolio/reports/multi_strategy_factseet_pybloqs.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/portfolio/reports/multi_strategy_factsheet.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/portfolio/reports/strategy_benchmark_factsheet_pybloqs.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/portfolio/reports/strategy_factsheet.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/portfolio/reports/strategy_signal_factsheet.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/portfolio/strats/__init__.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/portfolio/strats/quant_strats_delta1.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/portfolio/strats/seasonal_strats.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/sql_engine.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/test_data.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/utils/README.md +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/utils/__init__.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/utils/dates.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/utils/df_agg.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/utils/df_cut.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/utils/df_freq.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/utils/df_groups.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/utils/df_melt.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/utils/df_ops.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/utils/df_str.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/utils/df_to_scores.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/utils/df_to_weights.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/utils/generic.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/utils/np_ops.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/utils/ols.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/utils/sampling.py +0 -0
- {qis-3.1.2 → qis-3.1.4}/qis/utils/struct_ops.py +0 -0
{qis-3.1.2 → qis-3.1.4}/PKG-INFO
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.3
|
2
2
|
Name: qis
|
3
|
-
Version: 3.1.
|
3
|
+
Version: 3.1.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
|
@@ -535,7 +535,8 @@ def save_df_dict_to_sql(engine: Engine,
|
|
535
535
|
table_name: str,
|
536
536
|
dfs: Dict[Union[str, Enum, NamedTuple], pd.DataFrame],
|
537
537
|
schema: Optional[str] = None,
|
538
|
-
index_col: Optional[str] = INDEX_COLUMN
|
538
|
+
index_col: Optional[str] = INDEX_COLUMN,
|
539
|
+
if_exists: Literal["fail", "replace", "append"] | Literal["truncate-append"] = "fail",
|
539
540
|
) -> None:
|
540
541
|
"""
|
541
542
|
save pandas dict to sql engine
|
@@ -544,7 +545,22 @@ def save_df_dict_to_sql(engine: Engine,
|
|
544
545
|
if df is not None and isinstance(df, pd.DataFrame):
|
545
546
|
if index_col is not None:
|
546
547
|
df = df.reset_index(names=index_col)
|
547
|
-
|
548
|
+
if if_exists == "truncate-append":
|
549
|
+
schema_str = f"{schema}." if schema else ""
|
550
|
+
with engine.connect() as con:
|
551
|
+
statement = text(f"TRUNCATE TABLE {schema_str}{table_name}_{key}")
|
552
|
+
con.execute(statement)
|
553
|
+
con.commit()
|
554
|
+
df.to_sql(
|
555
|
+
f"{table_name}_{key}",
|
556
|
+
engine,
|
557
|
+
schema=schema,
|
558
|
+
if_exists='append',
|
559
|
+
method='multi',
|
560
|
+
chunksize=1000
|
561
|
+
)
|
562
|
+
else:
|
563
|
+
df.to_sql(f"{table_name}_{key}", engine, schema=schema, if_exists=if_exists)
|
548
564
|
|
549
565
|
|
550
566
|
@timer
|
@@ -553,19 +569,22 @@ def load_df_dict_from_sql(engine: Engine,
|
|
553
569
|
dataset_keys: List[Union[str, Enum, NamedTuple]],
|
554
570
|
schema: Optional[str] = None,
|
555
571
|
index_col: Optional[str] = INDEX_COLUMN,
|
556
|
-
columns: Optional[List[str]] = None
|
572
|
+
columns: Optional[List[str]] = None,
|
573
|
+
drop_sql_index: bool = True
|
557
574
|
) -> Dict[str, pd.DataFrame]:
|
558
575
|
"""
|
559
576
|
pandas dict from csv files
|
560
577
|
"""
|
561
578
|
pandas_dict = {}
|
562
579
|
for key in dataset_keys:
|
580
|
+
# df will have index set by index_col with added column 'index' from sql
|
563
581
|
df = pd.read_sql_table(table_name=f"{table_name}_{key}", con=engine, schema=schema,
|
564
582
|
index_col=index_col,
|
565
583
|
columns=columns)
|
566
|
-
if
|
567
|
-
df
|
568
|
-
df =
|
584
|
+
if drop_sql_index:
|
585
|
+
df = df.drop('index', axis=1)
|
586
|
+
# df[index_col] = pd.to_datetime(df[index_col])
|
587
|
+
# df = df.set_index(index_col, drop=True)
|
569
588
|
pandas_dict[key] = df
|
570
589
|
return pandas_dict
|
571
590
|
|
@@ -217,7 +217,7 @@ def plot_bars(df: Union[pd.DataFrame, pd.Series],
|
|
217
217
|
return fig
|
218
218
|
|
219
219
|
|
220
|
-
def plot_vbars(df: pd.DataFrame,
|
220
|
+
def plot_vbars(df: Union[pd.DataFrame, pd.Series],
|
221
221
|
title: Optional[str] = None,
|
222
222
|
fontsize: int = 10,
|
223
223
|
add_bar_values: bool = True,
|
@@ -244,6 +244,8 @@ def plot_vbars(df: pd.DataFrame,
|
|
244
244
|
**kwargs
|
245
245
|
) -> plt.Figure:
|
246
246
|
|
247
|
+
if isinstance(df, pd.Series):
|
248
|
+
df = df.to_frame()
|
247
249
|
category_names = df.columns.to_list()
|
248
250
|
|
249
251
|
if add_total_to_index and totals is not None:
|
@@ -516,7 +518,7 @@ def run_unit_test(unit_test: UnitTests):
|
|
516
518
|
|
517
519
|
if __name__ == '__main__':
|
518
520
|
|
519
|
-
unit_test = UnitTests.
|
521
|
+
unit_test = UnitTests.VBAR_WEIGHTS
|
520
522
|
|
521
523
|
is_run_all_tests = False
|
522
524
|
if is_run_all_tests:
|
@@ -49,6 +49,7 @@ def plot_df_table(df: pd.DataFrame,
|
|
49
49
|
data_colors: List[Tuple[float, float, float]] = None,
|
50
50
|
diagonal_color: str = None,
|
51
51
|
rows_edge_lines: List[int] = None,
|
52
|
+
rows_edge_color: str = 'blue',
|
52
53
|
columns_edge_lines: List[Tuple[int, str]] = None,
|
53
54
|
bold_font: bool = False,
|
54
55
|
linewidth: float = 0.5, # table borders
|
@@ -211,7 +212,7 @@ def plot_df_table(df: pd.DataFrame,
|
|
211
212
|
|
212
213
|
if rows_edge_lines is not None:
|
213
214
|
for rows_edge_line in rows_edge_lines:
|
214
|
-
ax.axhline(y=rows_edge_line, color=
|
215
|
+
ax.axhline(y=rows_edge_line, color=rows_edge_color, alpha=0.5*alpha, lw=0.75)
|
215
216
|
|
216
217
|
if columns_edge_lines is not None:
|
217
218
|
for columns_edge_line in columns_edge_lines:
|
@@ -80,6 +80,7 @@ class PortfolioData:
|
|
80
80
|
benchmark_prices: pd.DataFrame = None # can pass benchmark prices here
|
81
81
|
ticker: str = None
|
82
82
|
strategy_signal_data: StrategySignalData = None
|
83
|
+
covar_dict: Dict[pd.Timestamp, pd.DataFrame] = None # for computing risk contributions
|
83
84
|
|
84
85
|
def __post_init__(self):
|
85
86
|
if isinstance(self.nav, pd.DataFrame):
|
@@ -715,7 +716,7 @@ class PortfolioData:
|
|
715
716
|
return portfolio_vars, instrument_vars
|
716
717
|
|
717
718
|
def compute_risk_contributions_implied_by_covar(self,
|
718
|
-
covar_dict: Dict[pd.Timestamp, pd.DataFrame],
|
719
|
+
covar_dict: Dict[pd.Timestamp, pd.DataFrame] = None,
|
719
720
|
group_data: pd.Series = None,
|
720
721
|
group_order: List[str] = None,
|
721
722
|
align_with_covar_dates: bool = True,
|
@@ -725,6 +726,11 @@ class PortfolioData:
|
|
725
726
|
"""
|
726
727
|
compute risk contributions using covar_dict
|
727
728
|
"""
|
729
|
+
if covar_dict is None:
|
730
|
+
if self.covar_dict is None:
|
731
|
+
raise ValueError(f"must provide covar_dict")
|
732
|
+
else:
|
733
|
+
covar_dict = self.covar_dict
|
728
734
|
strategy_weights = self.get_weights(freq=freq, is_input_weights=True)
|
729
735
|
covar_index = list(covar_dict.keys())
|
730
736
|
strategy_rc = {}
|
@@ -1236,10 +1242,13 @@ class PortfolioData:
|
|
1236
1242
|
add_top_bar_values: Optional[bool] = None,
|
1237
1243
|
time_period: TimePeriod = None,
|
1238
1244
|
title: str = None,
|
1245
|
+
group_data: pd.Series = None,
|
1246
|
+
group_order: List[str] = None,
|
1239
1247
|
ax: plt.Subplot = None,
|
1240
1248
|
**kwargs
|
1241
1249
|
) -> None:
|
1242
|
-
weights = self.get_weights(is_input_weights=True, freq=None, is_grouped=is_grouped
|
1250
|
+
weights = self.get_weights(is_input_weights=True, freq=None, is_grouped=is_grouped,
|
1251
|
+
group_data=group_data, group_order=group_order)
|
1243
1252
|
if time_period is not None:
|
1244
1253
|
weights_1 = time_period.locate(weights)
|
1245
1254
|
if len(weights_1.index) > 0:
|
@@ -1456,6 +1465,7 @@ class PortfolioData:
|
|
1456
1465
|
ax=axs[1],
|
1457
1466
|
**kwargs)
|
1458
1467
|
|
1468
|
+
|
1459
1469
|
@dataclass
|
1460
1470
|
class StrategySignalData:
|
1461
1471
|
"""
|
@@ -566,9 +566,9 @@ def weights_tracking_error_report_by_ac_subac(multi_portfolio_data: MultiPortfol
|
|
566
566
|
# benchmark weights
|
567
567
|
benchmark_data = multi_portfolio_data.portfolio_datas[benchmark_idx]
|
568
568
|
benchmark_ticker = benchmark_data.ticker
|
569
|
-
benchmark_exposures_ac = benchmark_data.get_weights(group_data=ac_group_data, group_order=
|
569
|
+
benchmark_exposures_ac = benchmark_data.get_weights(group_data=ac_group_data, group_order=ac_group_order,
|
570
570
|
**weight_kwargs)
|
571
|
-
benchmark_exposures_subac = benchmark_data.get_weights(group_data=sub_ac_group_data, group_order=
|
571
|
+
benchmark_exposures_subac = benchmark_data.get_weights(group_data=sub_ac_group_data, group_order=sub_ac_group_order,
|
572
572
|
**weight_kwargs)
|
573
573
|
|
574
574
|
# plot strategy and benchmark weights by ac
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|