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)],
])
When both min_samples
and MIN_SAMPLES
are set, min_samples
takes precedence. default value is None
.
import polars_ta
# Global settings. Priority Low
polars_ta.MIN_SAMPLES = 1
# High priority
ts_mean(CLOSE, 10, min_samples=1)
- 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
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)],
])
当min_samples
和MIN_SAMPLES
都设置时,以min_samples
为准,默认值为None
import polars_ta
# 全局设置。优先级低
polars_ta.MIN_SAMPLES = 1
# 指定函数。优先级高
ts_mean(CLOSE, 10, min_samples=1)
- 调用方法由
成员函数
换成独立函数
。输入输出使用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
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
中使用
pip install -r requirements-docs.txt
mkdocs build
文档生成在site
目录下,其中的llms-full.txt
可以作为大语言模型的知识库导入。
也可以通过以下链接导入: https://polars-ta.readthedocs.io/en/latest/llms-full.txt
由于llms-full.txt
信息不适合做提示词,所以tools/prompt.py
提供了生成更简洁算子清单的功能。
用户也可以直接使用prompt.txt
(欢迎提示词工程专家帮忙改进,做的更准确)
- 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-