Technical Indicator Operators Rewritten in polars
.
We provide wrappers for some functions (like TA-Lib
) that are not pl.Expr
alike.
pip
pip install -i https://pypi.org/simple --upgrade polars_ta
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade polars_ta # Mirror in China
git clone --depth=1 https://github.com/wukan1986/polars_ta.git
cd polars_ta
python -m build
cd dist
pip install polars_ta-0.1.2-py3-none-any.whl
Non-official TA-Lib
wheels can be downloaded from https://github.com/cgohlke/talib-build/releases
See examples
folder.
# We need to modify the function name by prefixing `ts_` before using them in `expr_coodegen`
from polars_ta.prefix.tdx import *
# Import functions from `wq`
from polars_ta.prefix.wq import *
# Example
df = df.with_columns([
# Load from `wq`
*[ts_returns(CLOSE, i).alias(f'ROCP_{i:03d}') for i in (1, 3, 5, 10, 20, 60, 120)],
*[ts_mean(CLOSE, i).alias(f'SMA_{i:03d}') for i in (5, 10, 20, 60, 120)],
*[ts_std_dev(CLOSE, i).alias(f'STD_{i:03d}') for i in (5, 10, 20, 60, 120)],
*[ts_max(HIGH, i).alias(f'HHV_{i:03d}') for i in (5, 10, 20, 60, 120)],
*[ts_min(LOW, i).alias(f'LLV_{i:03d}') for i in (5, 10, 20, 60, 120)],
# Load from `tdx`
*[ts_RSI(CLOSE, i).alias(f'RSI_{i:03d}') for i in (6, 12, 24)],
])
Expr
instead of Series
to avoid using Series
in the calculation. Functions are no longer methods of class.wq
first. It mimics WorldQuant Alpha
and strives to be consistent with them.ta
otherwise. It is a polars
-style version of TA-Lib
. It tries to reuse functions from wq
.tdx
last. It also tries to import functions from wq
and ta
.TA-Lib
in talib
.wq
, ta
, tdx
, talib
in order. The higher the priority, the closer the implementation is to Expr
.See compare
See nan_to_null
Expr.map_batches
can be used to call third-party libraries, such as TA-Lib, bottleneck
. But because of the input and output format requirements, you need to wrap the third-party API with a function.
pl.Struct
. After that, you need to use unnest
to split pl.Struct
.pl.Series
register_expr_namespace
to simplify the code
member function call mode
is not convenient for inputting into genetic algorithms for factor mining__getattribute__
dynamic method call is very flexible, but loses IDE
support.__getattribute__
dynamic method call is very flexible, but loses IDE
support.IDE
supportgit clone --depth=1 https://github.com/wukan1986/polars_ta.git
cd polars_ta
pip install -e .
Notice:
If you have added some functions in ta
or tdx
, please run prefix_ta.py
or prefix_tdx.py
inside the tools
folder to generate the corrected Python script (with the prefix added).
This is required to use in expr_codegen
.
基于polars
的算子库。实现量化投研中常用的技术指标、数据处理等函数。对于不易翻译成Expr
的库(如:TA-Lib
)也提供了函数式调用的封装
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
python -m build
cd dist
pip install polars_ta-0.1.2-py3-none-any.whl
Windows用户不会安装可从https://github.com/cgohlke/talib-build/releases
下载对应版本whl文件
参考examples
目录即可,例如:
# 如果需要在`expr_codegen`中使用,需要有`ts_`等前权,这里导入提供了前缀
from polars_ta.prefix.tdx import *
# 导入wq公式
from polars_ta.prefix.wq import *
# 演示生成大量指标
df = df.with_columns([
# 从wq中导入指标
*[ts_returns(CLOSE, i).alias(f'ROCP_{i:03d}') for i in (1, 3, 5, 10, 20, 60, 120)],
*[ts_mean(CLOSE, i).alias(f'SMA_{i:03d}') for i in (5, 10, 20, 60, 120)],
*[ts_std_dev(CLOSE, i).alias(f'STD_{i:03d}') for i in (5, 10, 20, 60, 120)],
*[ts_max(HIGH, i).alias(f'HHV_{i:03d}') for i in (5, 10, 20, 60, 120)],
*[ts_min(LOW, i).alias(f'LLV_{i:03d}') for i in (5, 10, 20, 60, 120)],
# 从tdx中导入指标
*[ts_RSI(CLOSE, i).alias(f'RSI_{i:03d}') for i in (6, 12, 24)],
])
成员函数
换成独立函数
。输入输出使用Expr
,避免使用Series
wq
公式,它仿WorldQuant Alpha
公式,与官网尽量保持一致。如果部分功能实现在此更合适将放在此处ta
公式,它相当于TA-Lib
的polars
风格的版本。优先从wq
中导入更名tdx
公式,它也是优先从wq
和ta
中导入talib
的函数名与参数与原版TA-Lib
完全一致wq
、ta
、tdx
、talib
。因为优先级越高,实现方案越接近于Expr
请参考compare
请参考nan_to_null
Expr.map_batches
可以实现调用第三方库,如TA-Lib, bottleneck
。但因为对输入与输出格式有要求,所以还需要用函数对第三方API封装一下。
pl.Struct
。事后pl.Struct
要拆分需使用unnest
pl.Series
register_expr_namespace
来简化代码
成员函数调用模式
不便于输入到遗传算法中进行因子挖掘__getattribute__
动态方法调用非常灵活,但失去了IDE
智能提示__getattribute__
动态方法调用非常灵活,但失去了IDE
智能提示IDE
还有智能提示git clone --depth=1 https://github.com/wukan1986/polars_ta.git
cd polars_ta
pip install -e .
注意:如果你在ta
或tdx
中添加了新的函数,请再运行tools
下的prefix_ta.py
或prefix_tdx.py
,用于生成对应的前缀文件。前缀文件方便在expr_codegen
中使用