Technical Indicator Operators Rewritten in polars
.
We provide wrappers for some functions (like TA-Lib
) that are not pl.Expr
alike.
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)],
])
- We use
Expr
instead ofSeries
to avoid usingSeries
in the calculation. Functions are no longer methods of class. - Use
wq
first. It mimicsWorldQuant Alpha
and strives to be consistent with them. - Use
ta
otherwise. It is apolars
-style version ofTA-Lib
. It tries to reuse functions fromwq
. - Use
tdx
last. It also tries to import functions fromwq
andta
. - We keep the same signature and parameters as the original
TA-Lib
intalib
. - If there is a naming conflict, we suggest calling
wq
,ta
,tdx
,talib
in order. The higher the priority, the closer the implementation is toExpr
.
See compare
See nan_to_null
Expr.map_batches
can be used to call third-party libraries, such asTA-Lib, bottleneck
. But because of the input and output format requirements, you need to wrap the third-party API with a function.
- Both input and output can only be one column. If you want to support multiple columns, you need to convert them to
pl.Struct
. After that, you need to useunnest
to splitpl.Struct
. - The output must be
pl.Series
- Start to use
register_expr_namespace
to simplify the code
- Implementation helper.py
- Usage demo demo_ta1.py
- Pros: Easy to use
- Cons:
- The
member function call mode
is not convenient for inputting into genetic algorithms for factor mining __getattribute__
dynamic method call is very flexible, but losesIDE
support.
- The
- Prefix expression. Convert all member functions into formulas
- Implementation wrapper.py
- Usage demo demo_ta2.py
- Pros: Can be input into our implementation of genetic algorithms
- Cons:
__getattribute__
dynamic method call is very flexible, but losesIDE
support.
- Code generation.
- Implementation codegen_talib.py
- Generated result will be at __init__.py
- Usage demo demo_ta3.py
- Pros:
- Can be input into our implementation of genetic algorithms
IDE
support
git 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
.
- https://github.com/pola-rs/polars
- https://github.com/TA-Lib/ta-lib
- https://github.com/twopirllc/pandas-ta
- https://github.com/bukosabino/ta
- https://github.com/peerchemist/finta
- https://github.com/wukan1986/ta_cn
- https://support.worldquantbrain.com/hc/en-us/community/posts/20278408956439-从价量看技术指标总结-Technical-Indicator-
- https://platform.worldquantbrain.com/learn/operators/operators
基于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
来简化代码- 实现代码helper.py
- 使用演示demo_ta1.py
- 优点:使用简单
- 不足:
成员函数调用模式
不便于输入到遗传算法中进行因子挖掘 - 不足:
__getattribute__
动态方法调用非常灵活,但失去了IDE
智能提示
- 前缀表达式。将所有的成员函数都转换成公式
- 实现代码wrapper.py
- 使用演示demo_ta2.py
- 优点:可以输入到遗传算法
- 不足:
__getattribute__
动态方法调用非常灵活,但失去了IDE
智能提示
- 代码自动生成。
- 实现代码codegen_talib.py
- 生成结果__init__.py
- 使用演示demo_ta3.py
- 优点:即可以输入到遗传算法,
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
中使用
- https://github.com/pola-rs/polars
- https://github.com/TA-Lib/ta-lib
- https://github.com/twopirllc/pandas-ta
- https://github.com/bukosabino/ta
- https://github.com/peerchemist/finta
- https://github.com/wukan1986/ta_cn
- https://support.worldquantbrain.com/hc/en-us/community/posts/20278408956439-从价量看技术指标总结-Technical-Indicator-