polars expressions
Project description
polars_ta
基于polars
的算子库。实现量化投研中常用的技术指标、数据处理等函数。对于不易翻译成Expr
的库(如:TA-Lib
)也提供了函数式调用的封装
设计原则
- 调用方法由
成员函数
换成独立函数
- 输入数据使用
Expr
,少用Series
- 函数命名优先向
TA-Lib
靠拢,然后向WorldQuant
靠拢,最后才仿国内通达信等表达式 - 计算速度优先,标准化优先。与其它系统结果不一致时需示明区别
指标区别
EMA指标
- EMA(CLOSE, 10),
talib.set_compatibility(0)
,此为默认设置- 第一个有效值为
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)
。此类暂不实现
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
还有智能提示
参考
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
polars_ta-0.0.1.tar.gz
(5.6 kB
view hashes)
Built Distribution
Close
Hashes for polars_ta-0.0.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ef597bfa61299e5650584bdd7fc7a23c14fe75e999210c4edfb98bb3834d6cd6 |
|
MD5 | eb85a27f01f88d945c13863d8e6575a4 |
|
BLAKE2b-256 | b0411cf32663edf8b09d9f7c8f786c990f77ae89caa1b59eeb471cfd29afc3cf |