{"id":40497918,"url":"https://github.com/eackermann/alphaweave","last_synced_at":"2026-01-20T19:02:24.320Z","repository":{"id":325405039,"uuid":"1101002471","full_name":"eackermann/alphaweave","owner":"eackermann","description":"Weave data. Craft alpha. alphaweave backtesting framework","archived":false,"fork":false,"pushed_at":"2025-11-21T06:20:50.000Z","size":242,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-11-21T07:18:18.312Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/eackermann.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-21T03:54:03.000Z","updated_at":"2025-11-21T06:20:53.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/eackermann/alphaweave","commit_stats":null,"previous_names":["eackermann/alphaweave"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/eackermann/alphaweave","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eackermann%2Falphaweave","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eackermann%2Falphaweave/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eackermann%2Falphaweave/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eackermann%2Falphaweave/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eackermann","download_url":"https://codeload.github.com/eackermann/alphaweave/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eackermann%2Falphaweave/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28609572,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-20T18:56:40.769Z","status":"ssl_error","status_checked_at":"2026-01-20T18:54:26.653Z","response_time":117,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-01-20T19:00:39.453Z","updated_at":"2026-01-20T19:02:20.641Z","avatar_url":"https://github.com/eackermann.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# AlphaWeave\n\nWeave data. Craft alpha.\n\n## Install (dev)\n\n```bash\npython -m pip install -e .[dev]\n```\n\n## Run tests\n\n```bash\npytest\n```\n\n## Example\n\n```bash\npython examples/buy_and_hold.py\n```\n\n## Overview\n\nalphaweave is a backtesting framework for Python 3.11+ that provides:\n\n- **Frame abstraction**: Unified interface for Pandas and Polars DataFrames\n- **Strategy API**: Simple base class for implementing trading strategies\n- **Vector Backtester**: Bar-by-bar backtesting engine with realistic execution\n- **Data loaders**: CSV and Parquet file loaders with automatic column normalization\n- **Corporate Actions**: Support for stock splits and cash dividends\n- **Technical Indicators**: Built-in indicators (SMA, EMA, RSI, ROC, ATR)\n- **Signals**: Signal generation helpers (crossovers, comparisons)\n- **Execution Models**: Fees, slippage, and volume limit models\n- **Risk Management**: Risk limits and portfolio constraints\n- **Analysis Tools**: Walk-forward analysis, robustness testing, parameter sweeps\n- **Advanced Metrics**: Rolling Sharpe, drawdown, volatility; trade analytics; factor regression\n- **Report Generation**: HTML/Markdown reports with embedded plots and comprehensive analysis\n- **Portfolio Optimization**: Mean-variance, risk parity, minimum variance, target volatility optimizers\n\n## Quick Start\n\n```python\nimport alphaweave as aw\nimport pandas as pd\n\n# Create sample data\ndf = pd.DataFrame({\n    \"datetime\": pd.date_range(\"2020-01-01\", periods=10, freq=\"D\"),\n    \"open\": [10+i for i in range(10)],\n    \"high\": [11+i for i in range(10)],\n    \"low\": [9+i for i in range(10)],\n    \"close\": [10+i for i in range(10)],\n    \"volume\": [100]*10,\n})\n\nframe = aw.core.frame.Frame.from_pandas(df)\n\nclass BuyAndHold(aw.strategy.base.Strategy):\n    def init(self): \n        pass\n    \n    def next(self, i):\n        self.order_target_percent(\"TEST\", 1.0)\n\nres = aw.engine.vector.VectorBacktester().run(\n    BuyAndHold, \n    data={\"TEST\": frame}, \n    capital=1000\n)\n\nprint(res.equity_series)\n```\n\n## Features\n\n### Corporate Actions\n\nalphaweave supports stock splits and cash dividends:\n\n```python\nfrom alphaweave.data.corporate_actions import (\n    build_corporate_actions_store,\n    SplitAction,\n    DividendAction,\n)\nfrom datetime import datetime\n\n# Create corporate actions\nsplits = [\n    SplitAction(symbol=\"AAPL\", date=datetime(2020, 8, 31), ratio=4.0),  # 4-for-1 split\n]\ndividends = [\n    DividendAction(symbol=\"AAPL\", date=datetime(2023, 11, 16), amount=0.24),  # $0.24/share\n]\n\nstore = build_corporate_actions_store(splits=splits, dividends=dividends)\n\n# Use in backtest\nresult = aw.engine.vector.VectorBacktester().run(\n    BuyAndHold,\n    data={\"AAPL\": frame},\n    capital=10000.0,\n    corporate_actions=store  # Splits preserve equity, dividends add cash\n)\n```\n\n### Technical Indicators\n\nBuilt-in indicators for strategy development:\n\n```python\nclass MyStrategy(aw.strategy.base.Strategy):\n    def init(self):\n        self.sma_period = 20\n        self.rsi_period = 14\n    \n    def next(self, i):\n        sma = self.sma(\"SYMBOL\", self.sma_period)\n        rsi = self.rsi(\"SYMBOL\", self.rsi_period)\n        close = self.close(\"SYMBOL\")\n        \n        # Trading logic using indicators\n        if close \u003e sma and rsi \u003c 70:\n            self.order_target_percent(\"SYMBOL\", 1.0)\n```\n\n### Execution Models\n\nConfigure fees, slippage, and volume limits:\n\n```python\nfrom alphaweave.execution.fees import FixedFees\nfrom alphaweave.execution.slippage import PercentageSlippage\n\nfees = FixedFees(commission=1.0)  # $1 per trade\nslippage = PercentageSlippage(rate=0.001)  # 0.1% slippage\n\nresult = backtester.run(\n    MyStrategy,\n    data={\"AAPL\": frame},\n    fees=fees,\n    slippage=slippage\n)\n```\n\n### Advanced Metrics \u0026 Reporting\n\nAnalyze backtest results with comprehensive metrics and generate reports:\n\n```python\nfrom alphaweave.results.report import generate_html_report\nimport pandas as pd\n\nresult = backtester.run(MyStrategy, data={\"AAPL\": frame})\n\n# Rolling metrics\nrolling_sharpe = result.rolling_sharpe(\"63D\")  # 63-day rolling Sharpe\nrolling_dd = result.rolling_drawdown(\"252D\")    # 252-day rolling drawdown\n\n# Trade analytics\nsummary = result.trade_summary()\nprint(f\"Win Rate: {summary['win_rate']:.2%}\")\nprint(f\"Expectancy: ${summary['expectancy']:.2f}\")\n\n# Factor regression\nfactor_returns = pd.DataFrame({\n    \"SPY\": spy_returns,\n}, index=dates)\nfactor_result = result.factor_regression(factor_returns)\nprint(f\"Alpha: {factor_result.alpha:.4f}\")\nprint(f\"Beta: {factor_result.betas['SPY']:.4f}\")\n\n# Generate HTML report\nhtml = generate_html_report(\n    result,\n    title=\"My Strategy Backtest\",\n    factor_returns=factor_returns,\n    include_plots=True,\n)\nwith open(\"report.html\", \"w\") as f:\n    f.write(html)\n```\n\n### Portfolio Optimization\n\nBuild optimized portfolios using standard optimizers:\n\n```python\nfrom alphaweave.portfolio.optimizers import risk_parity, min_variance, target_volatility\nfrom alphaweave.portfolio.risk import estimate_covariance\nfrom alphaweave.portfolio.universe import top_n_by_score, normalize_scores_to_weights\n\nclass OptimizedPortfolio(Strategy):\n    def init(self):\n        self.assets = [\"SPY\", \"TLT\", \"GLD\", \"QQQ\"]\n        self.lookback = 60\n    \n    def next(self, i):\n        if not (self.schedule.every(\"1M\") and self.schedule.at_close()):\n            return\n        \n        # Get historical returns\n        returns_df = self._get_recent_returns(self.assets, self.lookback)\n        \n        # Estimate covariance\n        cov = estimate_covariance(returns_df, method=\"ewma\")\n        \n        # Optimize: risk parity\n        result = risk_parity(cov)\n        \n        # Apply weights\n        for symbol, w in result.weights.items():\n            self.order_target_percent(symbol, w)\n```\n\nNeed cost-aware realism? Track `prev_weights` inside your strategy, build a `TransactionCostModel`, and pass the optional knobs (`prev_weights`, `transaction_cost_model`, `turnover_constraint`, `rebalance_penalty`) into `mean_variance`, `min_variance`, or `risk_parity`. See `docs/sprint_16_cost_turnover.md` plus the new examples under `examples/cost_aware_*` for a complete pattern that keeps the Strategy API untouched.\n\n### Monitoring \u0026 Dashboards\n\n- Plug an `InMemoryMonitor` into `VectorBacktester`/`LiveEngine` to capture `BarSnapshot`s, trades, and custom metrics via `Strategy.log_metric`.\n- Wrap it with `RunMonitor` for convenient pandas access (`equity_curve`, `drawdown_curve`, exposures, turnover, costs).\n- Use `alphaweave.monitoring.plots` or `generate_html_dashboard` for a zero-dependency report; check `examples/backtest_with_dashboard.py`, `examples/live_replay_with_dashboard.py`, and `examples/strategy_custom_metrics_logging.py`.\n\n### Live Runner \u0026 Brokers\n\n- `alphaweave.live.broker` defines a lightweight broker protocol; adapters live under `alphaweave.live.adapters.*` (mock, paper, IBKR, Alpaca, Binance skeletons).\n- `LiveConfig` + `LiveRunner` wire datafeed, broker, strategy, and monitoring with a few lines of config—see `examples/live_mock_runner.py`, `examples/live_paper_runner.py`, and `examples/live_config_template.yaml`.\n- `LiveState` persistence + `Strategy.get_state/set_state` hooks provide checkpoints for replay/paper/live workflows.\n\n## Documentation\n\n- **[API.md](API.md)**: Complete API reference\n- **[context.md](context.md)**: Comprehensive codebase context and architecture\n- **Examples**: See `examples/` directory for strategy examples\n\n## License\n\nSee LICENSE file for details.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feackermann%2Falphaweave","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feackermann%2Falphaweave","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feackermann%2Falphaweave/lists"}