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 | |
|---|---|---|---|
| polars_ta-0.1.1.tar.gz | 30.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| polars_ta-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
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
|