qis 3.1.2__tar.gz → 3.1.3__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.3}/PKG-INFO +1 -1
- {qis-3.1.2 → qis-3.1.3}/pyproject.toml +1 -1
- {qis-3.1.2 → qis-3.1.3}/qis/file_utils.py +25 -6
- {qis-3.1.2 → qis-3.1.3}/LICENSE.txt +0 -0
- {qis-3.1.2 → qis-3.1.3}/README.md +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/__init__.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/examples/best_returns.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/examples/bond_futures_portfolio.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/examples/bootstrap_analysis.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/examples/boxplot_conditional_returns.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/examples/btc_asset_corr.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/examples/constant_notional.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/examples/constant_weight_portfolios.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/examples/core/perf_bbg_prices.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/examples/core/price_plots.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/examples/core/us_election.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/examples/credit_spreads.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/examples/credit_trackers.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/examples/europe_futures.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/examples/factsheets/multi_assets.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/examples/factsheets/multi_strategy.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/examples/factsheets/pyblogs_reports.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/examples/factsheets/strategy.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/examples/factsheets/strategy_benchmark.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/examples/generate_option_rolls.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/examples/interpolation_infrequent_returns.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/examples/leveraged_strategies.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/examples/long_short.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/examples/momentum_indices.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/examples/ohlc_vol_analysis.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/examples/overnight_returns.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/examples/perf_external_assets.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/examples/perp_pricing.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/examples/readme_performances.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/examples/risk_return_frontier.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/examples/rolling_performance.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/examples/seasonality.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/examples/sharpe_vs_sortino.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/examples/simulate_quant_strats.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/examples/test_ewm.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/examples/test_scatter.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/examples/try_pybloqs.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/examples/universe_corrs.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/examples/vix_beta_to_equities_bonds.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/examples/vix_conditional_returns.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/examples/vix_spy_by_year.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/examples/vix_tenor_analysis.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/examples/vol_without_weekends.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/local_path.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/models/README.md +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/models/__init__.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/models/linear/__init__.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/models/linear/auto_corr.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/models/linear/corr_cov_matrix.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/models/linear/ewm.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/models/linear/ewm_convolution.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/models/linear/ewm_factors.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/models/linear/ewm_winsor_outliers.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/models/linear/pca.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/models/linear/plot_correlations.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/models/linear/ra_returns.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/models/stats/__init__.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/models/stats/bootstrap.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/models/stats/ohlc_vol.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/models/stats/rolling_stats.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/models/stats/test_bootstrap.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/perfstats/README.md +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/perfstats/__init__.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/perfstats/cond_regression.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/perfstats/config.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/perfstats/desc_table.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/perfstats/fx_ops.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/perfstats/perf_stats.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/perfstats/regime_classifier.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/perfstats/returns.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/perfstats/timeseries_bfill.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/plots/README.md +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/plots/__init__.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/plots/bars.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/plots/boxplot.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/plots/contour.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/plots/derived/__init__.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/plots/derived/data_timeseries.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/plots/derived/desc_table.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/plots/derived/drawdowns.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/plots/derived/perf_table.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/plots/derived/prices.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/plots/derived/regime_class_table.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/plots/derived/regime_data.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/plots/derived/regime_pdf.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/plots/derived/regime_scatter.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/plots/derived/returns_heatmap.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/plots/derived/returns_scatter.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/plots/errorbar.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/plots/heatmap.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/plots/histogram.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/plots/histplot2d.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/plots/lineplot.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/plots/pie.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/plots/qqplot.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/plots/reports/__init__.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/plots/reports/econ_data_single.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/plots/reports/gantt_data_history.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/plots/reports/price_history.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/plots/reports/utils.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/plots/scatter.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/plots/stackplot.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/plots/table.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/plots/time_series.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/plots/utils.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/portfolio/README.md +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/portfolio/__init__.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/portfolio/backtester.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/portfolio/ewm_portfolio_risk.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/portfolio/multi_portfolio_data.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/portfolio/portfolio_data.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/portfolio/reports/__init__.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/portfolio/reports/brinson_attribution.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/portfolio/reports/config.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/portfolio/reports/multi_assets_factsheet.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/portfolio/reports/multi_strategy_factseet_pybloqs.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/portfolio/reports/multi_strategy_factsheet.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/portfolio/reports/strategy_benchmark_factsheet.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/portfolio/reports/strategy_benchmark_factsheet_pybloqs.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/portfolio/reports/strategy_factsheet.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/portfolio/reports/strategy_signal_factsheet.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/portfolio/strats/__init__.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/portfolio/strats/quant_strats_delta1.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/portfolio/strats/seasonal_strats.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/settings.yaml +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/sql_engine.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/test_data.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/utils/README.md +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/utils/__init__.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/utils/dates.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/utils/df_agg.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/utils/df_cut.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/utils/df_freq.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/utils/df_groups.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/utils/df_melt.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/utils/df_ops.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/utils/df_str.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/utils/df_to_scores.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/utils/df_to_weights.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/utils/generic.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/utils/np_ops.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/utils/ols.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/utils/sampling.py +0 -0
- {qis-3.1.2 → qis-3.1.3}/qis/utils/struct_ops.py +0 -0
{qis-3.1.2 → qis-3.1.3}/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.3
|
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
|
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|