financetoolkit 2.3.1__tar.gz → 2.3.2__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.2}/.gitignore +193 -196
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/PKG-INFO +1 -1
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/cache/cache_controller.py +4 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/cache/policy_model.py +61 -3
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/discovery/discovery_controller.py +239 -22
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/discovery/discovery_model.py +169 -5
- financetoolkit-2.3.2/financetoolkit/earnings_model.py +113 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/economics/bis_model.py +67 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/economics/economics_controller.py +406 -0
- financetoolkit-2.3.2/financetoolkit/economics/nyfed_model.py +120 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/etf/etf_controller.py +442 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/etf/etf_model.py +93 -0
- financetoolkit-2.3.2/financetoolkit/finra_model.py +311 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/fixedincome/fixedincome_controller.py +114 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/fmp_model.py +431 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/historical_model.py +16 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/mcp_server/config.yaml +53 -31
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/mcp_server/formatting_model.py +11 -1
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/mcp_server/mcp_controller.py +10 -7
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/mcp_server/mcpb/.mcpbignore +0 -1
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/mcp_server/mcpb/README.md +7 -16
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/mcp_server/mcpb/manifest.json +19 -19
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/mcp_server/mcpb/pyproject.toml +2 -2
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/mcp_server/registry_controller.py +161 -17
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/mcp_server/setup_model.py +106 -71
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/mcp_server/tools_model.py +16 -1
- financetoolkit-2.3.2/financetoolkit/models/damodaran_model.py +255 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/models/growth_model.py +88 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/models/intrinsic_model.py +173 -6
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/models/models_controller.py +953 -33
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/models/quality_model.py +49 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/performance/performance_controller.py +853 -6
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/performance/performance_model.py +660 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/portfolio/construction_controller.py +149 -38
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/portfolio/optimization_model.py +181 -2
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/ratios/ratios_controller.py +793 -99
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/risk/risk_controller.py +552 -1
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/risk/risk_model.py +210 -0
- financetoolkit-2.3.2/financetoolkit/technicals/pattern_model.py +579 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/technicals/technicals_controller.py +754 -11
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/toolkit_controller.py +936 -21
- financetoolkit-2.3.2/financetoolkit/utilities/factor_model.py +745 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/utilities/statistics_model.py +97 -4
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/yfinance_model.py +22 -8
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/pyproject.toml +1 -1
- financetoolkit-2.3.1/financetoolkit/mcp_server/mcpb/build-mcpb.sh +0 -103
- financetoolkit-2.3.1/financetoolkit/models/damodaran_model.py +0 -84
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/LICENSE.txt +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/README.md +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/__init__.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/cache/__init__.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/cache/coverage_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/cache/frame_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/cache/request_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/cache/serialization_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/cache/sqlite_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/cache/ticker_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/currencies_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/discovery/__init__.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/econometrics/__init__.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/econometrics/causal_inference_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/econometrics/causality_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/econometrics/cointegration_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/econometrics/data_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/econometrics/diagnostics_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/econometrics/econometrics_controller.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/econometrics/event_study_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/econometrics/fama_macbeth_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/econometrics/forecast_evaluation_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/econometrics/hypothesis_testing_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/econometrics/pairs_trading_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/econometrics/panel_data_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/econometrics/regime_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/econometrics/regression_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/econometrics/specification_tests_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/econometrics/state_space_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/econometrics/time_series_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/econometrics/unitroot_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/economics/__init__.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/economics/bls_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/economics/boe_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/economics/boj_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/economics/cboe_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/economics/dnb_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/economics/ecb_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/economics/eex_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/economics/esrb_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/economics/eurostat_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/economics/fmp_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/economics/frb_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/economics/fred_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/economics/freddie_mac_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/economics/gmdb_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/economics/helpers.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/economics/ibge_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/economics/imf_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/economics/macrohistory_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/economics/mof_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/economics/nber_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/economics/ngfs_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/economics/oecd_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/economics/ons_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/economics/sbj_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/economics/shiller_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/economics/stoxx_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/economics/treasury_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/economics/yfinance_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/etf/__init__.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/fixedincome/__init__.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/fixedincome/boc_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/fixedincome/bond_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/fixedincome/bundesbank_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/fixedincome/curve_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/fixedincome/derivative_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/fixedincome/ecb_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/fixedincome/eiopa_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/fixedincome/esma_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/fixedincome/euribor_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/fixedincome/fed_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/fixedincome/fiscaldata_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/fixedincome/fmp_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/fixedincome/fred_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/fixedincome/helpers.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/fixedincome/norgesbank_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/fixedincome/rba_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/fixedincome/riksbank_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/fixedincome/short_rate_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/fixedincome/yieldcurve_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/fundamentals_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/helpers.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/mcp_server/__init__.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/mcp_server/__main__.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/mcp_server/analytics_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/mcp_server/auth_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/mcp_server/coercion_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/mcp_server/diagnostics_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/mcp_server/inspection_controller.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/mcp_server/mcpb/LICENSE +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/mcp_server/mcpb/finance_toolkit_icon.png +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/mcp_server/provider_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/mcp_server/series_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/mcp_server/static/apple-touch-icon.png +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/mcp_server/static/favicon-32.png +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/mcp_server/static/favicon.ico +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/mcp_server/stats_page_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/models/__init__.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/models/altman_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/models/beneish_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/models/credit_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/models/dupont_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/models/enterprise_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/models/eva_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/models/fulmer_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/models/grover_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/models/helpers.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/models/ohlson_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/models/peers_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/models/piotroski_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/models/springate_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/models/wacc_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/models/zmijewski_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/normalization/balance.csv +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/normalization/balance_yf.csv +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/normalization/cash.csv +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/normalization/cash_yf.csv +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/normalization/income.csv +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/normalization/income_yf.csv +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/normalization/statistics.csv +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/normalization/statistics_yf.csv +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/normalization_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/options/__init__.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/options/binomial_trees_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/options/black_scholes_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/options/exotics_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/options/greeks_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/options/helpers.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/options/market_metrics_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/options/options_controller.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/options/options_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/options/risk_neutral_density_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/options/svi_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/performance/__init__.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/performance/helpers.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/portfolio/__init__.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/portfolio/attribution_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/portfolio/config.yaml +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/portfolio/definition_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/portfolio/example_datasets/example_portfolio.csv +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/portfolio/example_datasets/example_portfolio.xlsx +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/portfolio/helpers.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/portfolio/overview_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/portfolio/portfolio_controller.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/portfolio/portfolio_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/portfolio/presets/all_weather.yaml +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/portfolio/presets/balanced_60_40.yaml +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/portfolio/presets/barbell.yaml +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/portfolio/presets/bogleheads_three_fund.yaml +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/portfolio/presets/buffett_90_10.yaml +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/portfolio/presets/conservative_income.yaml +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/portfolio/presets/global_60_40.yaml +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/portfolio/presets/global_equity_growth.yaml +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/portfolio/presets/golden_butterfly.yaml +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/portfolio/presets/permanent_portfolio.yaml +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/portfolio/presets/small_cap_value_tilt.yaml +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/portfolio/presets/target_date_glidepath.yaml +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/portfolio/presets/us_equity_sectors.yaml +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/py.typed +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/ratios/__init__.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/ratios/efficiency_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/ratios/helpers.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/ratios/liquidity_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/ratios/profitability_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/ratios/solvency_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/ratios/valuation_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/risk/__init__.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/risk/backtesting_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/risk/copula_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/risk/covar_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/risk/cvar_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/risk/evar_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/risk/garch_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/risk/helpers.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/risk/market_liquidity_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/risk/realized_volatility_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/risk/var_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/technicals/__init__.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/technicals/breadth_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/technicals/momentum_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/technicals/overlap_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/technicals/seasonality_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/technicals/volatility_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/utilities/dataframe_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/utilities/error_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/utilities/excel_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/utilities/logger_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/financetoolkit/utilities/requests_model.py +0 -0
- {financetoolkit-2.3.1 → financetoolkit-2.3.2}/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.2
|
|
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
|
|
@@ -581,6 +581,10 @@ class Cache:
|
|
|
581
581
|
coverage_start = min(coverage_start, bounds[0])
|
|
582
582
|
coverage_end = max(coverage_end, bounds[1])
|
|
583
583
|
|
|
584
|
+
# 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
|
|
585
|
+
if policy_model.get_policy(source, dataset).settles_at_close:
|
|
586
|
+
coverage_end = min(coverage_end, policy_model.get_last_closed_session())
|
|
587
|
+
|
|
584
588
|
if coverage_start <= coverage_end:
|
|
585
589
|
coverage = (coverage_start, coverage_end)
|
|
586
590
|
|
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
__docformat__ = "google"
|
|
4
4
|
|
|
5
5
|
from dataclasses import dataclass
|
|
6
|
+
from datetime import date, datetime, time, timedelta
|
|
7
|
+
from zoneinfo import ZoneInfo
|
|
6
8
|
|
|
7
9
|
DAY = 86400
|
|
8
10
|
|
|
@@ -46,6 +48,7 @@ MACROHISTORY = "Macrohistory"
|
|
|
46
48
|
DE_NEDERLANDSCHE_BANK = "DeNederlandscheBank"
|
|
47
49
|
EUROPEAN_SYSTEMIC_RISK_BOARD = "ESRB"
|
|
48
50
|
DAMODARAN = "Damodaran"
|
|
51
|
+
FINRA = "FINRA"
|
|
49
52
|
|
|
50
53
|
# The market risk premium is published per country, so it is one cache entry. The name
|
|
51
54
|
# marks the premiums as decimals, so an entry holding percentages under another name is
|
|
@@ -77,10 +80,46 @@ class CachePolicy:
|
|
|
77
80
|
re-requested once the stored range has gone stale. Zero means the whole
|
|
78
81
|
stale range is requested again, which is the right behaviour for sources
|
|
79
82
|
that cannot be queried by date range anyway.
|
|
83
|
+
settles_at_close (bool): Whether the data holds a bar per trading day. The bar
|
|
84
|
+
of a session that is still trading changes until the close, so such a day
|
|
85
|
+
is only recorded as covered once every session has closed (see
|
|
86
|
+
`get_last_closed_session`) and is requested again until then.
|
|
80
87
|
"""
|
|
81
88
|
|
|
82
89
|
ttl_seconds: int
|
|
83
90
|
revision_days: int = 0
|
|
91
|
+
settles_at_close: bool = False
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
# The last major exchanges to close (New York, Toronto) close at 16:00 New York time; the
|
|
95
|
+
# half hour after it leaves time for the end-of-day bar to be published.
|
|
96
|
+
SESSION_CLOSE = time(16, 30)
|
|
97
|
+
SESSION_ZONE = ZoneInfo("America/New_York")
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
def get_last_closed_session(now: datetime | None = None) -> date:
|
|
101
|
+
"""
|
|
102
|
+
The last day whose trading sessions have all closed, everywhere.
|
|
103
|
+
|
|
104
|
+
A daily bar fetched during the session is a snapshot of the latest price, not the
|
|
105
|
+
close, so a day only counts as final from 16:30 New York time, half an hour after the
|
|
106
|
+
last major exchanges have closed. Exchanges further east close earlier on the same
|
|
107
|
+
date.
|
|
108
|
+
|
|
109
|
+
Args:
|
|
110
|
+
now (datetime | None): The moment to judge, with a time zone. Defaults to the
|
|
111
|
+
current time; mainly useful for testing.
|
|
112
|
+
|
|
113
|
+
Returns:
|
|
114
|
+
date: The last date whose daily bars are final.
|
|
115
|
+
"""
|
|
116
|
+
local = (now or datetime.now(SESSION_ZONE)).astimezone(SESSION_ZONE)
|
|
117
|
+
|
|
118
|
+
return (
|
|
119
|
+
local.date()
|
|
120
|
+
if local.time() >= SESSION_CLOSE
|
|
121
|
+
else local.date() - timedelta(days=1)
|
|
122
|
+
)
|
|
84
123
|
|
|
85
124
|
|
|
86
125
|
# Point-in-time data has no date range, so only the TTL applies.
|
|
@@ -89,9 +128,11 @@ DEFAULT_POLICY = CachePolicy(ttl_seconds=DAY)
|
|
|
89
128
|
POLICIES: dict[str, CachePolicy] = {
|
|
90
129
|
# Splits and dividends restate recent bars, so only the last week is re-requested.
|
|
91
130
|
f"{FINANCIAL_MODELING_PREP}.historical": CachePolicy(
|
|
92
|
-
ttl_seconds=DAY, revision_days=7
|
|
131
|
+
ttl_seconds=DAY, revision_days=7, settles_at_close=True
|
|
132
|
+
),
|
|
133
|
+
f"{YAHOO_FINANCE}.historical": CachePolicy(
|
|
134
|
+
ttl_seconds=DAY, revision_days=7, settles_at_close=True
|
|
93
135
|
),
|
|
94
|
-
f"{YAHOO_FINANCE}.historical": CachePolicy(ttl_seconds=DAY, revision_days=7),
|
|
95
136
|
# Intraday bars move continuously; only FinancialModelingPrep publishes them.
|
|
96
137
|
f"{FINANCIAL_MODELING_PREP}.intraday": CachePolicy(
|
|
97
138
|
ttl_seconds=900, revision_days=2
|
|
@@ -126,7 +167,11 @@ POLICIES: dict[str, CachePolicy] = {
|
|
|
126
167
|
f"{FINANCIAL_MODELING_PREP}.stock_splits": CachePolicy(ttl_seconds=DAY),
|
|
127
168
|
f"{FINANCIAL_MODELING_PREP}.shares_float": CachePolicy(ttl_seconds=DAY),
|
|
128
169
|
f"{FINANCIAL_MODELING_PREP}.insider_trade_statistics": CachePolicy(ttl_seconds=DAY),
|
|
170
|
+
f"{FINANCIAL_MODELING_PREP}.institutional_ownership": CachePolicy(ttl_seconds=DAY),
|
|
129
171
|
f"{FINANCIAL_MODELING_PREP}.stock_grades": CachePolicy(ttl_seconds=DAY),
|
|
172
|
+
f"{FINANCIAL_MODELING_PREP}.price_targets": CachePolicy(ttl_seconds=DAY),
|
|
173
|
+
f"{FINANCIAL_MODELING_PREP}.price_target_history": CachePolicy(ttl_seconds=DAY),
|
|
174
|
+
f"{FINANCIAL_MODELING_PREP}.analyst_recommendations": CachePolicy(ttl_seconds=DAY),
|
|
130
175
|
# Fund holdings and allocations are republished daily by most issuers.
|
|
131
176
|
f"{FINANCIAL_MODELING_PREP}.etf_holdings": CachePolicy(ttl_seconds=DAY),
|
|
132
177
|
f"{FINANCIAL_MODELING_PREP}.etf_information": CachePolicy(ttl_seconds=DAY),
|
|
@@ -153,7 +198,9 @@ POLICIES: dict[str, CachePolicy] = {
|
|
|
153
198
|
f"{YAHOO_FINANCE}.option_chain": CachePolicy(ttl_seconds=900),
|
|
154
199
|
f"{YAHOO_FINANCE}.option_expiries": CachePolicy(ttl_seconds=DAY),
|
|
155
200
|
# A forward curve fetches one contract per delivery month, so cache per contract.
|
|
156
|
-
f"{YAHOO_FINANCE}.futures": CachePolicy(
|
|
201
|
+
f"{YAHOO_FINANCE}.futures": CachePolicy(
|
|
202
|
+
ttl_seconds=DAY, revision_days=7, settles_at_close=True
|
|
203
|
+
),
|
|
157
204
|
# Macro sources revise heavily and publish on a lag, so the tail stays long.
|
|
158
205
|
f"{FRED}.series": CachePolicy(ttl_seconds=DAY, revision_days=365),
|
|
159
206
|
f"{OECD}.query": CachePolicy(ttl_seconds=DAY, revision_days=1095),
|
|
@@ -161,6 +208,7 @@ POLICIES: dict[str, CachePolicy] = {
|
|
|
161
208
|
# Full history per series and no date range accepted, so only a TTL applies.
|
|
162
209
|
f"{EUROPEAN_CENTRAL_BANK}.series": CachePolicy(ttl_seconds=DAY),
|
|
163
210
|
f"{FEDERAL_RESERVE}.rate": CachePolicy(ttl_seconds=DAY),
|
|
211
|
+
f"{FEDERAL_RESERVE}.series": CachePolicy(ttl_seconds=DAY),
|
|
164
212
|
# Statistical offices and central banks that publish a series whole and revise its
|
|
165
213
|
# recent past; most release daily or monthly, so a day keeps the data current.
|
|
166
214
|
# A rerun only asks for the revision window: a year of monthly releases for Eurostat,
|
|
@@ -178,6 +226,11 @@ POLICIES: dict[str, CachePolicy] = {
|
|
|
178
226
|
f"{BANK_FOR_INTERNATIONAL_SETTLEMENTS}.commercial_property": CachePolicy(
|
|
179
227
|
ttl_seconds=7 * DAY, revision_days=731
|
|
180
228
|
),
|
|
229
|
+
# Quarterly credit statistics, published about three months after the quarter and
|
|
230
|
+
# revised back years when GDP or the credit series are revised.
|
|
231
|
+
f"{BANK_FOR_INTERNATIONAL_SETTLEMENTS}.credit": CachePolicy(
|
|
232
|
+
ttl_seconds=7 * DAY, revision_days=731
|
|
233
|
+
),
|
|
181
234
|
f"{BANK_OF_ENGLAND}.series": CachePolicy(ttl_seconds=DAY, revision_days=31),
|
|
182
235
|
# A workbook of a closed span of years no longer changes; the one running to the
|
|
183
236
|
# present is republished monthly and the current month daily.
|
|
@@ -241,7 +294,12 @@ POLICIES: dict[str, CachePolicy] = {
|
|
|
241
294
|
f"{EUROPEAN_SYSTEMIC_RISK_BOARD}.listing": CachePolicy(ttl_seconds=7 * DAY),
|
|
242
295
|
# The default spreads of the synthetic rating table are updated once a year.
|
|
243
296
|
f"{DAMODARAN}.synthetic_ratings": CachePolicy(ttl_seconds=30 * DAY),
|
|
297
|
+
# The industry datasets are updated every January.
|
|
298
|
+
f"{DAMODARAN}.industry_statistics": CachePolicy(ttl_seconds=30 * DAY),
|
|
244
299
|
f"{FEDERAL_RESERVE_BOARD}.scenario": CachePolicy(ttl_seconds=30 * DAY),
|
|
300
|
+
# A published day of short sale volume does not change, but FINRA publishes the file of
|
|
301
|
+
# a day in the evening, so once a day has passed the last week is asked for again.
|
|
302
|
+
f"{FINRA}.short_volume": CachePolicy(ttl_seconds=DAY, revision_days=7),
|
|
245
303
|
f"{INTERNATIONAL_MONETARY_FUND}.consumer_prices": CachePolicy(
|
|
246
304
|
ttl_seconds=DAY, revision_days=365
|
|
247
305
|
),
|