financetoolkit 2.3.1__tar.gz → 2.3.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.
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/.gitignore +193 -196
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/PKG-INFO +7 -4
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/README.md +4 -2
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/cache/cache_controller.py +28 -16
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/cache/policy_model.py +74 -3
- financetoolkit-2.3.3/financetoolkit/cache/serialization_model.py +526 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/cache/sqlite_model.py +37 -44
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/currencies_model.py +0 -2
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/discovery/discovery_controller.py +341 -55
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/discovery/discovery_model.py +436 -29
- financetoolkit-2.3.3/financetoolkit/earnings_model.py +113 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/econometrics/causal_inference_model.py +0 -2
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/econometrics/data_model.py +3 -3
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/econometrics/econometrics_controller.py +16 -22
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/econometrics/forecast_evaluation_model.py +2 -25
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/econometrics/hypothesis_testing_model.py +0 -2
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/econometrics/panel_data_model.py +0 -2
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/econometrics/regression_model.py +0 -2
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/econometrics/specification_tests_model.py +2 -6
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/econometrics/state_space_model.py +15 -14
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/econometrics/unitroot_model.py +3 -31
- financetoolkit-2.3.3/financetoolkit/economics/bea_model.py +67 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/economics/bis_model.py +67 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/economics/bls_model.py +32 -5
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/economics/cboe_model.py +4 -1
- financetoolkit-2.3.3/financetoolkit/economics/census_model.py +109 -0
- financetoolkit-2.3.3/financetoolkit/economics/dol_model.py +75 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/economics/economics_controller.py +787 -211
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/economics/fmp_model.py +6 -25
- financetoolkit-2.3.3/financetoolkit/economics/futures_model.py +263 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/economics/gmdb_model.py +0 -9
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/economics/helpers.py +88 -0
- financetoolkit-2.3.3/financetoolkit/economics/nyfed_model.py +120 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/economics/oecd_model.py +1 -4
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/economics/yfinance_model.py +8 -1
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/etf/etf_controller.py +478 -12
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/etf/etf_model.py +93 -0
- financetoolkit-2.3.3/financetoolkit/finra_model.py +311 -0
- financetoolkit-2.3.3/financetoolkit/fixedincome/bond_data_model.py +251 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/fixedincome/bond_model.py +6 -6
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/fixedincome/curve_model.py +5 -15
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/fixedincome/eiopa_model.py +3 -7
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/fixedincome/fixedincome_controller.py +1902 -1835
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/fixedincome/helpers.py +35 -0
- financetoolkit-2.3.3/financetoolkit/fixedincome/hqm_model.py +253 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/fixedincome/short_rate_model.py +0 -2
- financetoolkit-2.3.3/financetoolkit/fixedincome/treasurydirect_model.py +212 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/fixedincome/yieldcurve_model.py +2 -4
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/fmp_model.py +603 -44
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/fundamentals_model.py +0 -2
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/helpers.py +304 -23
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/historical_model.py +49 -34
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/mcp_server/__main__.py +1 -1
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/mcp_server/analytics_model.py +98 -10
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/mcp_server/auth_model.py +444 -101
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/mcp_server/coercion_model.py +61 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/mcp_server/config.yaml +190 -85
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/mcp_server/diagnostics_model.py +9 -42
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/mcp_server/formatting_model.py +74 -17
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/mcp_server/inspection_controller.py +2 -7
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/mcp_server/mcp_controller.py +208 -85
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/mcp_server/mcpb/.mcpbignore +0 -1
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/mcp_server/mcpb/README.md +7 -16
- financetoolkit-2.3.3/financetoolkit/mcp_server/mcpb/manifest.json +190 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/mcp_server/mcpb/pyproject.toml +2 -2
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/mcp_server/provider_model.py +23 -4
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/mcp_server/registry_controller.py +313 -106
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/mcp_server/setup_model.py +197 -85
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/mcp_server/tools_model.py +28 -3
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/models/altman_model.py +115 -34
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/models/beneish_model.py +0 -2
- financetoolkit-2.3.3/financetoolkit/models/chs_model.py +367 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/models/credit_model.py +0 -2
- financetoolkit-2.3.3/financetoolkit/models/damodaran_model.py +255 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/models/fulmer_model.py +11 -36
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/models/grover_model.py +5 -3
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/models/growth_model.py +88 -2
- financetoolkit-2.3.3/financetoolkit/models/helpers.py +338 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/models/intrinsic_model.py +178 -12
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/models/models_controller.py +2296 -706
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/models/ohlson_model.py +21 -15
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/models/quality_model.py +49 -2
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/models/springate_model.py +6 -4
- financetoolkit-2.3.3/financetoolkit/models/taffler_model.py +179 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/models/wacc_model.py +0 -2
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/models/zmijewski_model.py +5 -3
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/normalization/balance_yf.csv +1 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/normalization/statistics_yf.csv +1 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/normalization_model.py +25 -10
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/options/binomial_trees_model.py +10 -3
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/options/black_scholes_model.py +16 -44
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/options/exotics_model.py +4 -22
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/options/helpers.py +66 -11
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/options/market_metrics_model.py +0 -2
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/options/options_controller.py +346 -250
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/options/options_model.py +9 -14
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/options/risk_neutral_density_model.py +0 -2
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/options/svi_model.py +0 -2
- financetoolkit-2.3.3/financetoolkit/performance/helpers.py +93 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/performance/performance_controller.py +1464 -64
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/performance/performance_model.py +1199 -38
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/portfolio/attribution_model.py +61 -7
- financetoolkit-2.3.3/financetoolkit/portfolio/backtest_model.py +262 -0
- financetoolkit-2.3.3/financetoolkit/portfolio/construction_controller.py +4621 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/portfolio/definition_model.py +0 -2
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/portfolio/helpers.py +0 -17
- financetoolkit-2.3.3/financetoolkit/portfolio/optimization_model.py +4010 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/portfolio/overview_model.py +3 -4
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/portfolio/portfolio_controller.py +14 -35
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/portfolio/portfolio_model.py +0 -1
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/ratios/efficiency_model.py +138 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/ratios/profitability_model.py +280 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/ratios/ratios_controller.py +8128 -4415
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/ratios/solvency_model.py +255 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/ratios/valuation_model.py +225 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/risk/cvar_model.py +2 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/risk/garch_model.py +8 -4
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/risk/helpers.py +20 -20
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/risk/market_liquidity_model.py +7 -3
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/risk/realized_volatility_model.py +54 -12
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/risk/risk_controller.py +727 -79
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/risk/risk_model.py +336 -39
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/risk/var_model.py +5 -20
- financetoolkit-2.3.3/financetoolkit/technicals/pattern_model.py +579 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/technicals/technicals_controller.py +876 -657
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/toolkit_controller.py +1074 -127
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/utilities/error_model.py +6 -5
- financetoolkit-2.3.3/financetoolkit/utilities/factor_model.py +745 -0
- financetoolkit-2.3.3/financetoolkit/utilities/logger_model.py +127 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/utilities/requests_model.py +31 -12
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/utilities/statistics_model.py +336 -19
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/yfinance_model.py +112 -45
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/pyproject.toml +17 -23
- financetoolkit-2.3.1/financetoolkit/cache/serialization_model.py +0 -160
- financetoolkit-2.3.1/financetoolkit/mcp_server/mcpb/build-mcpb.sh +0 -103
- financetoolkit-2.3.1/financetoolkit/mcp_server/mcpb/manifest.json +0 -190
- financetoolkit-2.3.1/financetoolkit/models/damodaran_model.py +0 -84
- financetoolkit-2.3.1/financetoolkit/models/helpers.py +0 -43
- financetoolkit-2.3.1/financetoolkit/performance/helpers.py +0 -86
- financetoolkit-2.3.1/financetoolkit/portfolio/construction_controller.py +0 -1548
- financetoolkit-2.3.1/financetoolkit/portfolio/optimization_model.py +0 -808
- financetoolkit-2.3.1/financetoolkit/utilities/logger_model.py +0 -58
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/LICENSE.txt +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/__init__.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/cache/__init__.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/cache/coverage_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/cache/frame_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/cache/request_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/cache/ticker_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/discovery/__init__.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/econometrics/__init__.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/econometrics/causality_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/econometrics/cointegration_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/econometrics/diagnostics_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/econometrics/event_study_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/econometrics/fama_macbeth_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/econometrics/pairs_trading_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/econometrics/regime_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/econometrics/time_series_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/economics/__init__.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/economics/boe_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/economics/boj_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/economics/dnb_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/economics/ecb_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/economics/eex_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/economics/esrb_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/economics/eurostat_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/economics/frb_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/economics/fred_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/economics/freddie_mac_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/economics/ibge_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/economics/imf_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/economics/macrohistory_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/economics/mof_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/economics/nber_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/economics/ngfs_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/economics/ons_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/economics/sbj_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/economics/shiller_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/economics/stoxx_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/economics/treasury_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/etf/__init__.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/fixedincome/__init__.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/fixedincome/boc_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/fixedincome/bundesbank_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/fixedincome/derivative_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/fixedincome/ecb_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/fixedincome/esma_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/fixedincome/euribor_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/fixedincome/fed_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/fixedincome/fiscaldata_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/fixedincome/fmp_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/fixedincome/fred_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/fixedincome/norgesbank_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/fixedincome/rba_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/fixedincome/riksbank_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/mcp_server/__init__.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/mcp_server/mcpb/LICENSE +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/mcp_server/mcpb/finance_toolkit_icon.png +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/mcp_server/series_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/mcp_server/static/apple-touch-icon.png +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/mcp_server/static/favicon-32.png +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/mcp_server/static/favicon.ico +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/mcp_server/stats_page_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/models/__init__.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/models/dupont_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/models/enterprise_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/models/eva_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/models/peers_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/models/piotroski_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/normalization/balance.csv +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/normalization/cash.csv +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/normalization/cash_yf.csv +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/normalization/income.csv +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/normalization/income_yf.csv +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/normalization/statistics.csv +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/options/__init__.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/options/greeks_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/performance/__init__.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/portfolio/__init__.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/portfolio/config.yaml +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/portfolio/example_datasets/example_portfolio.csv +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/portfolio/example_datasets/example_portfolio.xlsx +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/portfolio/presets/all_weather.yaml +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/portfolio/presets/balanced_60_40.yaml +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/portfolio/presets/barbell.yaml +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/portfolio/presets/bogleheads_three_fund.yaml +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/portfolio/presets/buffett_90_10.yaml +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/portfolio/presets/conservative_income.yaml +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/portfolio/presets/global_60_40.yaml +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/portfolio/presets/global_equity_growth.yaml +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/portfolio/presets/golden_butterfly.yaml +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/portfolio/presets/permanent_portfolio.yaml +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/portfolio/presets/small_cap_value_tilt.yaml +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/portfolio/presets/target_date_glidepath.yaml +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/portfolio/presets/us_equity_sectors.yaml +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/py.typed +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/ratios/__init__.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/ratios/helpers.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/ratios/liquidity_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/risk/__init__.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/risk/backtesting_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/risk/copula_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/risk/covar_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/risk/evar_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/technicals/__init__.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/technicals/breadth_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/technicals/momentum_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/technicals/overlap_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/technicals/seasonality_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/technicals/volatility_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/utilities/dataframe_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/utilities/excel_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.3}/financetoolkit/utilities/validation_model.py +0 -0
|
@@ -1,197 +1,194 @@
|
|
|
1
|
-
# Finance Toolkit Ignored Files
|
|
2
|
-
*.csv
|
|
3
|
-
*.xlsx
|
|
4
|
-
*.xls
|
|
5
|
-
*.ipynb
|
|
6
|
-
cached/
|
|
7
|
-
debugging.py
|
|
8
|
-
.planning/
|
|
9
|
-
|
|
10
|
-
# Finance Toolkit Example Datasets
|
|
11
|
-
!financetoolkit/portfolio/example_datasets/*.xlsx
|
|
12
|
-
!financetoolkit/portfolio/example_datasets/*.csv
|
|
13
|
-
|
|
14
|
-
# Finance Toolkit Normalization Files
|
|
15
|
-
!financetoolkit/normalization/*.csv
|
|
16
|
-
|
|
17
|
-
# Finance Toolkit Tests
|
|
18
|
-
!tests/datasets/*.xlsx
|
|
19
|
-
!tests/*/csv/*/*.csv
|
|
20
|
-
!tests/csv/*/*.csv
|
|
21
|
-
|
|
22
|
-
# VS Code
|
|
23
|
-
.agents
|
|
24
|
-
.vscode/
|
|
25
|
-
.claude/
|
|
26
|
-
*.sh
|
|
27
|
-
|
|
28
|
-
# Claude
|
|
29
|
-
CLAUDE.md
|
|
30
|
-
|
|
31
|
-
#
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
#
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
.
|
|
78
|
-
.
|
|
79
|
-
.
|
|
80
|
-
.
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
*.
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
.
|
|
103
|
-
|
|
104
|
-
#
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
#
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
#
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
#
|
|
122
|
-
|
|
123
|
-
#
|
|
124
|
-
# .
|
|
125
|
-
|
|
126
|
-
# pipenv
|
|
127
|
-
#
|
|
128
|
-
#
|
|
129
|
-
|
|
130
|
-
#
|
|
131
|
-
#Pipfile.lock
|
|
132
|
-
|
|
133
|
-
#
|
|
134
|
-
#
|
|
135
|
-
#
|
|
136
|
-
|
|
137
|
-
#
|
|
138
|
-
#
|
|
139
|
-
|
|
140
|
-
# pdm
|
|
141
|
-
#
|
|
142
|
-
#pdm.
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
#
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
#
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
#
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
env/
|
|
162
|
-
venv/
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
.
|
|
170
|
-
|
|
171
|
-
#
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
#
|
|
175
|
-
/
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
#
|
|
183
|
-
.
|
|
184
|
-
|
|
185
|
-
#
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
#
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
#
|
|
192
|
-
#
|
|
193
|
-
|
|
194
|
-
# and can be added to the global gitignore or merged into this file. For a more nuclear
|
|
195
|
-
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
|
196
|
-
#.idea/
|
|
1
|
+
# Finance Toolkit Ignored Files
|
|
2
|
+
*.csv
|
|
3
|
+
*.xlsx
|
|
4
|
+
*.xls
|
|
5
|
+
*.ipynb
|
|
6
|
+
cached/
|
|
7
|
+
debugging.py
|
|
8
|
+
.planning/
|
|
9
|
+
|
|
10
|
+
# Finance Toolkit Example Datasets
|
|
11
|
+
!financetoolkit/portfolio/example_datasets/*.xlsx
|
|
12
|
+
!financetoolkit/portfolio/example_datasets/*.csv
|
|
13
|
+
|
|
14
|
+
# Finance Toolkit Normalization Files
|
|
15
|
+
!financetoolkit/normalization/*.csv
|
|
16
|
+
|
|
17
|
+
# Finance Toolkit Tests
|
|
18
|
+
!tests/datasets/*.xlsx
|
|
19
|
+
!tests/*/csv/*/*.csv
|
|
20
|
+
!tests/csv/*/*.csv
|
|
21
|
+
|
|
22
|
+
# VS Code
|
|
23
|
+
.agents
|
|
24
|
+
.vscode/
|
|
25
|
+
.claude/
|
|
26
|
+
*.sh
|
|
27
|
+
|
|
28
|
+
# Claude
|
|
29
|
+
CLAUDE.md
|
|
30
|
+
|
|
31
|
+
# Byte-compiled / optimized / DLL files
|
|
32
|
+
__pycache__/
|
|
33
|
+
*.py[cod]
|
|
34
|
+
*$py.class
|
|
35
|
+
.DS_Store
|
|
36
|
+
.ipynb_checkpoints/
|
|
37
|
+
.DS_Store
|
|
38
|
+
|
|
39
|
+
# C extensions
|
|
40
|
+
*.so
|
|
41
|
+
|
|
42
|
+
# Distribution / packaging
|
|
43
|
+
.Python
|
|
44
|
+
build/
|
|
45
|
+
develop-eggs/
|
|
46
|
+
dist/
|
|
47
|
+
downloads/
|
|
48
|
+
eggs/
|
|
49
|
+
.eggs/
|
|
50
|
+
lib/
|
|
51
|
+
lib64/
|
|
52
|
+
parts/
|
|
53
|
+
sdist/
|
|
54
|
+
var/
|
|
55
|
+
wheels/
|
|
56
|
+
share/python-wheels/
|
|
57
|
+
*.egg-info/
|
|
58
|
+
.installed.cfg
|
|
59
|
+
*.egg
|
|
60
|
+
MANIFEST
|
|
61
|
+
|
|
62
|
+
# PyInstaller
|
|
63
|
+
# Usually these files are written by a python script from a template
|
|
64
|
+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
|
65
|
+
*.manifest
|
|
66
|
+
*.spec
|
|
67
|
+
|
|
68
|
+
# Installer logs
|
|
69
|
+
pip-log.txt
|
|
70
|
+
pip-delete-this-directory.txt
|
|
71
|
+
|
|
72
|
+
# Unit test / coverage reports
|
|
73
|
+
htmlcov/
|
|
74
|
+
.tox/
|
|
75
|
+
.nox/
|
|
76
|
+
.coverage
|
|
77
|
+
.coverage.*
|
|
78
|
+
.cache
|
|
79
|
+
nosetests.xml
|
|
80
|
+
coverage.xml
|
|
81
|
+
*.cover
|
|
82
|
+
*.py,cover
|
|
83
|
+
.hypothesis/
|
|
84
|
+
.pytest_cache/
|
|
85
|
+
cover/
|
|
86
|
+
|
|
87
|
+
# Translations
|
|
88
|
+
*.mo
|
|
89
|
+
*.pot
|
|
90
|
+
|
|
91
|
+
# Django stuff:
|
|
92
|
+
*.log
|
|
93
|
+
local_settings.py
|
|
94
|
+
db.sqlite3
|
|
95
|
+
db.sqlite3-journal
|
|
96
|
+
|
|
97
|
+
# Flask stuff:
|
|
98
|
+
instance/
|
|
99
|
+
.webassets-cache
|
|
100
|
+
|
|
101
|
+
# Scrapy stuff:
|
|
102
|
+
.scrapy
|
|
103
|
+
|
|
104
|
+
# Sphinx documentation
|
|
105
|
+
docs/_build/
|
|
106
|
+
|
|
107
|
+
# PyBuilder
|
|
108
|
+
.pybuilder/
|
|
109
|
+
target/
|
|
110
|
+
|
|
111
|
+
# Jupyter Notebook
|
|
112
|
+
.ipynb_checkpoints
|
|
113
|
+
|
|
114
|
+
# IPython
|
|
115
|
+
profile_default/
|
|
116
|
+
ipython_config.py
|
|
117
|
+
|
|
118
|
+
# pyenv
|
|
119
|
+
# For a library or package, you might want to ignore these files since the code is
|
|
120
|
+
# intended to run in multiple environments; otherwise, check them in:
|
|
121
|
+
# .python-version
|
|
122
|
+
|
|
123
|
+
# pipenv
|
|
124
|
+
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
|
125
|
+
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
|
126
|
+
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
|
127
|
+
# install all needed dependencies.
|
|
128
|
+
#Pipfile.lock
|
|
129
|
+
|
|
130
|
+
# poetry
|
|
131
|
+
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
|
|
132
|
+
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
|
133
|
+
# commonly ignored for libraries.
|
|
134
|
+
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
|
|
135
|
+
#poetry.lock
|
|
136
|
+
|
|
137
|
+
# pdm
|
|
138
|
+
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
|
|
139
|
+
#pdm.lock
|
|
140
|
+
# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
|
|
141
|
+
# in version control.
|
|
142
|
+
# https://pdm.fming.dev/#use-with-ide
|
|
143
|
+
.pdm.toml
|
|
144
|
+
|
|
145
|
+
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
|
|
146
|
+
__pypackages__/
|
|
147
|
+
|
|
148
|
+
# Celery stuff
|
|
149
|
+
celerybeat-schedule
|
|
150
|
+
celerybeat.pid
|
|
151
|
+
|
|
152
|
+
# SageMath parsed files
|
|
153
|
+
*.sage.py
|
|
154
|
+
|
|
155
|
+
# Environments
|
|
156
|
+
.env
|
|
157
|
+
.venv
|
|
158
|
+
env/
|
|
159
|
+
venv/
|
|
160
|
+
ENV/
|
|
161
|
+
env.bak/
|
|
162
|
+
venv.bak/
|
|
163
|
+
|
|
164
|
+
# Spyder project settings
|
|
165
|
+
.spyderproject
|
|
166
|
+
.spyproject
|
|
167
|
+
|
|
168
|
+
# Rope project settings
|
|
169
|
+
.ropeproject
|
|
170
|
+
|
|
171
|
+
# mkdocs documentation
|
|
172
|
+
/site
|
|
173
|
+
|
|
174
|
+
# mypy
|
|
175
|
+
.mypy_cache/
|
|
176
|
+
.dmypy.json
|
|
177
|
+
dmypy.json
|
|
178
|
+
|
|
179
|
+
# Pyre type checker
|
|
180
|
+
.pyre/
|
|
181
|
+
|
|
182
|
+
# pytype static type analyzer
|
|
183
|
+
.pytype/
|
|
184
|
+
|
|
185
|
+
# Cython debug symbols
|
|
186
|
+
cython_debug/
|
|
187
|
+
|
|
188
|
+
# PyCharm
|
|
189
|
+
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
|
|
190
|
+
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
|
|
191
|
+
# and can be added to the global gitignore or merged into this file. For a more nuclear
|
|
192
|
+
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
|
193
|
+
#.idea/
|
|
197
194
|
articles/
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: financetoolkit
|
|
3
|
-
Version: 2.3.
|
|
3
|
+
Version: 2.3.3
|
|
4
4
|
Summary: Transparent and Efficient Financial Analysis
|
|
5
5
|
Project-URL: Homepage, https://www.jeroenbouma.com/projects/financetoolkit
|
|
6
6
|
Project-URL: Documentation, https://www.jeroenbouma.com/projects/financetoolkit/docs
|
|
@@ -26,7 +26,7 @@ Requires-Dist: openpyxl>=3.1
|
|
|
26
26
|
Requires-Dist: pandas>=3.0
|
|
27
27
|
Requires-Dist: python-calamine>=0.3.0; python_full_version < '3.15'
|
|
28
28
|
Requires-Dist: pyyaml>=6.0
|
|
29
|
-
Requires-Dist: requests>=2.32
|
|
29
|
+
Requires-Dist: requests>=2.32.4
|
|
30
30
|
Requires-Dist: scipy>=1.10
|
|
31
31
|
Requires-Dist: xlrd>=2.0
|
|
32
32
|
Requires-Dist: yfinance
|
|
@@ -34,6 +34,7 @@ Provides-Extra: econometrics
|
|
|
34
34
|
Requires-Dist: linearmodels>=6.0; extra == 'econometrics'
|
|
35
35
|
Requires-Dist: statsmodels>=0.14; extra == 'econometrics'
|
|
36
36
|
Provides-Extra: mcp
|
|
37
|
+
Requires-Dist: cryptography>=42; extra == 'mcp'
|
|
37
38
|
Requires-Dist: fastmcp>=3.4.2; extra == 'mcp'
|
|
38
39
|
Requires-Dist: linearmodels>=6.0; extra == 'mcp'
|
|
39
40
|
Requires-Dist: mcp[cli]<2,>=1.27.0; extra == 'mcp'
|
|
@@ -362,7 +363,7 @@ Options usually price more risk than follows, as their sellers want to be paid f
|
|
|
362
363
|
|
|
363
364
|
All three are listed in the United States and valued on earnings that lie years ahead, which makes US inflation and interest rates the backdrop to their share prices. In 2022, the year the maximum drawdown above shows each of them falling by more than half, inflation reached 9% and the Federal Reserve raised its policy rate from 0.12% to 4.38%.
|
|
364
365
|
|
|
365
|
-
The [economics](https://www.jeroenbouma.com/projects/financetoolkit/docs/economics) module covers 60+ countries with 50+ indicators, from GDP and unemployment to money supply and interest rates, and the [fixed income](https://www.jeroenbouma.com/projects/financetoolkit/docs/fixedincome) module adds bond yields, yield curves, central bank rates and
|
|
366
|
+
The [economics](https://www.jeroenbouma.com/projects/financetoolkit/docs/economics) module covers 60+ countries with 50+ indicators, from GDP and unemployment to money supply and interest rates, and the [fixed income](https://www.jeroenbouma.com/projects/financetoolkit/docs/fixedincome) module adds bond yields, yield curves, central bank rates and calculations on individual bonds. Both are reached through the same Toolkit instance, or on their own with `from financetoolkit import Economics, FixedIncome`:
|
|
366
367
|
|
|
367
368
|
```python
|
|
368
369
|
# Inflation on the same month a year earlier and the Federal Reserve's policy rate
|
|
@@ -492,7 +493,7 @@ The three US funds and SMH largely hold the same companies, with SOXX and SMH sh
|
|
|
492
493
|
|
|
493
494
|
## Building a Diversified Portfolio
|
|
494
495
|
|
|
495
|
-
A fund spreads the risk over the sector, but the sector still moves as one. The [portfolio](https://www.jeroenbouma.com/projects/financetoolkit/docs/portfolio-optimization) module builds portfolios from the tickers of any Toolkit: minimum variance, maximum Sharpe ratio, mean-variance, risk parity, Hierarchical Risk Parity, minimum CVaR and Black-Litterman weights, the efficient frontier, risk contributions, stress tests and attribution. Below the semiconductor fund is combined with health care (XLV), energy (XLE), long-term Treasuries (TLT) and gold (GLD):
|
|
496
|
+
A fund spreads the risk over the sector, but the sector still moves as one. The [portfolio](https://www.jeroenbouma.com/projects/financetoolkit/docs/portfolio-optimization) module builds portfolios from the tickers of any Toolkit: minimum variance, maximum Sharpe ratio, mean-variance, risk parity, Hierarchical Risk Parity, Hierarchical Equal Risk Contribution, Nested Clustered Optimization, minimum CVaR, minimum drawdown, maximum Omega and CVaR ratio, Black-Litterman, maximum diversification, minimum tracking error and growth optimal (Kelly) weights, the efficient frontier, risk contributions, stress tests and attribution. Below the semiconductor fund is combined with health care (XLV), energy (XLE), long-term Treasuries (TLT) and gold (GLD):
|
|
496
497
|
|
|
497
498
|
```python
|
|
498
499
|
# Initialize the Toolkit for funds across sectors and asset classes from 2021 to 2025
|
|
@@ -744,6 +745,8 @@ Alternatively, if your company's root certificate is already installed in your o
|
|
|
744
745
|
|
|
745
746
|
If none of this is possible, you can accept the risk and allow requests with an API key to be sent without verification by setting `FINANCETOOLKIT_ALLOW_UNVERIFIED_SSL=1` in the same way as above. Only do so on a network you trust: the connection is then encrypted to whoever answers it, which may not be the website you think you are talking to, and your API key is readable to them.
|
|
746
747
|
|
|
748
|
+
To go the other way and never send a request without verification, not even one without an API key, set `FINANCETOOLKIT_ALLOW_UNVERIFIED_SSL=0`. A hosted MCP server (the `sse` or `streamable-http` transport) does this by default, since the data it retrieves reaches every user through its cache.
|
|
749
|
+
|
|
747
750
|
> **Are you part of FinancialModelingPrep?**
|
|
748
751
|
|
|
749
752
|
*No, I am not*. I've merely picked them as the primary data provider given that they have a generous free tier and fair pricing compared to other providers. Therefore, any questions related to the data should go through [their contact form](https://site.financialmodelingprep.com/contact). When it comes to any type of ratios, performance metrics, risk metrics, technical indicators or economic indicators, feel free to reach out to me as this is my own work.
|
|
@@ -318,7 +318,7 @@ Options usually price more risk than follows, as their sellers want to be paid f
|
|
|
318
318
|
|
|
319
319
|
All three are listed in the United States and valued on earnings that lie years ahead, which makes US inflation and interest rates the backdrop to their share prices. In 2022, the year the maximum drawdown above shows each of them falling by more than half, inflation reached 9% and the Federal Reserve raised its policy rate from 0.12% to 4.38%.
|
|
320
320
|
|
|
321
|
-
The [economics](https://www.jeroenbouma.com/projects/financetoolkit/docs/economics) module covers 60+ countries with 50+ indicators, from GDP and unemployment to money supply and interest rates, and the [fixed income](https://www.jeroenbouma.com/projects/financetoolkit/docs/fixedincome) module adds bond yields, yield curves, central bank rates and
|
|
321
|
+
The [economics](https://www.jeroenbouma.com/projects/financetoolkit/docs/economics) module covers 60+ countries with 50+ indicators, from GDP and unemployment to money supply and interest rates, and the [fixed income](https://www.jeroenbouma.com/projects/financetoolkit/docs/fixedincome) module adds bond yields, yield curves, central bank rates and calculations on individual bonds. Both are reached through the same Toolkit instance, or on their own with `from financetoolkit import Economics, FixedIncome`:
|
|
322
322
|
|
|
323
323
|
```python
|
|
324
324
|
# Inflation on the same month a year earlier and the Federal Reserve's policy rate
|
|
@@ -448,7 +448,7 @@ The three US funds and SMH largely hold the same companies, with SOXX and SMH sh
|
|
|
448
448
|
|
|
449
449
|
## Building a Diversified Portfolio
|
|
450
450
|
|
|
451
|
-
A fund spreads the risk over the sector, but the sector still moves as one. The [portfolio](https://www.jeroenbouma.com/projects/financetoolkit/docs/portfolio-optimization) module builds portfolios from the tickers of any Toolkit: minimum variance, maximum Sharpe ratio, mean-variance, risk parity, Hierarchical Risk Parity, minimum CVaR and Black-Litterman weights, the efficient frontier, risk contributions, stress tests and attribution. Below the semiconductor fund is combined with health care (XLV), energy (XLE), long-term Treasuries (TLT) and gold (GLD):
|
|
451
|
+
A fund spreads the risk over the sector, but the sector still moves as one. The [portfolio](https://www.jeroenbouma.com/projects/financetoolkit/docs/portfolio-optimization) module builds portfolios from the tickers of any Toolkit: minimum variance, maximum Sharpe ratio, mean-variance, risk parity, Hierarchical Risk Parity, Hierarchical Equal Risk Contribution, Nested Clustered Optimization, minimum CVaR, minimum drawdown, maximum Omega and CVaR ratio, Black-Litterman, maximum diversification, minimum tracking error and growth optimal (Kelly) weights, the efficient frontier, risk contributions, stress tests and attribution. Below the semiconductor fund is combined with health care (XLV), energy (XLE), long-term Treasuries (TLT) and gold (GLD):
|
|
452
452
|
|
|
453
453
|
```python
|
|
454
454
|
# Initialize the Toolkit for funds across sectors and asset classes from 2021 to 2025
|
|
@@ -700,6 +700,8 @@ Alternatively, if your company's root certificate is already installed in your o
|
|
|
700
700
|
|
|
701
701
|
If none of this is possible, you can accept the risk and allow requests with an API key to be sent without verification by setting `FINANCETOOLKIT_ALLOW_UNVERIFIED_SSL=1` in the same way as above. Only do so on a network you trust: the connection is then encrypted to whoever answers it, which may not be the website you think you are talking to, and your API key is readable to them.
|
|
702
702
|
|
|
703
|
+
To go the other way and never send a request without verification, not even one without an API key, set `FINANCETOOLKIT_ALLOW_UNVERIFIED_SSL=0`. A hosted MCP server (the `sse` or `streamable-http` transport) does this by default, since the data it retrieves reaches every user through its cache.
|
|
704
|
+
|
|
703
705
|
> **Are you part of FinancialModelingPrep?**
|
|
704
706
|
|
|
705
707
|
*No, I am not*. I've merely picked them as the primary data provider given that they have a generous free tier and fair pricing compared to other providers. Therefore, any questions related to the data should go through [their contact form](https://site.financialmodelingprep.com/contact). When it comes to any type of ratios, performance metrics, risk metrics, technical indicators or economic indicators, feel free to reach out to me as this is my own work.
|
|
@@ -2,9 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
__docformat__ = "google"
|
|
4
4
|
|
|
5
|
+
import contextlib
|
|
5
6
|
import os
|
|
6
7
|
import platform
|
|
7
8
|
import time
|
|
9
|
+
import zlib
|
|
8
10
|
from dataclasses import dataclass, field
|
|
9
11
|
from datetime import date, datetime, timedelta
|
|
10
12
|
from pathlib import Path
|
|
@@ -280,7 +282,7 @@ class Cache:
|
|
|
280
282
|
if enabled:
|
|
281
283
|
try:
|
|
282
284
|
self._backend = SQLiteBackend(self._location)
|
|
283
|
-
except Exception as error:
|
|
285
|
+
except Exception as error:
|
|
284
286
|
# A cache is an optimization, so a database that cannot be opened just disables it.
|
|
285
287
|
self._enabled = False
|
|
286
288
|
|
|
@@ -317,7 +319,7 @@ class Cache:
|
|
|
317
319
|
EVICTION_INTERVAL_SECONDS,
|
|
318
320
|
excluded_sources=frozenset({policy_model.MCP}),
|
|
319
321
|
)
|
|
320
|
-
except Exception as error:
|
|
322
|
+
except Exception as error:
|
|
321
323
|
# Eviction is housekeeping, so a failure here is not surfaced.
|
|
322
324
|
logger.debug("Could not evict stale cache entries: %s", error)
|
|
323
325
|
return
|
|
@@ -478,7 +480,7 @@ class Cache:
|
|
|
478
480
|
ever_covered, fresh_covered, payload = self._backend.read_entity_state(
|
|
479
481
|
key, entity, minimum_fetched_at
|
|
480
482
|
)
|
|
481
|
-
except Exception as error:
|
|
483
|
+
except Exception as error:
|
|
482
484
|
# A read that fails mid-session is a cache miss, not a failed call.
|
|
483
485
|
logger.debug(
|
|
484
486
|
"Could not read cached %s.%s for %s: %s",
|
|
@@ -512,8 +514,8 @@ class Cache:
|
|
|
512
514
|
plan.cached[entity] = frame_model.slice_frame(
|
|
513
515
|
stored, start, end, date_axis
|
|
514
516
|
)
|
|
515
|
-
except Exception as error:
|
|
516
|
-
# An unreadable payload is a miss: ask the source for the lot.
|
|
517
|
+
except Exception as error:
|
|
518
|
+
# An unreadable payload (one in another format, such as a pickle, is never read) is a miss: ask the source for the lot. # noqa: E501
|
|
517
519
|
logger.debug(
|
|
518
520
|
"Could not decode cached %s.%s for %s: %s",
|
|
519
521
|
source,
|
|
@@ -523,6 +525,10 @@ class Cache:
|
|
|
523
525
|
)
|
|
524
526
|
plan.missing[entity] = [request]
|
|
525
527
|
|
|
528
|
+
# Removed with its coverage, so the rows fetched now are not recorded as merged with ranges that are no longer held. # noqa: E501
|
|
529
|
+
with contextlib.suppress(Exception):
|
|
530
|
+
self._backend.delete_entity(key, entity)
|
|
531
|
+
|
|
526
532
|
return plan
|
|
527
533
|
|
|
528
534
|
def store(
|
|
@@ -581,6 +587,10 @@ class Cache:
|
|
|
581
587
|
coverage_start = min(coverage_start, bounds[0])
|
|
582
588
|
coverage_end = max(coverage_end, bounds[1])
|
|
583
589
|
|
|
590
|
+
# A bar of a session that has not closed is a snapshot: the day stays uncovered, so the next call asks for it again. # noqa: E501
|
|
591
|
+
if policy_model.get_policy(source, dataset).settles_at_close:
|
|
592
|
+
coverage_end = min(coverage_end, policy_model.get_last_closed_session())
|
|
593
|
+
|
|
584
594
|
if coverage_start <= coverage_end:
|
|
585
595
|
coverage = (coverage_start, coverage_end)
|
|
586
596
|
|
|
@@ -595,11 +605,12 @@ class Cache:
|
|
|
595
605
|
Returns:
|
|
596
606
|
bytes: The payload to store in its place.
|
|
597
607
|
"""
|
|
598
|
-
existing =
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
608
|
+
existing = None
|
|
609
|
+
|
|
610
|
+
# A payload that can't be read (another format, such as a pickle) is replaced.
|
|
611
|
+
if existing_payload is not None:
|
|
612
|
+
with contextlib.suppress(ValueError, zlib.error):
|
|
613
|
+
existing = serialization_model.decode_dataframe(existing_payload)
|
|
603
614
|
|
|
604
615
|
return serialization_model.encode_dataframe(
|
|
605
616
|
frame_model.merge_frames(existing, data, date_axis)
|
|
@@ -616,7 +627,7 @@ class Cache:
|
|
|
616
627
|
dataset=dataset,
|
|
617
628
|
compaction_threshold=COVERAGE_COMPACTION_THRESHOLD,
|
|
618
629
|
)
|
|
619
|
-
except Exception as error:
|
|
630
|
+
except Exception as error:
|
|
620
631
|
# A cache write must never break the call that produced the data.
|
|
621
632
|
logger.debug(
|
|
622
633
|
"Could not cache %s.%s for %s: %s", source, dataset, entity, error
|
|
@@ -672,7 +683,7 @@ class Cache:
|
|
|
672
683
|
return None
|
|
673
684
|
|
|
674
685
|
return serialization_model.decode_object(payload)
|
|
675
|
-
except Exception as error:
|
|
686
|
+
except Exception as error:
|
|
676
687
|
# Any read failure is reported as a miss, so the caller falls back to the source.
|
|
677
688
|
logger.debug(
|
|
678
689
|
"Could not read cached %s.%s for %s: %s", source, dataset, entity, error
|
|
@@ -695,7 +706,8 @@ class Cache:
|
|
|
695
706
|
source (str): The external data source.
|
|
696
707
|
dataset (str): The dataset within that source.
|
|
697
708
|
entity (str): The entity the data belongs to.
|
|
698
|
-
data (Any): The value to store
|
|
709
|
+
data (Any): The value to store: a DataFrame, Series or Index, a scalar, or a
|
|
710
|
+
list, tuple or dictionary of these (see serialization_model.encode_object).
|
|
699
711
|
parameters (dict[str, Any] | None): Parameters that change the data.
|
|
700
712
|
"""
|
|
701
713
|
if not self.serves(source):
|
|
@@ -711,7 +723,7 @@ class Cache:
|
|
|
711
723
|
source=source,
|
|
712
724
|
dataset=dataset,
|
|
713
725
|
)
|
|
714
|
-
except Exception as error:
|
|
726
|
+
except Exception as error:
|
|
715
727
|
logger.debug(
|
|
716
728
|
"Could not cache %s.%s for %s: %s", source, dataset, entity, error
|
|
717
729
|
)
|
|
@@ -792,7 +804,7 @@ class Cache:
|
|
|
792
804
|
|
|
793
805
|
try:
|
|
794
806
|
return self._backend.get_contents()
|
|
795
|
-
except Exception as error:
|
|
807
|
+
except Exception as error:
|
|
796
808
|
logger.warning("Could not read the cache contents: %s", error)
|
|
797
809
|
|
|
798
810
|
return []
|
|
@@ -820,7 +832,7 @@ class Cache:
|
|
|
820
832
|
return self._backend.remove_expired_entries(
|
|
821
833
|
ttl, source=source, dataset=dataset
|
|
822
834
|
)
|
|
823
|
-
except Exception as error:
|
|
835
|
+
except Exception as error:
|
|
824
836
|
# Eviction is housekeeping on a timer, so a failure here is not surfaced.
|
|
825
837
|
logger.debug("Could not evict expired cache entries: %s", error)
|
|
826
838
|
|