ta-formula


Nameta-formula JSON
Version 1.0 PyPI version JSON
download
home_pageNone
Summarytalib extension for formula computation
upload_time2024-08-24 10:45:33
maintainerNone
docs_urlNone
authorNone
requires_python>=3.9
licenseMIT License Copyright (c) 2024 QQ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
keywords formula quant ta ta-lib talib ta-lib technical-analysis indicators technical-indicators quantum-computing
VCS
bugtrack_url
requirements numpy Cython
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # ta_formula

## 使用

参考案例 [examples.ipynb](https://github.com/sric0880/ta_formula/blob/main/examples.ipynb)

所有移动平均算法参考 [matype.md](https://github.com/sric0880/ta_formula/blob/main/matype.md)

## 依赖库

- [ta-lib底层lib库](https://anaconda.org/conda-forge/libta-lib/files)==0.4.0

## 特性

- 自定义指标,在[TA-Lib(0.4.29)](https://pypi.org/project/TA-Lib/)库([Github](https://github.com/TA-Lib/ta-lib-python))的基础上扩展自己的指标,完全在Cython中实现。
- 自定义区间指标。
- 自定义策略(同样纯Cython实现),根据参数和输入数据即时编译成动态链接库,实现微秒级信号发现
  - 普通台式机CPU i5-10400 @2.9GHz 大概一个指标计算在0.5~5微秒(timeit结果,实际运行考虑到缓存缺失,会慢很多,可以尝试多进程方案)
  - 支持传入不同市场多个标的物
  - 支持传参
  - 支持自定义返回字段
  - 一次计算中,相同指标计算结果缓存,不重复计算
- 数据流入、信号流出框架,自定义数据流,数据流支持asyncio,多线程,相同策略相同数据去重,避免重复计算。

## 策略文件示例

```py
cimport ta_formula._indicators as ta
cimport numpy as np

# define datas intervals
datas = [['1m']]

# define constant params
kdj_minvalue = 10
kdj_maxvalue = 90

# define datas params
CLOSE = datas[0][0]['close']
HIGH = datas[0][0]['high']
LOW = datas[0][0]['low']

# define indicators
ma5 = ta.SMA(CLOSE, 5)
ma250 = ta.SMA(CLOSE, 250)
skd = ta.stream_SLOW_KD(HIGH, LOW, CLOSE, 69, 3)

# define signals
ret = {
    'open_long_condition1': ta.kup(ma250,-1) and ta.crossdown(ma5, ma250, -1),
    'open_short_condition1': ta.kdown(ma250,-1) and ta.crossup(ma5, ma250, -1),
    'open_long_condition2': skd[0] <= kdj_minvalue and CLOSE[-1] > ma250[-1],
    'open_short_condition2': skd[0] >= kdj_maxvalue and CLOSE[-1] < ma250[-1],
    'close_long': skd[0] >= kdj_maxvalue,
    'close_short': skd[0] <= kdj_minvalue,
    'last_close_price': CLOSE[-1],
    'last_ma250': ma250[-1],
}
```

见 [test_strategy.pyx](https://github.com/sric0880/ta_formula/blob/main/test_strategy.pyx)

返回示例:

```json
{
  "symbols": [["shanghai001", "ag2412"]],
  "data_rec_time": 1717486288.8170903,
  "calc_time": 269900,
  "open_long_condition1": false,
  "open_short_condition1": false,
  "open_long_condition2": false,
  "open_short_condition2": false,
  "close_long": false,
  "close_short": false,
  "last_close_price": 7952.0,
  "last_ma250": 7922.2
}
```

其中`symbols`, `data_rec_time`、`calc_time`为附加返回字段,分别表示:

- symbols返回当前策略计算用的金融标的组合
- 接收到数据的时间戳,单位秒,float,系统时间可能有误差
- 策略从接收数据,到计算完成,发送信号经过的时间,单位纳秒,int

通过比较三者的时间差,可以大致知道计算延迟和网络延迟

其他字段为自定义返回字段

## TODO

1. 所有`stream_XXX`指标函数,需要显式注明返回类型,比如int, double,或者tuple类型,比如(double, double)。如果不标明,返回的不是c类型,而是python类型,比如int返回的是PyInt。目前只有部分函数修改了。Cython不支持python对象的tuple,比如(np.ndarray, np.ndarray)。
2. ZIG、PERIOD_MAX_BIAS 没有stream和recent函数
3. 多进程数据后台支持

## 指标

一个指标有三个版本,比如MACD:

1. `MACD`: 从头到尾计算所有指标,返回ndarray。
2. `stream_MACD`: 只计算最后一天的指标,返回double,或者tuple(double,double)等。
3. `recent_MACD`: 计算最近`calc_length`天的指标,返回ndarray,当`calc_length==1`时,效果和`stream_MACD`一样。

## 已扩展的自定义指标

指标含义及用法见代码`_indicators.pyx`注释

```c
// 一般指标
SMA, BIAS, MACD, STOCH, KD, KDJ, SLOW_KD AMPLITUDE, ZIG,

// 区间指标
PERIOD_MAX_BIAS
```

## 扩展TA-Lib

`_ta_lib_xxx`文件是从TA-Lib源码复制过来的。安装完TA-Lib之后,不会安装对应的pxd和pxi文件,所以这里的pxd和pxi直接从TA-Lib源码复制过来。

复制过来的方法,是`def`定义的,全部改成了`cdef`,只允许c内部调用。如果要用python测试,可以封装成`strategy`。

如果要改写TA-Lib的方法,`_func.pxi`源文件、或`_stream.pxi`源文件已经复制到对应`_ta_lib_xxx.pxi`,直接在里面改写就行。但是要添加好注释。

添加`recent_xxx`方法:

从TA-Lib`_stream.pxi`源文件直接复制到`_indicators.pyx`改写,并改名为`recent_xxx`

## stream_xxx 和 recent_xxx 函数计算精度的问题

使用任何talib库中的stream函数时,都要测试他和非stream函数的返回是否一致

talib计算stream指标时,只计算最后一天的值,但是会往前查看历史数据,一般长度为timeperiod+不稳定期限。

比如EMA(3), 3天前的数据也会影响最后结果,不稳定期限越长,最后结果越精确。

talib所有指标默认不稳定期限为0,要满足自己的精度要求,需要自己设置不稳定期限。

不同的指标,不同的timeperiod,需要设置不同的不确定长度,才能达到相同的精度。

设置不确定长度的方法为:__ta_set_unstable_period(非线程安全)

talib计算精度受历史数据长度影响的指标有:

```c
ADX, ADXR, ATR, CMO, DX, EMA, HT_DCPERIOD, HT_DCPHASE, HT_PHASOR,
HT_SINE, HT_TRENDLINE, HT_TRENDMODE, KAMA, MAMA, MFI, MINUS_DI,
MINUS_DM, NATR, PLUS_DI, PLUS_DM, RSI, STOCHRSI, T3
```

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "ta-formula",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": null,
    "keywords": "formula, quant, ta, TA-Lib, talib, ta-lib, technical-analysis, indicators, technical-indicators, quantum-computing",
    "author": null,
    "author_email": "sric0880 <justgotpaid88@qq.com>",
    "download_url": "https://files.pythonhosted.org/packages/e1/e4/9439e1e664f393151890d6a9cd4b4e14839c351c03fbe8e6f6b2fd98f3c3/ta_formula-1.0.tar.gz",
    "platform": null,
    "description": "# ta_formula\n\n## \u4f7f\u7528\n\n\u53c2\u8003\u6848\u4f8b [examples.ipynb](https://github.com/sric0880/ta_formula/blob/main/examples.ipynb)\n\n\u6240\u6709\u79fb\u52a8\u5e73\u5747\u7b97\u6cd5\u53c2\u8003 [matype.md](https://github.com/sric0880/ta_formula/blob/main/matype.md)\n\n## \u4f9d\u8d56\u5e93\n\n- [ta-lib\u5e95\u5c42lib\u5e93](https://anaconda.org/conda-forge/libta-lib/files)==0.4.0\n\n## \u7279\u6027\n\n- \u81ea\u5b9a\u4e49\u6307\u6807\uff0c\u5728[TA-Lib(0.4.29)](https://pypi.org/project/TA-Lib/)\u5e93([Github](https://github.com/TA-Lib/ta-lib-python))\u7684\u57fa\u7840\u4e0a\u6269\u5c55\u81ea\u5df1\u7684\u6307\u6807\uff0c\u5b8c\u5168\u5728Cython\u4e2d\u5b9e\u73b0\u3002\n- \u81ea\u5b9a\u4e49\u533a\u95f4\u6307\u6807\u3002\n- \u81ea\u5b9a\u4e49\u7b56\u7565\uff08\u540c\u6837\u7eafCython\u5b9e\u73b0\uff09\uff0c\u6839\u636e\u53c2\u6570\u548c\u8f93\u5165\u6570\u636e\u5373\u65f6\u7f16\u8bd1\u6210\u52a8\u6001\u94fe\u63a5\u5e93\uff0c\u5b9e\u73b0\u5fae\u79d2\u7ea7\u4fe1\u53f7\u53d1\u73b0\n  - \u666e\u901a\u53f0\u5f0f\u673aCPU i5-10400 @2.9GHz \u5927\u6982\u4e00\u4e2a\u6307\u6807\u8ba1\u7b97\u57280.5~5\u5fae\u79d2\uff08timeit\u7ed3\u679c\uff0c\u5b9e\u9645\u8fd0\u884c\u8003\u8651\u5230\u7f13\u5b58\u7f3a\u5931\uff0c\u4f1a\u6162\u5f88\u591a\uff0c\u53ef\u4ee5\u5c1d\u8bd5\u591a\u8fdb\u7a0b\u65b9\u6848\uff09\n  - \u652f\u6301\u4f20\u5165\u4e0d\u540c\u5e02\u573a\u591a\u4e2a\u6807\u7684\u7269\n  - \u652f\u6301\u4f20\u53c2\n  - \u652f\u6301\u81ea\u5b9a\u4e49\u8fd4\u56de\u5b57\u6bb5\n  - \u4e00\u6b21\u8ba1\u7b97\u4e2d\uff0c\u76f8\u540c\u6307\u6807\u8ba1\u7b97\u7ed3\u679c\u7f13\u5b58\uff0c\u4e0d\u91cd\u590d\u8ba1\u7b97\n- \u6570\u636e\u6d41\u5165\u3001\u4fe1\u53f7\u6d41\u51fa\u6846\u67b6\uff0c\u81ea\u5b9a\u4e49\u6570\u636e\u6d41\uff0c\u6570\u636e\u6d41\u652f\u6301asyncio\uff0c\u591a\u7ebf\u7a0b\uff0c\u76f8\u540c\u7b56\u7565\u76f8\u540c\u6570\u636e\u53bb\u91cd\uff0c\u907f\u514d\u91cd\u590d\u8ba1\u7b97\u3002\n\n## \u7b56\u7565\u6587\u4ef6\u793a\u4f8b\n\n```py\ncimport ta_formula._indicators as ta\ncimport numpy as np\n\n# define datas intervals\ndatas = [['1m']]\n\n# define constant params\nkdj_minvalue = 10\nkdj_maxvalue = 90\n\n# define datas params\nCLOSE = datas[0][0]['close']\nHIGH = datas[0][0]['high']\nLOW = datas[0][0]['low']\n\n# define indicators\nma5 = ta.SMA(CLOSE, 5)\nma250 = ta.SMA(CLOSE, 250)\nskd = ta.stream_SLOW_KD(HIGH, LOW, CLOSE, 69, 3)\n\n# define signals\nret = {\n    'open_long_condition1': ta.kup(ma250,-1) and ta.crossdown(ma5, ma250, -1),\n    'open_short_condition1': ta.kdown(ma250,-1) and ta.crossup(ma5, ma250, -1),\n    'open_long_condition2': skd[0] <= kdj_minvalue and CLOSE[-1] > ma250[-1],\n    'open_short_condition2': skd[0] >= kdj_maxvalue and CLOSE[-1] < ma250[-1],\n    'close_long': skd[0] >= kdj_maxvalue,\n    'close_short': skd[0] <= kdj_minvalue,\n    'last_close_price': CLOSE[-1],\n    'last_ma250': ma250[-1],\n}\n```\n\n\u89c1 [test_strategy.pyx](https://github.com/sric0880/ta_formula/blob/main/test_strategy.pyx)\n\n\u8fd4\u56de\u793a\u4f8b\uff1a\n\n```json\n{\n  \"symbols\": [[\"shanghai001\", \"ag2412\"]],\n  \"data_rec_time\": 1717486288.8170903,\n  \"calc_time\": 269900,\n  \"open_long_condition1\": false,\n  \"open_short_condition1\": false,\n  \"open_long_condition2\": false,\n  \"open_short_condition2\": false,\n  \"close_long\": false,\n  \"close_short\": false,\n  \"last_close_price\": 7952.0,\n  \"last_ma250\": 7922.2\n}\n```\n\n\u5176\u4e2d`symbols`, `data_rec_time`\u3001`calc_time`\u4e3a\u9644\u52a0\u8fd4\u56de\u5b57\u6bb5\uff0c\u5206\u522b\u8868\u793a:\n\n- symbols\u8fd4\u56de\u5f53\u524d\u7b56\u7565\u8ba1\u7b97\u7528\u7684\u91d1\u878d\u6807\u7684\u7ec4\u5408\n- \u63a5\u6536\u5230\u6570\u636e\u7684\u65f6\u95f4\u6233\uff0c\u5355\u4f4d\u79d2\uff0cfloat\uff0c\u7cfb\u7edf\u65f6\u95f4\u53ef\u80fd\u6709\u8bef\u5dee\n- \u7b56\u7565\u4ece\u63a5\u6536\u6570\u636e\uff0c\u5230\u8ba1\u7b97\u5b8c\u6210\uff0c\u53d1\u9001\u4fe1\u53f7\u7ecf\u8fc7\u7684\u65f6\u95f4\uff0c\u5355\u4f4d\u7eb3\u79d2\uff0cint\n\n\u901a\u8fc7\u6bd4\u8f83\u4e09\u8005\u7684\u65f6\u95f4\u5dee\uff0c\u53ef\u4ee5\u5927\u81f4\u77e5\u9053\u8ba1\u7b97\u5ef6\u8fdf\u548c\u7f51\u7edc\u5ef6\u8fdf\n\n\u5176\u4ed6\u5b57\u6bb5\u4e3a\u81ea\u5b9a\u4e49\u8fd4\u56de\u5b57\u6bb5\n\n## TODO\n\n1. \u6240\u6709`stream_XXX`\u6307\u6807\u51fd\u6570\uff0c\u9700\u8981\u663e\u5f0f\u6ce8\u660e\u8fd4\u56de\u7c7b\u578b\uff0c\u6bd4\u5982int, double\uff0c\u6216\u8005tuple\u7c7b\u578b\uff0c\u6bd4\u5982(double, double)\u3002\u5982\u679c\u4e0d\u6807\u660e\uff0c\u8fd4\u56de\u7684\u4e0d\u662fc\u7c7b\u578b\uff0c\u800c\u662fpython\u7c7b\u578b\uff0c\u6bd4\u5982int\u8fd4\u56de\u7684\u662fPyInt\u3002\u76ee\u524d\u53ea\u6709\u90e8\u5206\u51fd\u6570\u4fee\u6539\u4e86\u3002Cython\u4e0d\u652f\u6301python\u5bf9\u8c61\u7684tuple\uff0c\u6bd4\u5982(np.ndarray, np.ndarray)\u3002\n2. ZIG\u3001PERIOD_MAX_BIAS \u6ca1\u6709stream\u548crecent\u51fd\u6570\n3. \u591a\u8fdb\u7a0b\u6570\u636e\u540e\u53f0\u652f\u6301\n\n## \u6307\u6807\n\n\u4e00\u4e2a\u6307\u6807\u6709\u4e09\u4e2a\u7248\u672c\uff0c\u6bd4\u5982MACD\uff1a\n\n1. `MACD`: \u4ece\u5934\u5230\u5c3e\u8ba1\u7b97\u6240\u6709\u6307\u6807\uff0c\u8fd4\u56dendarray\u3002\n2. `stream_MACD`: \u53ea\u8ba1\u7b97\u6700\u540e\u4e00\u5929\u7684\u6307\u6807\uff0c\u8fd4\u56dedouble,\u6216\u8005tuple(double,double)\u7b49\u3002\n3. `recent_MACD`: \u8ba1\u7b97\u6700\u8fd1`calc_length`\u5929\u7684\u6307\u6807\uff0c\u8fd4\u56dendarray\uff0c\u5f53`calc_length==1`\u65f6\uff0c\u6548\u679c\u548c`stream_MACD`\u4e00\u6837\u3002\n\n## \u5df2\u6269\u5c55\u7684\u81ea\u5b9a\u4e49\u6307\u6807\n\n\u6307\u6807\u542b\u4e49\u53ca\u7528\u6cd5\u89c1\u4ee3\u7801`_indicators.pyx`\u6ce8\u91ca\n\n```c\n// \u4e00\u822c\u6307\u6807\nSMA, BIAS, MACD, STOCH, KD, KDJ, SLOW_KD AMPLITUDE, ZIG,\n\n// \u533a\u95f4\u6307\u6807\nPERIOD_MAX_BIAS\n```\n\n## \u6269\u5c55TA-Lib\n\n`_ta_lib_xxx`\u6587\u4ef6\u662f\u4eceTA-Lib\u6e90\u7801\u590d\u5236\u8fc7\u6765\u7684\u3002\u5b89\u88c5\u5b8cTA-Lib\u4e4b\u540e\uff0c\u4e0d\u4f1a\u5b89\u88c5\u5bf9\u5e94\u7684pxd\u548cpxi\u6587\u4ef6\uff0c\u6240\u4ee5\u8fd9\u91cc\u7684pxd\u548cpxi\u76f4\u63a5\u4eceTA-Lib\u6e90\u7801\u590d\u5236\u8fc7\u6765\u3002\n\n\u590d\u5236\u8fc7\u6765\u7684\u65b9\u6cd5\uff0c\u662f`def`\u5b9a\u4e49\u7684\uff0c\u5168\u90e8\u6539\u6210\u4e86`cdef`\uff0c\u53ea\u5141\u8bb8c\u5185\u90e8\u8c03\u7528\u3002\u5982\u679c\u8981\u7528python\u6d4b\u8bd5\uff0c\u53ef\u4ee5\u5c01\u88c5\u6210`strategy`\u3002\n\n\u5982\u679c\u8981\u6539\u5199TA-Lib\u7684\u65b9\u6cd5\uff0c`_func.pxi`\u6e90\u6587\u4ef6\u3001\u6216`_stream.pxi`\u6e90\u6587\u4ef6\u5df2\u7ecf\u590d\u5236\u5230\u5bf9\u5e94`_ta_lib_xxx.pxi`\uff0c\u76f4\u63a5\u5728\u91cc\u9762\u6539\u5199\u5c31\u884c\u3002\u4f46\u662f\u8981\u6dfb\u52a0\u597d\u6ce8\u91ca\u3002\n\n\u6dfb\u52a0`recent_xxx`\u65b9\u6cd5\uff1a\n\n\u4eceTA-Lib`_stream.pxi`\u6e90\u6587\u4ef6\u76f4\u63a5\u590d\u5236\u5230`_indicators.pyx`\u6539\u5199\uff0c\u5e76\u6539\u540d\u4e3a`recent_xxx`\n\n## stream_xxx \u548c recent_xxx \u51fd\u6570\u8ba1\u7b97\u7cbe\u5ea6\u7684\u95ee\u9898\n\n\u4f7f\u7528\u4efb\u4f55talib\u5e93\u4e2d\u7684stream\u51fd\u6570\u65f6\uff0c\u90fd\u8981\u6d4b\u8bd5\u4ed6\u548c\u975estream\u51fd\u6570\u7684\u8fd4\u56de\u662f\u5426\u4e00\u81f4\n\ntalib\u8ba1\u7b97stream\u6307\u6807\u65f6\uff0c\u53ea\u8ba1\u7b97\u6700\u540e\u4e00\u5929\u7684\u503c\uff0c\u4f46\u662f\u4f1a\u5f80\u524d\u67e5\u770b\u5386\u53f2\u6570\u636e\uff0c\u4e00\u822c\u957f\u5ea6\u4e3atimeperiod+\u4e0d\u7a33\u5b9a\u671f\u9650\u3002\n\n\u6bd4\u5982EMA(3), 3\u5929\u524d\u7684\u6570\u636e\u4e5f\u4f1a\u5f71\u54cd\u6700\u540e\u7ed3\u679c\uff0c\u4e0d\u7a33\u5b9a\u671f\u9650\u8d8a\u957f\uff0c\u6700\u540e\u7ed3\u679c\u8d8a\u7cbe\u786e\u3002\n\ntalib\u6240\u6709\u6307\u6807\u9ed8\u8ba4\u4e0d\u7a33\u5b9a\u671f\u9650\u4e3a0\uff0c\u8981\u6ee1\u8db3\u81ea\u5df1\u7684\u7cbe\u5ea6\u8981\u6c42\uff0c\u9700\u8981\u81ea\u5df1\u8bbe\u7f6e\u4e0d\u7a33\u5b9a\u671f\u9650\u3002\n\n\u4e0d\u540c\u7684\u6307\u6807\uff0c\u4e0d\u540c\u7684timeperiod\uff0c\u9700\u8981\u8bbe\u7f6e\u4e0d\u540c\u7684\u4e0d\u786e\u5b9a\u957f\u5ea6\uff0c\u624d\u80fd\u8fbe\u5230\u76f8\u540c\u7684\u7cbe\u5ea6\u3002\n\n\u8bbe\u7f6e\u4e0d\u786e\u5b9a\u957f\u5ea6\u7684\u65b9\u6cd5\u4e3a\uff1a__ta_set_unstable_period(\u975e\u7ebf\u7a0b\u5b89\u5168)\n\ntalib\u8ba1\u7b97\u7cbe\u5ea6\u53d7\u5386\u53f2\u6570\u636e\u957f\u5ea6\u5f71\u54cd\u7684\u6307\u6807\u6709:\n\n```c\nADX, ADXR, ATR, CMO, DX, EMA, HT_DCPERIOD, HT_DCPHASE, HT_PHASOR,\nHT_SINE, HT_TRENDLINE, HT_TRENDMODE, KAMA, MAMA, MFI, MINUS_DI,\nMINUS_DM, NATR, PLUS_DI, PLUS_DM, RSI, STOCHRSI, T3\n```\n",
    "bugtrack_url": null,
    "license": "MIT License  Copyright (c) 2024 QQ  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:  The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ",
    "summary": "talib extension for formula computation",
    "version": "1.0",
    "project_urls": {
        "Issues": "https://github.com/sric0880/ta_formula/issues",
        "Repository": "https://github.com/sric0880/ta_formula"
    },
    "split_keywords": [
        "formula",
        " quant",
        " ta",
        " ta-lib",
        " talib",
        " ta-lib",
        " technical-analysis",
        " indicators",
        " technical-indicators",
        " quantum-computing"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "db2b0565ad6750b62529d9437a1d1d12adc0ee65b2943c665f3be78976b03601",
                "md5": "c089c9a25418cdc80f939591c1155b15",
                "sha256": "a67cc5c1ba1f7722c8cb3579556416b58889111cfeb84fe818d59636c057a8de"
            },
            "downloads": -1,
            "filename": "ta_formula-1.0-cp39-cp39-macosx_14_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "c089c9a25418cdc80f939591c1155b15",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 459265,
            "upload_time": "2024-08-24T10:45:26",
            "upload_time_iso_8601": "2024-08-24T10:45:26.757858Z",
            "url": "https://files.pythonhosted.org/packages/db/2b/0565ad6750b62529d9437a1d1d12adc0ee65b2943c665f3be78976b03601/ta_formula-1.0-cp39-cp39-macosx_14_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "a89f0922688ac05df2ad5653ae43f15a9eb2ff929c7b7976ef0b23c58fb42a3b",
                "md5": "0ce4a288f4d94e495d0d271e35015cf4",
                "sha256": "4eebc7bd6cf7c566ae8ae34d21b437cb8bb335cc2134ccaac9c95f4260794f1f"
            },
            "downloads": -1,
            "filename": "ta_formula-1.0-cp39-cp39-macosx_14_0_x86_64.whl",
            "has_sig": false,
            "md5_digest": "0ce4a288f4d94e495d0d271e35015cf4",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 525738,
            "upload_time": "2024-08-24T10:45:28",
            "upload_time_iso_8601": "2024-08-24T10:45:28.866299Z",
            "url": "https://files.pythonhosted.org/packages/a8/9f/0922688ac05df2ad5653ae43f15a9eb2ff929c7b7976ef0b23c58fb42a3b/ta_formula-1.0-cp39-cp39-macosx_14_0_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "1dcaef3c5d83c1ef97bb5fcef9eaad73e721663f79c69dd10b2b2b49f2dce7cd",
                "md5": "399e11501e9f0c9af600cb25ba459870",
                "sha256": "72bf401e050a65c3e2cf881c59dd2c4680e0f350a04a4149181509fb8df6e088"
            },
            "downloads": -1,
            "filename": "ta_formula-1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "399e11501e9f0c9af600cb25ba459870",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 2067230,
            "upload_time": "2024-08-24T10:45:31",
            "upload_time_iso_8601": "2024-08-24T10:45:31.280016Z",
            "url": "https://files.pythonhosted.org/packages/1d/ca/ef3c5d83c1ef97bb5fcef9eaad73e721663f79c69dd10b2b2b49f2dce7cd/ta_formula-1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "e1e49439e1e664f393151890d6a9cd4b4e14839c351c03fbe8e6f6b2fd98f3c3",
                "md5": "1a165c9160ea5db077ccc63ba22022de",
                "sha256": "c8af2adbe6914454e20b29d8b0ce7aa4c59703ae23bcf2321a3bcfc3cf822ad3"
            },
            "downloads": -1,
            "filename": "ta_formula-1.0.tar.gz",
            "has_sig": false,
            "md5_digest": "1a165c9160ea5db077ccc63ba22022de",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 29188,
            "upload_time": "2024-08-24T10:45:33",
            "upload_time_iso_8601": "2024-08-24T10:45:33.154726Z",
            "url": "https://files.pythonhosted.org/packages/e1/e4/9439e1e664f393151890d6a9cd4b4e14839c351c03fbe8e6f6b2fd98f3c3/ta_formula-1.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-08-24 10:45:33",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "sric0880",
    "github_project": "ta_formula",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [
        {
            "name": "numpy",
            "specs": [
                [
                    ">=",
                    "1.26.4"
                ]
            ]
        },
        {
            "name": "Cython",
            "specs": [
                [
                    ">=",
                    "3.0.10"
                ]
            ]
        }
    ],
    "lcname": "ta-formula"
}
        
Elapsed time: 1.86726s