跳转到主要内容

talipp - 增量技术分析库

项目描述

talipp - 增量技术分析库

python PyPy unit tests


!!! 新文档页面可用 !!!


talipp (或 tali++) 是一个Python库,用于实现技术分析中的金融指标。该库的独特之处在于其增量计算,非常适合实时应用或一般具有迭代输入的应用。

与现有的技术分析库不同,这些库通常必须处理整个输入向量才能计算指标的新值,而talipp由于其增量架构,仅基于增量输入数据计算新指标值。这意味着,与其他库所需的O(n)相比,它需要O(1)时间来产生新值。

支持的增量操作包括

  • 向输入追加新值
  • 更新最后一个输入值
  • 删除任意数量的输入值

除了已经提到的delta输入操作的优越时间复杂度之外,talipp的增量方法立即提供了其他有趣的功能,例如指标链或由其他指标组合而成的新指标。请参阅示例部分以获取灵感。

《talipp》的增量特性使其在频繁进行CUD操作的领域表现卓越,但它也可以像任何其他现有库一样用于图表制作、回测等。

最后但同样重要的是,《talipp》是一个社区项目,因此欢迎任何改善它的建议。我们鼓励您提出提案。


最近版本的新特性

  • Rogers-Satchell波动性指标
  • 自动采样输入值
  • v2.0.0 范围

要查看变更历史,请参阅变更日志


增量指标列表

《talipp》目前提供以下指标集。如果您喜欢的指标缺失,请通过GitHub Issues创建工单,它有很大可能被包含在未来的版本中。

  • 累积/分布(ADL)
  • Aroon
  • 平均方向指数(ADX)
  • 平均真实范围(ATR)
  • 神奇振荡器(AO)
  • 力量平衡(BOP)
  • 布林带(BB)
  • 查金振荡器
  • 尚德Kroll停损
  • 震荡指数(CHOP)
  • 科波克曲线
  • 商品通道指数(CCI)
  • 唐奇安通道(DC)
  • 去趋势价格振荡器(DPO)
  • 移动平均(ALMA、DEMA、EMA、HMA、KAMA、SMA、SMMA、T3、TEMA、VWMA、WMA、ZLEMA)
  • 力量指数
  • IBS
  • Ichimoku云图
  • 凯尔特纳通道(KC)
  • 克林格勒成交量振荡器(KVO)
  • 稳赢指标(KST)
  • 质量指数
  • 麦金利动态
  • 平均偏差
  • 移动平均(ALMA、DEMA、EMA、HMA、KAMA、SMA、SMMA、T3、TEMA、VWMA、WMA、ZLEMA)
  • 移动平均收敛发散(MACD)
  • 平衡量(OBV),平滑平衡量(SOBV)
  • 抛物线SAR
  • 支撑/阻力点
  • 变化率(ROC)
  • 相对强度指数(RSI)
  • 沙夫趋势周期(STC)
  • SFX TOR
  • 标准差
  • 随机振荡器
  • 随机RSI
  • 超级趋势
  • TRIX
  • TTM 挤压
  • 真实力量指数(TSI)
  • 终极振荡器(UO)
  • 涡流指标(VTX)
  • 成交量加权平均价格(VWAP)
  • ZigZag

安装

pip install talipp

如果您想从仓库安装最新版本,请使用以下命令

pip install git+https://github.com/nardew/talipp.git@main

示例

请参阅examples文件夹以了解库中包含的每个指标的使用方法。要了解API的基本外观和感觉,请参阅以下内容。

from talipp.indicator_util import composite_to_lists
from talipp.indicators import EMA, SMA, Stoch
from talipp.ohlcv import OHLCVFactory

# EMA indicator ([float] -> [float])
ema = EMA(period = 3, input_values = [1, 3, 5, 7, 9, 2, 4, 6, 8, 10])

# treat indicators as any other list
print(f'EMA(3): {ema}') # [3.0, 5.0, 7.0, 4.5, 4.25, 5.125, 6.5625, 8.28125]
print(f'Last EMA value: {ema[-1]}') # 8.28125

# append a new input value incrementally
ema.add(11)
print(f'EMA after adding a new value:      {ema}') # [3.0, 5.0, 7.0, 4.5, 4.25, 5.125, 6.5625, 8.28125, 9.640625]

# change the last added value
ema.update(15)
print(f'EMA after updating the last value: {ema}') # [3.0, 5.0, 7.0, 4.5, 4.25, 5.125, 6.5625, 8.28125, 11.640625]

# change the last added value again
ema.update(18)
print(f'EMA after updating the last value: {ema}') # [3.0, 5.0, 7.0, 4.5, 4.25, 5.125, 6.5625, 8.28125, 13.140625]

# remove the last added value
ema.remove()
print(f'EMA after removing the last value: {ema}') # [3.0, 5.0, 7.0, 4.5, 4.25, 5.125, 6.5625, 8.28125]

# purge the oldest input value
ema.purge_oldest(1)
print(f'EMA after purging the oldest value: {ema}') # [5.0, 7.0, 4.5, 4.25, 5.125, 6.5625, 8.28125]

# STOCH indicator ([OHLCV] -> [composite])
stoch = Stoch(5, 3, OHLCVFactory.from_dict({
    'high':     [5, 10, 15, 20, 25, 30, 35],
    'low':      [1, 4, 7, 10, 13, 16, 19],
    'close':    [3, 9, 8, 19, 18, 17, 19]
}))

# print result as a list of composite values for 'k' and 'd' output parameters
print(f'Stoch(5, 3) composite result: {stoch}') # [StochVal(k=70.83333333333333, d=None), StochVal(k=50.0, d=None), StochVal(k=42.857142857142854, d=54.563492063492056)]

# print result as lists per output parameters
print(f'Stoch(5, 3) decomposed result: {composite_to_lists(stoch)}') # {'k': [70.83333333333333, 50.0, 42.857142857142854], 'd': [None, None, 54.563492063492056]} 

# Indicator chaining
sma1 = SMA(3)
sma2 = SMA(3, input_indicator = sma1)
sma3 = SMA(3, input_indicator = sma2)

print(f"Chain three moving averages:")
sma1.add([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print(f"SMA1: {sma1}") # [0, 0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0]
print(f"SMA2: {sma2}") # [0, 0, 0,   0,   3.0, 4.0, 5.0, 6.0, 7.0, 8.0]
print(f"SMA3: {sma3}") # [0, 0, 0,   0,   0,   0,   4.0, 5.0, 6.0, 7.0]

print(f"Purge oldest 3 values:")
sma1.purge_oldest(3)
print(f"SMA1: {sma1}") # [5.0, 6.0, 7.0, 8.0, 9.0]
print(f"SMA2: {sma2}") # [6.0, 7.0, 8.0]
print(f"SMA3: {sma3}") # [7.0]

性能

为了说明《talipp》的性能缩放,我们与行业标准库talib及其Python包装ta-lib一起进行了几项测试。比较的结果如下

  • 对于批量处理(即一次性计算指标,不添加进一步delta值),talib是明显赢家。这并不令人惊讶,因为它是用C实现的,并且针对一次性向量计算进行了优化。《talipp》的增量(即非向量)计算以及指标链(内部实现输出监听器)等功能不可避免地会有代价。但是,talipp对50k个值的SMA进行增量计算仍需约200ms,这对于许多应用来说完全是可以接受的
  • 在增量计算方面,《talipp》明显领先。这一点是预料之中的,因为《talipp》的CUD操作的时间复杂度为O(1),而talib的时间复杂度为O(n)。对于50k个输入,差异达到约200ms对约6800ms。
  • 从图表中可以看出,当涉及到增量操作时,与talib的二次曲线相比,talipp与输入大小呈线性关系。这源于《talipp》的delta操作时间复杂度为O(1),而talib的时间复杂度为O(n)

SMA(20) TEMA(20) StochRSI(14,3,3)

联系

  • 要报告问题、错误、更正或提出新功能,请首选使用GitHub问题。
  • 对于需要更个性化方法的主题,请随时发送电子邮件至 。请注意,一般问题将通过此渠道不予回答。

支持

如果您喜欢这个库,并且想支持其进一步的开发、增强和错误修复,那么如果您

  • 提交错误、建议、拉取请求等,将非常有帮助,也备受赞赏
  • 传播信息
  • 捐赠任意小费
    • BTC: 3GJPT6H6WeuTWR2KwDSEN5qyJq95LEErzf
    • ETH: 0xC7d8673Ee1B01f6F10e40aA416a1b0A746eaBe68
    • Binance Smart Chain tokens: 0xe37FaB52ed4c1C9a3d80896f2001Cb3284a1b619
    • XMR: 87vdCaWFN2YJEk3HKVJNaPBFsuwZTJocRfpGJ747dPQrFcrs6SQTmA3XDGyWUPoALuNnXezEbJXkbY8Y4VSxG4ReEFqxy5m

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

talipp-2.4.0.tar.gz (42.9 kB 查看哈希)

上传时间

构建分布

talipp-2.4.0-py3-none-any.whl (62.1 kB 查看哈希)

上传时间 Python 3

由以下赞助商支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面