{"id":13739808,"url":"https://github.com/coding-kitties/investing-algorithm-framework","last_synced_at":"2026-04-24T11:07:00.674Z","repository":{"id":40410199,"uuid":"228824550","full_name":"coding-kitties/investing-algorithm-framework","owner":"coding-kitties","description":"Framework for developing, backtesting, and deploying automated trading algorithms and trading bots.","archived":false,"fork":false,"pushed_at":"2026-01-18T22:48:26.000Z","size":38316,"stargazers_count":646,"open_issues_count":29,"forks_count":89,"subscribers_count":12,"default_branch":"main","last_synced_at":"2026-01-19T07:09:26.730Z","etag":null,"topics":["algorithmic-trading","backtesting","backtesting-trading-strategies","cryptocurrency","python","quantitative","quantitative-analysis","quantitative-finance","quantitative-trading","trade","trading","trading-bot","trading-bots","trading-strategies"],"latest_commit_sha":null,"homepage":"https://coding-kitties.github.io/investing-algorithm-framework/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/coding-kitties.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS.md","dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2019-12-18T11:20:36.000Z","updated_at":"2026-01-18T22:48:30.000Z","dependencies_parsed_at":"2023-12-14T17:44:10.792Z","dependency_job_id":"b6d02e83-a8cb-4a60-9315-4a436ba7b172","html_url":"https://github.com/coding-kitties/investing-algorithm-framework","commit_stats":{"total_commits":501,"total_committers":5,"mean_commits":100.2,"dds":0.5169660678642715,"last_synced_commit":"bbbaee371c1559136547770db964ac9af5d42514"},"previous_names":[],"tags_count":250,"template":false,"template_full_name":null,"purl":"pkg:github/coding-kitties/investing-algorithm-framework","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coding-kitties%2Finvesting-algorithm-framework","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coding-kitties%2Finvesting-algorithm-framework/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coding-kitties%2Finvesting-algorithm-framework/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coding-kitties%2Finvesting-algorithm-framework/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/coding-kitties","download_url":"https://codeload.github.com/coding-kitties/investing-algorithm-framework/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coding-kitties%2Finvesting-algorithm-framework/sbom","scorecard":{"id":298170,"data":{"date":"2025-08-11","repo":{"name":"github.com/coding-kitties/investing-algorithm-framework","commit":"9c2fad69715541ebd315e4d486bc141acbb8e858"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.8,"checks":[{"name":"Maintained","score":10,"reason":"30 commit(s) and 2 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: jobLevel 'contents' permission set to 'write': .github/workflows/publish.yml:11","Warn: no topLevel permission defined: .github/workflows/publish.yml:1","Warn: no topLevel permission defined: .github/workflows/test.yml:1"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: third-party GitHubAction not pinned by hash: .github/workflows/publish.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/coding-kitties/investing-algorithm-framework/publish.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/coding-kitties/investing-algorithm-framework/test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/coding-kitties/investing-algorithm-framework/test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/coding-kitties/investing-algorithm-framework/test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:52: update your workflow using https://app.stepsecurity.io/secureworkflow/coding-kitties/investing-algorithm-framework/test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:55: update your workflow using https://app.stepsecurity.io/secureworkflow/coding-kitties/investing-algorithm-framework/test.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test.yml:71: update your workflow using https://app.stepsecurity.io/secureworkflow/coding-kitties/investing-algorithm-framework/test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:81: update your workflow using https://app.stepsecurity.io/secureworkflow/coding-kitties/investing-algorithm-framework/test.yml/main?enable=pin","Warn: pipCommand not pinned by hash: investing_algorithm_framework/cli/templates/aws_lambda_dockerfile.template:16","Warn: pipCommand not pinned by hash: investing_algorithm_framework/cli/templates/aws_lambda_dockerfile.template:17","Warn: pipCommand not pinned by hash: .github/workflows/test.yml:34","Info:   0 out of   6 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   2 third-party GitHubAction dependencies pinned","Info:   0 out of   3 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 1 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":0,"reason":"37 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-968p-4wvh-cqc8","Warn: Project is vulnerable to: GHSA-67hx-6x53-jw92","Warn: Project is vulnerable to: GHSA-wf5p-g6vw-rhxx","Warn: Project is vulnerable to: GHSA-jr5f-v2jv-69x6","Warn: Project is vulnerable to: GHSA-qwcr-r2fm-qrc7","Warn: Project is vulnerable to: GHSA-grv7-fg5c-xmjg","Warn: Project is vulnerable to: GHSA-pxg6-pf52-xh8x","Warn: Project is vulnerable to: GHSA-3xgq-45jj-v275","Warn: Project is vulnerable to: GHSA-rv95-896h-c2vc","Warn: Project is vulnerable to: GHSA-qw6h-vgh9-j6wx","Warn: Project is vulnerable to: GHSA-jchw-25xp-jwwc","Warn: Project is vulnerable to: GHSA-cxjh-pqwp-8mfp","Warn: Project is vulnerable to: GHSA-pfrx-2q88-qq97","Warn: Project is vulnerable to: GHSA-c7qv-q95q-8v27","Warn: Project is vulnerable to: GHSA-4www-5p9h-95mh","Warn: Project is vulnerable to: GHSA-9gqv-wp59-fq42","Warn: Project is vulnerable to: GHSA-952p-6rrq-rcjv","Warn: Project is vulnerable to: GHSA-mwcw-c2x4-8c55","Warn: Project is vulnerable to: GHSA-76c9-3jph-rj3q","Warn: Project is vulnerable to: GHSA-9wv6-86v2-598j","Warn: Project is vulnerable to: GHSA-rhx6-c78j-4q9w","Warn: Project is vulnerable to: GHSA-7fh5-64p2-3v2j","Warn: Project is vulnerable to: GHSA-x7hr-w5r2-h6wg","Warn: Project is vulnerable to: GHSA-m6fv-jmcg-4jfg","Warn: Project is vulnerable to: GHSA-76p7-773f-r4q5","Warn: Project is vulnerable to: GHSA-cm22-4g7w-348p","Warn: Project is vulnerable to: GHSA-w5p7-h5w8-2hfq","Warn: Project is vulnerable to: GHSA-4vvj-4cpr-p986","Warn: Project is vulnerable to: GHSA-wr3j-pwj9-hqq6","Warn: Project is vulnerable to: GHSA-4v9v-hfq4-rm2v","Warn: Project is vulnerable to: GHSA-9jgg-88mc-972h","Warn: Project is vulnerable to: GHSA-3h5v-q93c-6h6q","Warn: Project is vulnerable to: GHSA-9548-qrrj-x5pj","Warn: Project is vulnerable to: GHSA-43qf-4rqw-9q2g","Warn: Project is vulnerable to: GHSA-7rxf-gvfg-47g4","Warn: Project is vulnerable to: GHSA-8vgw-p6qm-5gr7","Warn: Project is vulnerable to: GHSA-33p9-3p43-82vq"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-17T20:03:06.941Z","repository_id":40410199,"created_at":"2025-08-17T20:03:06.942Z","updated_at":"2025-08-17T20:03:06.942Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28618797,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-20T22:24:05.405Z","status":"ssl_error","status_checked_at":"2026-01-20T22:20:31.342Z","response_time":117,"last_error":"SSL_read: 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":["algorithmic-trading","backtesting","backtesting-trading-strategies","cryptocurrency","python","quantitative","quantitative-analysis","quantitative-finance","quantitative-trading","trade","trading","trading-bot","trading-bots","trading-strategies"],"created_at":"2024-08-03T04:00:37.846Z","updated_at":"2026-04-12T21:16:43.272Z","avatar_url":"https://github.com/coding-kitties.png","language":"Python","readme":"\u003ch1 align=\"center\"\u003e\n    Investing Algorithm Framework\n\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ci align=\"center\"\u003eCreate trading strategies. Compare them side by side. Pick the best one. 🚀\u003c/i\u003e\n\u003c/p\u003e\n\n\u003ch4 align=\"center\"\u003e\n  \u003ca href=\"https://github.com/coding-kitties/investing-algorithm-framework/actions/workflows/test.yml\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/actions/workflow/status/coding-kitties/investing-algorithm-framework/test.yml?branch=master\u0026label=tests\u0026style=flat-square\" alt=\"tests\" style=\"height: 20px;\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://pypi.org/project/investing-algorithm-framework/\"\u003e\n    \u003cimg src=\"https://img.shields.io/pypi/v/investing-algorithm-framework.svg?style=flat-square\" alt=\"pypi\" style=\"height: 20px;\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://pepy.tech/project/investing-algorithm-framework\"\u003e\n    \u003cimg src=\"https://pepy.tech/badge/investing-algorithm-framework/month?style=flat-square\" alt=\"downloads\" style=\"height: 20px;\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://opensource.org/licenses/Apache-2.0\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/apache%202.0-blue.svg?style=flat-square\u0026label=license\" alt=\"license\" style=\"height: 20px;\"\u003e\n  \u003c/a\u003e\n  \u003cbr\u003e\n  \u003ca href=\"https://discord.gg/dQsRmGZP\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/discord-7289da.svg?style=flat-square\u0026logo=discord\" alt=\"discord\" style=\"height: 20px;\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://www.reddit.com/r/InvestingBots/\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/reddit-FF4500.svg?style=flat-square\u0026logo=reddit\u0026logoColor=white\" alt=\"reddit\" style=\"height: 20px;\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/coding-kitties/investing-algorithm-framework/stargazers\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/stars/coding-kitties/investing-algorithm-framework?style=flat-square\" alt=\"stars\" style=\"height: 20px;\"\u003e\n  \u003c/a\u003e\n\u003c/h4\u003e\n\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\"static/showcase.svg\" alt=\"dashboard\" style=\"max-width: 100%;\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003csub\u003e\u003cb\u003eSponsored by\u003c/b\u003e\u003c/sub\u003e\n  \u003cbr\u003e\n  \u003ca href=\"https://www.finterion.com/\" target=\"_blank\"\u003e\n    \u003cpicture\u003e\n      \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"static/sponsors/finterion-dark.png\"\u003e\n      \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"static/sponsors/finterion-light.png\"\u003e\n      \u003cimg src=\"static/sponsors/finterion-light.png\" alt=\"Finterion\" width=\"200\"\u003e\n    \u003c/picture\u003e\n  \u003c/a\u003e\n  \u003cbr\u003e\n  \u003csub\u003eMarketplace for trading bots\u003c/sub\u003e\n\u003c/p\u003e\n\n## Introduction\n\n`Investing Algorithm Framework` is a Python framework for creating, backtesting, and deploying trading strategies.\n\nMost quant frameworks stop at \"here's your backtest result.\" You get a number, maybe a chart, and then you're on your own figuring out which strategy is actually better.\n\nThis framework is built around the full loop: **create strategies → backtest them → compare them in a single report → deploy the winner.** It generates a self-contained HTML dashboard that lets you rank, filter, and visually compare every strategy you've tested — all in one view, no notebooks required.\n\n\u003cdetails open\u003e\n\u003csummary\u003e\n Features\n\u003c/summary\u003e \u003cbr\u003e\n\n- 📊 **30+ Metrics** — CAGR, Sharpe, Sortino, Calmar, VaR, CVaR, Max DD, Recovery \u0026 more\n- ⚔️ **Multi-Strategy Comparison** — Rank, filter \u0026 compare strategies in a single interactive report\n- 🪟 **Multi-Window Robustness** — Test across different time periods with window coverage analysis\n- 📈 **Equity \u0026 Drawdown Charts** — Overlay equity curves, rolling Sharpe, drawdown \u0026 return distributions\n- 🗓️ **Monthly Heatmaps \u0026 Yearly Returns** — Calendar heatmap per strategy with return/growth toggles\n- 🎯 **Return Scenario Projections** — Good, average, bad \u0026 very bad year projections from backtest data\n- 📉 **Benchmark Comparison** — Beat-rate analysis vs Buy \u0026 Hold, DCA, risk-free \u0026 custom benchmarks\n- 📄 **One-Click HTML Report** — Self-contained file, no server, dark \u0026 light theme, shareable\n- 🚀 **Build → Backtest → Deploy** — Local dev, cloud deploy (AWS / Azure), or monetize on Finterion\n\n\u003c/details\u003e\n\n## Usage\n\nTo get started, install the framework and scaffold a new project:\n\n```bash\npip install investing-algorithm-framework\n\n# Generate project structure\ninvesting-algorithm-framework init\n\n# Or for cloud deployment\ninvesting-algorithm-framework init --type aws_lambda\ninvesting-algorithm-framework init --type azure_function\n```\n\nThe [documentation](https://coding-kitties.github.io/investing-algorithm-framework/) provides guides and API reference. The [quick start](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/installation) will walk you through your first strategy.\n\n\u003cdetails\u003e\n\u003csummary\u003e\n  Creating a Strategy\n\u003c/summary\u003e \u003cbr\u003e\n\nThe framework is designed around the `TradingStrategy` class. You define **what data** your strategy needs and **when to buy or sell** — the framework handles execution, position management, and reporting.\n\n```python\nfrom investing_algorithm_framework import (\n    TradingStrategy, TimeUnit, Context, OrderSide\n)\n\nclass MyStrategy(TradingStrategy):\n    time_unit = TimeUnit.HOUR\n    interval = 2\n    symbol_pairs = [\"BTC/EUR\"]\n\n    def apply_strategy(self, context: Context, market_data):\n        for pair in self.symbol_pairs:\n            symbol = pair.split(\"/\")[0]\n            ohlcv = market_data[f\"{pair}-ohlcv-2h\"]\n            price = ohlcv[\"Close\"].iloc[-1]\n\n            if self.should_buy(ohlcv) and not context.has_position(symbol):\n                context.create_limit_order(\n                    target_symbol=symbol,\n                    order_side=OrderSide.BUY,\n                    price=price,\n                    percentage_of_portfolio=25,\n                )\n\n            if self.should_sell(ohlcv) and context.has_position(symbol):\n                context.create_limit_order(\n                    target_symbol=symbol,\n                    order_side=OrderSide.SELL,\n                    price=price,\n                    percentage_of_portfolio=100,\n                )\n```\n\nCreate as many strategy variants as you want — different parameters, different indicators, different symbols — then backtest them all and compare in a single report.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\n  Backtest Report Dashboard\n\u003c/summary\u003e \u003cbr\u003e\n\nEvery backtest produces a **single HTML file** you can open in any browser, share with teammates, or archive. No server, no dependencies, no Jupyter required.\n\n```python\nfrom investing_algorithm_framework import BacktestReport\n\n# After running backtests\nreport = BacktestReport(backtest)\nreport.show()  # Opens dashboard in your browser\n\n# Or load previously saved backtests from disk\nreport = BacktestReport.open(directory_path=\"path/to/backtests\")\nreport.show()\n\n# Compare multiple strategies side by side\nreport = BacktestReport.open(backtests=[backtest_a, backtest_b, backtest_c])\nreport.show()\n\n# Save as a self-contained HTML file\nreport.save(\"my_report.html\")\n```\n\n**Overview page** — KPI cards, key metrics ranking table, trading activity, return scenarios, equity curves, metric bar charts, monthly returns heatmap, return distributions, and window coverage matrix.\n\n**Strategy pages** — Deep dive into each strategy with per-run equity curves, rolling Sharpe, drawdown, monthly/yearly returns, and portfolio summary.\n\n\u003c/details\u003e\n\n\u003cdetails open\u003e\n\u003csummary\u003e\n Capabilities\n\u003c/summary\u003e \u003cbr\u003e\n\n| | |\n|---|---|\n| **Backtest Report Dashboard** | Self-contained HTML report with ranking tables, equity curves, metric charts, heatmaps, and strategy comparison |\n| **Event-Driven Backtesting** | Realistic, order-by-order simulation |\n| **Vectorized Backtesting** | Fast signal research and prototyping |\n| **50+ Metrics** | CAGR, Sharpe, Sortino, max drawdown, win rate, profit factor, recovery factor, volatility, and more |\n| **Live Trading** | Connect to exchanges via CCXT for real-time execution |\n| **Portfolio Management** | Position tracking, trade management, persistence |\n| **Cloud Deployment** | Deploy to AWS Lambda, Azure Functions, or run as a web service |\n| **Market Data** | OHLCV, tickers, custom data — Polars and Pandas native |\n| **Extensible** | Custom data providers, order executors, and strategy classes |\n\n\u003c/details\u003e\n\n## Plugins\n\n| Plugin | Description |\n|--------|-------------|\n| [PyIndicators](https://github.com/coding-kitties/PyIndicators) | Technical analysis indicators (EMA, RSI, MACD, etc.) |\n| [Finterion Plugin](https://github.com/Finterion/finterion-investing-algorithm-framework-plugin) | Share and monetize strategies on Finterion's marketplace |\n\n## Development\n\n```bash\ngit clone https://github.com/coding-kitties/investing-algorithm-framework.git\ncd investing-algorithm-framework\npoetry install\n\n# Run all tests\npython -m unittest discover -s tests\n```\n\n## Resources\n\n- **[Documentation](https://coding-kitties.github.io/investing-algorithm-framework/)** — Guides and API reference\n- **[Quick Start](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/installation)** — Get up and running\n- **[Discord](https://discord.gg/dQsRmGZP)** — Chat and support\n- **[Reddit](https://www.reddit.com/r/InvestingBots/)** — Strategy discussion\n\n## Contributing\n\n- [Open an issue](https://github.com/coding-kitties/investing-algorithm-framework/issues/new) for bugs or ideas\n- Read the [Contributing Guide](https://coding-kitties.github.io/investing-algorithm-framework/Contributing%20Guide/contributing)\n- PRs go against the `develop` branch\n\n## Risk Disclaimer\n\nIf you use this framework for real trading, **do not risk money you are afraid to lose.** Test thoroughly with backtesting first. Start small. We assume no responsibility for your investment results.\n\n## Acknowledgements\n\nWe want to thank all contributors to this project. A full list can be found in [AUTHORS.md](https://github.com/coding-kitties/investing-algorithm-framework/blob/master/AUTHORS.md).\n\n## Sponsor\n\n\u003ca href=\"https://www.finterion.com/\" target=\"_blank\"\u003e\u003cpicture\u003e\u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"static/sponsors/finterion-dark.png\"\u003e\u003csource media=\"(prefers-color-scheme: light)\" srcset=\"static/sponsors/finterion-light.png\"\u003e\u003cimg src=\"static/sponsors/finterion-light.png\" alt=\"Finterion\" width=\"180\"\u003e\u003c/picture\u003e\u003c/a\u003e\n\n**[Finterion](https://www.finterion.com/)** — Marketplace for trading bots. Monetize your strategies by publishing them on Finterion.\n","funding_links":[],"categories":["Python"],"sub_categories":["Trading \u0026 Backtesting","交易与回测"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcoding-kitties%2Finvesting-algorithm-framework","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcoding-kitties%2Finvesting-algorithm-framework","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcoding-kitties%2Finvesting-algorithm-framework/lists"}