polars_ta
基于polars的算子库。实现量化投研中常用的技术指标、数据处理等函数。对于不易翻译成Expr的库(如:TA-Lib)也提供了函数式调用的封装
安装
在线安装(由于项目还在Alpha阶段,发布不及时)
pip install -i https://pypi.org/simple --upgrade polars_ta # 官方源
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade polars_ta # 国内镜像源
源码安装(可二次开发)
git clone --depth=1 https://github.com/wukan1986/polars_ta.git
cd polars_ta
pip install -e .
设计原则
- 调用方法由
成员函数换成独立函数。输入输出使用Expr,避免使用Series talib的函数名与参数与原版TA-Lib完全一致- 优先实现
wq公式,它仿WorldQuant Alpha公式,与官网尽量保持一致。如果部分功能实现在此更合适将放在此处 - 其次实现
ta公式,它相当于TA-Lib的polars风格的版本。优先从wq中导入更名 - 最后实现
tdx公式,它也是优先从wq和ta中导入
指标区别
EMA指标
- EMA(CLOSE, 10),
talib.set_compatibility(0),此为默认设置,等价于EXPMEMA- 第一个有效值为
talib.SMA(CLOSE, 10)
- 第一个有效值为
- EMA(CLOSE, 10),
talib.set_compatibility(1)- 第一个有效值为
CLOSE
- 第一个有效值为
由于TA-Lib的兼容模式0在EMA计算时逻辑发生了变动,用表达式实现起来复杂、计算效率低。
所以本库只实现兼容模式1。正好国内股票软件其实也只实现了兼容模式1。可以全量数据与TA-Lib进行单元测试比较
因EMA受影响的指标有MACD, DEMA, TEMA, TRIX, T3等。
中国版SMA(X, N, M)
本质上是国外的RMA 兼容模式0,即第一个有效值为移动平均,然后就是alpha区别
SMA(X, N, M) = X.ema_mean(alpha=M/N)RMA(X, N) = X.ema_mean(alpha=1/N) = SMA(X, N, 1)EMA(x, N) = X.ema_mean(alpha=2/(N+1)) = X.ema_mean(span=N)
换算关系可参考: ewm_mean
遇到这种情况,本项目还是用RMA 兼容模式1来代替,数据误差由大到小,所以请预先提供一定长度的数据。后面一段的数据可以单元测试
受影响的的指标有ATR, RSI等
移动求和
ADX等一类的指标第一个有效值算法为SUM,而不是SMA,之后使用ema_mean(alpha=1/N)。此类暂不实现
MAX/MIN等指标
- 在
wq中,max_/min_横向算子,ts_max/ts_min时序指标 - 在
talib中,MAX/MIN时序指标,没有横向算子 - 在
ta中,由于要模仿talib,所以有MAX/MIN时序指标,也没有横向算子 - 在
tdx中,MAX/MIN横向算子,HHV/LLV时序指标
TA-Lib封装的演化
Expr.map_batches可以实现调用第三方库,如TA-Lib, bottleneck。但因为对输入与输出格式有要求,所以还需要用函数对第三方API封装一下。- 输入输出都只能是一列,如要支持多列需转换成
pl.Struct。事后pl.Struct要拆分需使用unnest - 输出必须是
pl.Series
- 输入输出都只能是一列,如要支持多列需转换成
- 参数多,代码长。开始使用
register_expr_namespace来简化代码- 实现代码helper.py
- 使用演示demo_ta1.py
- 优点:使用简单
- 不足:
成员函数调用模式不便于输入到遗传算法中进行因子挖掘 - 不足:
__getattribute__动态方法调用非常灵活,但失去了IDE智能提示
- 前缀表达式。将所有的成员函数都转换成公式
- 实现代码wrapper.py
- 使用演示demo_ta2.py
- 优点:可以输入到遗传算法
- 不足:
__getattribute__动态方法调用非常灵活,但失去了IDE智能提示
- 代码自动生成。
- 实现代码codegen_talib.py
- 生成结果__init__.py
- 使用演示demo_ta3.py
- 优点:即可以输入到遗传算法,
IDE还有智能提示
参考
Metadata
Release files for polars-ta 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| polars_ta-0.1.1.tar.gz | 30.5 kB | Without provenance | Details for polars_ta-0.1.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| polars_ta-0.1.1-py3-none-any.whl | Python 3 | none | any | Details for polars_ta-0.1.1-py3-none-any.whl |
Total release size: 68.1 kB
Release files / polars_ta-0.1.1.tar.gz
| Download URL | polars_ta-0.1.1.tar.gz |
|---|---|
| Size | 30.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
af36f0c11b159a8103b3057f6fbbe8d8c3baec882d4cea706acfa8a360f69a82
|
|
BLAKE2b-256 checksum How to use checksums |
048dafa584a349ab6b9a3264a562b3faa75da91afbd4bb4ca73c85466599a7d6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.9.18
|
Release files / polars_ta-0.1.1-py3-none-any.whl
| Download URL | polars_ta-0.1.1-py3-none-any.whl |
|---|---|
| Size | 37.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ef1f4ebb6f6113a8f6131a3051c91020020951d4d91cd237025fa12ab6f592a0
|
|
BLAKE2b-256 checksum How to use checksums |
c435b7791d2c2cba03aee2c29ea027765add487315223bb62898183e1ae1e4cc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.9.18
|
Security for polars-ta 0.1.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.