63 lines
3.2 KiB
Python
63 lines
3.2 KiB
Python
"""
|
|
ferro_ta.analysis — Portfolio analytics, strategy analysis, and financial modelling.
|
|
|
|
|
|
Sub-modules
|
|
-----------
|
|
* :mod:`ferro_ta.analysis.portfolio` — Portfolio and multi-asset analytics
|
|
* :mod:`ferro_ta.analysis.backtest` — Vectorised back-testing helpers
|
|
* :mod:`ferro_ta.analysis.regime` — Market regime detection
|
|
* :mod:`ferro_ta.analysis.cross_asset` — Cross-asset and relative-strength analysis
|
|
* :mod:`ferro_ta.analysis.attribution` — Return attribution
|
|
* :mod:`ferro_ta.analysis.signals` — Signal composition and screening
|
|
* :mod:`ferro_ta.analysis.features` — Feature matrix and ML readiness helpers
|
|
* :mod:`ferro_ta.analysis.crypto` — Crypto-specific indicators and helpers
|
|
* :mod:`ferro_ta.analysis.options` — Options pricing, Greeks, IV, and smile analytics
|
|
* :mod:`ferro_ta.analysis.futures` — Futures basis, curve, roll, and synthetic analytics
|
|
* :mod:`ferro_ta.analysis.options_strategy` — Typed derivatives strategy schemas
|
|
* :mod:`ferro_ta.analysis.derivatives_payoff` — Multi-leg payoff and Greeks aggregation
|
|
* :mod:`ferro_ta.analysis.resample` — OHLCV bar aggregation utilities
|
|
* :mod:`ferro_ta.analysis.multitf` — Multi-timeframe signal utilities
|
|
* :mod:`ferro_ta.analysis.adjust` — Corporate action price adjustment utilities
|
|
* :mod:`ferro_ta.analysis.plot` — Plotly-based backtest visualization
|
|
|
|
Example usage::
|
|
|
|
from ferro_ta.analysis.portfolio import portfolio_returns
|
|
from ferro_ta.analysis.backtest import backtest
|
|
from ferro_ta.analysis.resample import resample_ohlcv, align_to_coarse, resample_ohlcv_labels
|
|
from ferro_ta.analysis.multitf import MultiTimeframeEngine
|
|
from ferro_ta.analysis.adjust import adjust_ohlcv, adjust_for_splits, adjust_for_dividends
|
|
from ferro_ta.analysis.plot import plot_backtest
|
|
"""
|
|
|
|
import importlib as _importlib
|
|
|
|
_LAZY_IMPORTS: dict[str, tuple[str, str]] = {
|
|
"detect_volatility_regime": (
|
|
"ferro_ta.analysis.regime",
|
|
"detect_volatility_regime",
|
|
),
|
|
"detect_trend_regime": ("ferro_ta.analysis.regime", "detect_trend_regime"),
|
|
"detect_combined_regime": ("ferro_ta.analysis.regime", "detect_combined_regime"),
|
|
"RegimeFilter": ("ferro_ta.analysis.regime", "RegimeFilter"),
|
|
"PortfolioOptimizer": ("ferro_ta.analysis.optimize", "PortfolioOptimizer"),
|
|
"mean_variance_optimize": ("ferro_ta.analysis.optimize", "mean_variance_optimize"),
|
|
"risk_parity_optimize": ("ferro_ta.analysis.optimize", "risk_parity_optimize"),
|
|
"max_sharpe_optimize": ("ferro_ta.analysis.optimize", "max_sharpe_optimize"),
|
|
"PaperTrader": ("ferro_ta.analysis.live", "PaperTrader"),
|
|
"BarResult": ("ferro_ta.analysis.live", "BarResult"),
|
|
"TradeRecord": ("ferro_ta.analysis.live", "TradeRecord"),
|
|
}
|
|
|
|
|
|
def __getattr__(name: str):
|
|
"""Lazy imports for heavy sub-modules to avoid startup cost."""
|
|
if name in _LAZY_IMPORTS:
|
|
module_path, attr = _LAZY_IMPORTS[name]
|
|
mod = _importlib.import_module(module_path)
|
|
obj = getattr(mod, attr)
|
|
globals()[name] = obj # cache so subsequent access skips __getattr__
|
|
return obj
|
|
raise AttributeError(f"module 'ferro_ta.analysis' has no attribute {name!r}")
|