{"id":21438121,"url":"https://github.com/wukan1986/alphainspect","last_synced_at":"2025-04-13T04:09:21.113Z","repository":{"id":217869179,"uuid":"744773553","full_name":"wukan1986/AlphaInspect","owner":"wukan1986","description":"factor performance visualization","archived":false,"fork":false,"pushed_at":"2024-12-13T14:34:59.000Z","size":2739,"stargazers_count":30,"open_issues_count":1,"forks_count":9,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-04-13T04:09:06.268Z","etag":null,"topics":["alpha","factor","quant"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wukan1986.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":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-01-18T01:15:06.000Z","updated_at":"2025-04-03T13:05:18.000Z","dependencies_parsed_at":"2024-01-18T15:29:30.597Z","dependency_job_id":"6f06f678-ed18-41c4-b210-9d22d8b2e724","html_url":"https://github.com/wukan1986/AlphaInspect","commit_stats":null,"previous_names":["wukan1986/alphainspect"],"tags_count":17,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wukan1986%2FAlphaInspect","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wukan1986%2FAlphaInspect/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wukan1986%2FAlphaInspect/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wukan1986%2FAlphaInspect/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wukan1986","download_url":"https://codeload.github.com/wukan1986/AlphaInspect/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248661705,"owners_count":21141450,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["alpha","factor","quant"],"created_at":"2024-11-23T00:33:09.990Z","updated_at":"2025-04-13T04:09:21.061Z","avatar_url":"https://github.com/wukan1986.png","language":"Python","readme":"# AlphaInspect\n\n仿`alphalens`的单因子分析工具\n\n## 安装\n\n```commandline\npip install -i https://pypi.org/simple --upgrade alphainspect  # 官方源\npip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade alphainspect  # 国内镜像源\n```\n\n## 使用\n\n1. 准备数据。运行`data/prepare_data.py`\n    1. date, asset。必需的两个字段\n    2. factor因子值。放在因子发生时刻\n    3. forward return远期收益率。计算收益率后需要回移到开始位置。为何是`shift(-n)收益率`，而不是`shift(n)因子`呢？\n        1. 多期收期率。如果移动因子，会导致一个因子就要移动多次\n        2. 因子一般成百上千，全移动要的工作量非常大，而收益率则少很多\n    4. 推荐大家使用`expr_codegen`和`polars_ta`等项目\n2. 运行`examples/factor_analysis.py`示例单因子分析\n3. 运行`examples/reports_html.py`示例多进程并行输出HTML网页报表\n4. 运行`examples/reports_notebook.py`示例多进程并行转Notebook报表\n5. 运行`examples/events_study.py`示例事件分析\n\n## 部分图示\n\n![2x2](docs/img/2x2.png)\n![3x2](docs/img/3x2.png)\n![ic](docs/img/ic.png)\n![returns](docs/img/returns.png)\n![cum_returns](docs/img/cum_returns.png)\n![spread](docs/img/spread.png)\n![turnover](docs/img/turnover.png)\n![events](docs/img/events.png)\n\n## 累计收益的计算方法\n\n参考 [cum_returns.md](cum_returns.md)\n\n## `alphainspect`与`alphalens`的不同\n\n1. 不自动计算`forward_returns`。\n    1. `alphalens`设`periods=(1, 5, 10)`，然后内部计算持有1、5、10期数的收益率\n    2. `alphainspect`由用户外部生成，用户可以比较同因子，不同交易方式产生的差异。例如：\n        - `RETURN_OC_1`: T+1开盘入场，T+1收盘出场\n        - `RETURN_CC_1`: T+0收盘入场，T+1收盘出场\n        - `RETURN_OO_1`: T+1开盘入场，T+2开盘出场\n        - `RETURN_OO_5`: T+1开盘入场，T+6开盘出场\n2. 不做去极值、标准化、行业中性化等操作\n    1. `alphalens`的各参数要弄懂还是很麻烦的，初学者如绩效达不到要求就得深入研究源代码找原因\n    2. `alphainspect`用户在外可以一次性全计算好，如`F1_ORG, F1_ZS, F1_NEUT`，然后在分别传不同因子进行比较即可\n3. 资金分配只用等权\n    1. `alphalens`有因子加权、多空等设置\n    2. `alphainspect`只提供等权一种计算方法，实现简单\n4. 收益率计算方法不同\n    1. `alphalens`多期简单收益率几何平均成1期，然后+1累乘\n    2. ~~`alphainspect`由用户提供1期简单收益率，然后根据要求持有或调仓，得到新的权益，循环迭代下去。更精确~~\n    3. `alphainspect`由用户提供每期收益率(也可以使用多期收益率的几何平均),然后累加。（分层计算速度提高1~1.5倍）\n\n## `alphainspect`与`alphalens`的相同\n\n1. 数据组织方式相同。都是长表，都是因子不移动，收益率计算，然后后移到与因子产生时间对齐\n2. 不考虑滑点和手续费。单因子是用来合成多因子的，因手续费和滑点而错过部分单因子就可惜了，应当在因子合成后的回测阶段才考虑手续费\n3. 收益计算不求精确，只为能正确评价因子绩效\n\n## 二次开发\n\n```commandline\ngit --clone https://github.com/wukan1986/alphainspect.git\ncd alphainspect\npip install -e .\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwukan1986%2Falphainspect","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwukan1986%2Falphainspect","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwukan1986%2Falphainspect/lists"}