quantjourney-ti


Namequantjourney-ti JSON
Version 0.3.2 PyPI version JSON
download
home_pageNone
SummaryComprehensive technical indicators for financial data.
upload_time2025-10-13 22:54:23
maintainerNone
docs_urlNone
authorNone
requires_python<3.15,>=3.11
licenseMIT License Copyright (c) 2025 Jakub Polec 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 financial technical analysis indicators quant numba
VCS
bugtrack_url
requirements numpy pandas numba pytest yfinance matplotlib
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # QuantJourney Technical Indicators

**A high-performance Python library for calculating technical indicators, optimized with Numba for speed and designed for financial data analysis. This project is part of the Quantitative Infrastructure initiative by [QuantJourney](https://quantjourney.substack.com), providing robust tools for traders and researchers.**

**License**: MIT License - see `LICENSE` for details.  
**Author**: Jakub Polec ([jakub@quantjourney.pro](mailto:jakub@quantjourney.pro))  
**Repository**: [github.com/QuantJourneyOrg/qj_technical_indicators](https://github.com/QuantJourneyOrg/qj_technical_indicators)

## Overview

The QuantJourney Technical Indicators library offers a comprehensive set of technical indicators for analyzing financial time series data. Key features include:
- **Numba-Optimized Calculations**: Fast, JIT-compiled functions for performance-critical computations.
- **Flexible API**: Supports both standalone functions and a `TechnicalIndicators` class for object-oriented usage.
- **Robust Error Handling**: Validates inputs and handles edge cases like NaNs and empty data.
- **Visualization**: Generates individual plots for indicators, saved as PNG files in an `indicator_plots` directory.
- **Integration**: Works seamlessly with `pandas` DataFrames and `yfinance` for data fetching.

### Extras and Lazy Loading

- Optional extras keep the core lightweight:
  - `pip install .[yf]` to enable yfinance-based examples/tests
  - `pip install .[plot]` to enable plotting with matplotlib

- Lazy JIT compile: kernels compile on first use and are cached to disk. You can opt-in to eager compile for lower first-call latency:

```python
from quantjourney_ti import TechnicalIndicators
ti = TechnicalIndicators(warmup=True)  # pre-compiles a common subset of kernels
```

- Logging: queue logging is opt-in to avoid starting background threads on import:

```python
from quantjourney_ti import start_logging_queue
start_logging_queue()  # enable QueueHandler + background consumer thread
```

The library is ideal for backtesting trading strategies, real-time analysis, and research, with a focus on simplicity and extensibility.

### Recent Improvements

- DataFrame inputs with only `adj_close` are now auto-normalized for indicators that require a `close` column.
- `SMA` gains a lightweight cache via `@cached_indicator` to speed repeat calls on unchanged inputs.
- Streaming buffers now respect the constructor’s `max_buffer_size` argument.
- Risk metrics correctly detect constant price series as prices (max drawdown = 0).
- Validation utilities and logging were streamlined to improve robustness in mixed environments.

### Caching

Some indicators support lightweight caching to avoid repeated computation on identical inputs.

- The `@cached_indicator(ttl_seconds=3600)` decorator enables memoization with a time‑to‑live.
- Inputs are hashed by content (values + index) to detect duplicates safely.
- Example: `SMA` uses caching out of the box.

Cache control utilities:

```python
from quantjourney_ti import get_cache_stats, clear_indicator_cache

# View cache statistics
print(get_cache_stats())

# Clear all cached entries
clear_indicator_cache()
```

To add caching to your own wrappers, apply `@cached_indicator` above your method. Choose an appropriate TTL for your workload.

## Project Structure

The repository is organized as follows (top-level view):

```
quantjourney_ti/              # Package code
├── __init__.py               # Public exports and helpers
├── indicators.py             # Main API class (TechnicalIndicators)
├── technical_indicators.py   # Legacy compatibility wrapper(s)
├── _indicator_kernels.py     # Numba-accelerated kernels
├── _decorators.py            # timer / numba_fallback
├── _errors.py                # Custom errors
├── _utils.py                 # Validation, plotting, memory helpers
├── _performance.py           # Caching, profiling, perf stats
├── _risk_metrics.py          # Risk metrics utilities
├── _streaming.py             # Streaming indicators + datafeed
├── kernels/                  # Organized numba kernels
│   ├── __init__.py
│   ├── trend_numba.py
│   ├── momentum_numba.py
│   ├── volatility_numba.py
│   └── volume_numba.py
└── _legacy_/                 # Older APIs kept for reference
    └── technical_indicators.py

tests/                        # Unit and integration tests (pytest)
docs/                         # Documentation
├── INDICATORS.md
└── USAGE.md
examples/                     # Usage examples and scripts
notebooks/                    # Jupyter notebooks
indicator_plots/              # Saved example plots

pyproject.toml                # Build + project metadata
requirements.txt              # Dev/test dependencies
CHANGELOG.md                  # Release notes
LICENSE                       # MIT License text
README.md                     # This file
```

## Installation

1. Clone the repository:
   ```bash
   git clone https://github.com/QuantJourneyOrg/qj_technical_indicators.git
   cd qj_technical_indicators
   ```

2. Install dependencies:
   ```bash
   pip install -r requirements.txt
   # optional extras
   pip install .[yf]
   pip install .[plot]
   ```

3. Install the package in editable mode:
   ```bash
   pip install -e .
   ```

**Requirements**:
- Python 3.11–3.14
- `pandas`, `numpy`, `yfinance`, `numba`, `matplotlib`

## Usage

The library provides a `TechnicalIndicators` class for calculating indicators and saving plots. See `docs/USAGE.md` for a compact guide and `notebooks/` for interactive examples. Example:

```python
import numpy as np
import pandas as pd
import yfinance as yf

from quantjourney_ti import TechnicalIndicators
from quantjourney_ti._utils import plot_indicators

# Fetch data (requires extra 'yf')
df = yf.download("AAPL", start="2024-01-01", end="2025-02-01", progress=False)
if isinstance(df.columns, pd.MultiIndex):
    df.columns = df.columns.get_level_values(0).str.lower().str.replace(" ", "_")
else:
    df.columns = df.columns.str.lower().str.replace(" ", "_")
df["volume"] = df["volume"].replace(0, np.nan).ffill()

ti = TechnicalIndicators()
ema = ti.EMA(df["close"], 20)
rsi = ti.RSI(df["close"], 14)
macd = ti.MACD(df["close"], 12, 26, 9)
```

Examples:

```bash
python examples/run_basic.py --ticker AAPL --period 6mo
python examples/run_channels.py --ticker AAPL --period 6mo
python examples/run_from_csv.py --csv path/to/ohlcv.csv --sep ,
```

**Notebooks**:
- `notebooks/01_basic_indicators.ipynb`
- `notebooks/02_channels_and_bands.ipynb`
- `notebooks/03_streaming_demo.ipynb`

## 📊 Example Plot
![Technical Indicator Example](docs/technical_indicator.png)

## Supported Indicators

The library supports 39 indicators (54 series):
- **Single-Series Indicators** (21):
  - SMA (Simple Moving Average)
  - EMA (Exponential Moving Average)
  - RSI (Relative Strength Index)
  - ATR (Average True Range)
  - MFI (Money Flow Index)
  - TRIX
  - CCI (Commodity Channel Index)
  - ROC (Rate of Change)
  - WILLR (Williams %R)
  - DEMA (Double Exponential Moving Average)
  - KAMA (Kaufman Adaptive Moving Average)
  - AO (Awesome Oscillator)
  - ULTIMATE_OSCILLATOR
  - CMO (Chande Momentum Oscillator)
  - DPO (Detrended Price Oscillator)
  - MASS_INDEX
  - VWAP (Volume Weighted Average Price)
  - AD (Accumulation/Distribution Line)
  - HULL_MA (Hull Moving Average)
  - OBV (On-Balance Volume)
  - RVI (Relative Vigor Index)
- **Multi-Series Indicators** (18):
  - MACD (MACD, Signal, Histogram)
  - BB (Bollinger Bands: BB_Upper, BB_Middle, BB_Lower)
  - STOCH (Stochastic Oscillator: K, D)
  - ADX (Average Directional Index: ADX, +DI, -DI)
  - ICHIMOKU (Tenkan-sen, Kijun-sen, Senkou Span A, Senkou Span B, Chikou Span)
  - KELTNER (Keltner Channels: KC_Upper, KC_Middle, KC_Lower)
  - DONCHIAN (Donchian Channels: DC_Upper, DC_Middle, DC_Lower)
  - AROON (AROON_UP, AROON_DOWN, AROON_OSC)
  - VOLUME_INDICATORS (Volume_SMA, Force_Index, VPT)
  - PIVOT_POINTS (PP, R1, R2, S1, S2)
  - RAINBOW (9 SMAs for periods 2-10)
  - BETA
  - DI (Directional Indicator: +DI, -DI)
  - ADOSC (Chaikin A/D Oscillator)
  - HEIKEN_ASHI (HA_Open, HA_High, HA_Low, HA_Close)
  - BENFORD_LAW (Observed, Expected)
  - MOMENTUM_INDEX (MomentumIndex, NegativeIndex)
  - ELDER_RAY (BullPower, BearPower)

See `indicators.py` for the full list and parameters.

## Development

To contribute:
1. Fork the repository and create a branch.
2. Add new indicators in `_indicator_kernels.py` with Numba optimization.
3. Define public methods in `indicators.py`.
4. Update tests in `tests/`.
5. Submit a pull request.

**Testing**:
```bash
# Core tests (no network):
pytest -m "not slow"  # skips network-dependent tests

# Full suite including yfinance examples (requires network + optional extras):
pytest
```

- All tests live under `tests/`.
- Slow/optional tests are marked `@pytest.mark.slow`.
- Some tests require extras: install with `pip install .[yf]` and `pip install .[plot]`.

## Contact

For issues or feedback, contact Jakub Polec at [jakub@quantjourney.pro](mailto:jakub@quantjourney.pro) or open an issue on GitHub.

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "quantjourney-ti",
    "maintainer": null,
    "docs_url": null,
    "requires_python": "<3.15,>=3.11",
    "maintainer_email": null,
    "keywords": "financial, technical analysis, indicators, quant, numba",
    "author": null,
    "author_email": "Jakub Polec <jakub@quantjourney.pro>",
    "download_url": "https://files.pythonhosted.org/packages/68/61/b48ca6c594a7f6ddb7b2decd230d8e1bb481c98ef1db5f504d801bb687f0/quantjourney_ti-0.3.2.tar.gz",
    "platform": null,
    "description": "# QuantJourney Technical Indicators\n\n**A high-performance Python library for calculating technical indicators, optimized with Numba for speed and designed for financial data analysis. This project is part of the Quantitative Infrastructure initiative by [QuantJourney](https://quantjourney.substack.com), providing robust tools for traders and researchers.**\n\n**License**: MIT License - see `LICENSE` for details.  \n**Author**: Jakub Polec ([jakub@quantjourney.pro](mailto:jakub@quantjourney.pro))  \n**Repository**: [github.com/QuantJourneyOrg/qj_technical_indicators](https://github.com/QuantJourneyOrg/qj_technical_indicators)\n\n## Overview\n\nThe QuantJourney Technical Indicators library offers a comprehensive set of technical indicators for analyzing financial time series data. Key features include:\n- **Numba-Optimized Calculations**: Fast, JIT-compiled functions for performance-critical computations.\n- **Flexible API**: Supports both standalone functions and a `TechnicalIndicators` class for object-oriented usage.\n- **Robust Error Handling**: Validates inputs and handles edge cases like NaNs and empty data.\n- **Visualization**: Generates individual plots for indicators, saved as PNG files in an `indicator_plots` directory.\n- **Integration**: Works seamlessly with `pandas` DataFrames and `yfinance` for data fetching.\n\n### Extras and Lazy Loading\n\n- Optional extras keep the core lightweight:\n  - `pip install .[yf]` to enable yfinance-based examples/tests\n  - `pip install .[plot]` to enable plotting with matplotlib\n\n- Lazy JIT compile: kernels compile on first use and are cached to disk. You can opt-in to eager compile for lower first-call latency:\n\n```python\nfrom quantjourney_ti import TechnicalIndicators\nti = TechnicalIndicators(warmup=True)  # pre-compiles a common subset of kernels\n```\n\n- Logging: queue logging is opt-in to avoid starting background threads on import:\n\n```python\nfrom quantjourney_ti import start_logging_queue\nstart_logging_queue()  # enable QueueHandler + background consumer thread\n```\n\nThe library is ideal for backtesting trading strategies, real-time analysis, and research, with a focus on simplicity and extensibility.\n\n### Recent Improvements\n\n- DataFrame inputs with only `adj_close` are now auto-normalized for indicators that require a `close` column.\n- `SMA` gains a lightweight cache via `@cached_indicator` to speed repeat calls on unchanged inputs.\n- Streaming buffers now respect the constructor\u2019s `max_buffer_size` argument.\n- Risk metrics correctly detect constant price series as prices (max drawdown = 0).\n- Validation utilities and logging were streamlined to improve robustness in mixed environments.\n\n### Caching\n\nSome indicators support lightweight caching to avoid repeated computation on identical inputs.\n\n- The `@cached_indicator(ttl_seconds=3600)` decorator enables memoization with a time\u2011to\u2011live.\n- Inputs are hashed by content (values + index) to detect duplicates safely.\n- Example: `SMA` uses caching out of the box.\n\nCache control utilities:\n\n```python\nfrom quantjourney_ti import get_cache_stats, clear_indicator_cache\n\n# View cache statistics\nprint(get_cache_stats())\n\n# Clear all cached entries\nclear_indicator_cache()\n```\n\nTo add caching to your own wrappers, apply `@cached_indicator` above your method. Choose an appropriate TTL for your workload.\n\n## Project Structure\n\nThe repository is organized as follows (top-level view):\n\n```\nquantjourney_ti/              # Package code\n\u251c\u2500\u2500 __init__.py               # Public exports and helpers\n\u251c\u2500\u2500 indicators.py             # Main API class (TechnicalIndicators)\n\u251c\u2500\u2500 technical_indicators.py   # Legacy compatibility wrapper(s)\n\u251c\u2500\u2500 _indicator_kernels.py     # Numba-accelerated kernels\n\u251c\u2500\u2500 _decorators.py            # timer / numba_fallback\n\u251c\u2500\u2500 _errors.py                # Custom errors\n\u251c\u2500\u2500 _utils.py                 # Validation, plotting, memory helpers\n\u251c\u2500\u2500 _performance.py           # Caching, profiling, perf stats\n\u251c\u2500\u2500 _risk_metrics.py          # Risk metrics utilities\n\u251c\u2500\u2500 _streaming.py             # Streaming indicators + datafeed\n\u251c\u2500\u2500 kernels/                  # Organized numba kernels\n\u2502   \u251c\u2500\u2500 __init__.py\n\u2502   \u251c\u2500\u2500 trend_numba.py\n\u2502   \u251c\u2500\u2500 momentum_numba.py\n\u2502   \u251c\u2500\u2500 volatility_numba.py\n\u2502   \u2514\u2500\u2500 volume_numba.py\n\u2514\u2500\u2500 _legacy_/                 # Older APIs kept for reference\n    \u2514\u2500\u2500 technical_indicators.py\n\ntests/                        # Unit and integration tests (pytest)\ndocs/                         # Documentation\n\u251c\u2500\u2500 INDICATORS.md\n\u2514\u2500\u2500 USAGE.md\nexamples/                     # Usage examples and scripts\nnotebooks/                    # Jupyter notebooks\nindicator_plots/              # Saved example plots\n\npyproject.toml                # Build + project metadata\nrequirements.txt              # Dev/test dependencies\nCHANGELOG.md                  # Release notes\nLICENSE                       # MIT License text\nREADME.md                     # This file\n```\n\n## Installation\n\n1. Clone the repository:\n   ```bash\n   git clone https://github.com/QuantJourneyOrg/qj_technical_indicators.git\n   cd qj_technical_indicators\n   ```\n\n2. Install dependencies:\n   ```bash\n   pip install -r requirements.txt\n   # optional extras\n   pip install .[yf]\n   pip install .[plot]\n   ```\n\n3. Install the package in editable mode:\n   ```bash\n   pip install -e .\n   ```\n\n**Requirements**:\n- Python 3.11\u20133.14\n- `pandas`, `numpy`, `yfinance`, `numba`, `matplotlib`\n\n## Usage\n\nThe library provides a `TechnicalIndicators` class for calculating indicators and saving plots. See `docs/USAGE.md` for a compact guide and `notebooks/` for interactive examples. Example:\n\n```python\nimport numpy as np\nimport pandas as pd\nimport yfinance as yf\n\nfrom quantjourney_ti import TechnicalIndicators\nfrom quantjourney_ti._utils import plot_indicators\n\n# Fetch data (requires extra 'yf')\ndf = yf.download(\"AAPL\", start=\"2024-01-01\", end=\"2025-02-01\", progress=False)\nif isinstance(df.columns, pd.MultiIndex):\n    df.columns = df.columns.get_level_values(0).str.lower().str.replace(\" \", \"_\")\nelse:\n    df.columns = df.columns.str.lower().str.replace(\" \", \"_\")\ndf[\"volume\"] = df[\"volume\"].replace(0, np.nan).ffill()\n\nti = TechnicalIndicators()\nema = ti.EMA(df[\"close\"], 20)\nrsi = ti.RSI(df[\"close\"], 14)\nmacd = ti.MACD(df[\"close\"], 12, 26, 9)\n```\n\nExamples:\n\n```bash\npython examples/run_basic.py --ticker AAPL --period 6mo\npython examples/run_channels.py --ticker AAPL --period 6mo\npython examples/run_from_csv.py --csv path/to/ohlcv.csv --sep ,\n```\n\n**Notebooks**:\n- `notebooks/01_basic_indicators.ipynb`\n- `notebooks/02_channels_and_bands.ipynb`\n- `notebooks/03_streaming_demo.ipynb`\n\n## \ud83d\udcca Example Plot\n![Technical Indicator Example](docs/technical_indicator.png)\n\n## Supported Indicators\n\nThe library supports 39 indicators (54 series):\n- **Single-Series Indicators** (21):\n  - SMA (Simple Moving Average)\n  - EMA (Exponential Moving Average)\n  - RSI (Relative Strength Index)\n  - ATR (Average True Range)\n  - MFI (Money Flow Index)\n  - TRIX\n  - CCI (Commodity Channel Index)\n  - ROC (Rate of Change)\n  - WILLR (Williams %R)\n  - DEMA (Double Exponential Moving Average)\n  - KAMA (Kaufman Adaptive Moving Average)\n  - AO (Awesome Oscillator)\n  - ULTIMATE_OSCILLATOR\n  - CMO (Chande Momentum Oscillator)\n  - DPO (Detrended Price Oscillator)\n  - MASS_INDEX\n  - VWAP (Volume Weighted Average Price)\n  - AD (Accumulation/Distribution Line)\n  - HULL_MA (Hull Moving Average)\n  - OBV (On-Balance Volume)\n  - RVI (Relative Vigor Index)\n- **Multi-Series Indicators** (18):\n  - MACD (MACD, Signal, Histogram)\n  - BB (Bollinger Bands: BB_Upper, BB_Middle, BB_Lower)\n  - STOCH (Stochastic Oscillator: K, D)\n  - ADX (Average Directional Index: ADX, +DI, -DI)\n  - ICHIMOKU (Tenkan-sen, Kijun-sen, Senkou Span A, Senkou Span B, Chikou Span)\n  - KELTNER (Keltner Channels: KC_Upper, KC_Middle, KC_Lower)\n  - DONCHIAN (Donchian Channels: DC_Upper, DC_Middle, DC_Lower)\n  - AROON (AROON_UP, AROON_DOWN, AROON_OSC)\n  - VOLUME_INDICATORS (Volume_SMA, Force_Index, VPT)\n  - PIVOT_POINTS (PP, R1, R2, S1, S2)\n  - RAINBOW (9 SMAs for periods 2-10)\n  - BETA\n  - DI (Directional Indicator: +DI, -DI)\n  - ADOSC (Chaikin A/D Oscillator)\n  - HEIKEN_ASHI (HA_Open, HA_High, HA_Low, HA_Close)\n  - BENFORD_LAW (Observed, Expected)\n  - MOMENTUM_INDEX (MomentumIndex, NegativeIndex)\n  - ELDER_RAY (BullPower, BearPower)\n\nSee `indicators.py` for the full list and parameters.\n\n## Development\n\nTo contribute:\n1. Fork the repository and create a branch.\n2. Add new indicators in `_indicator_kernels.py` with Numba optimization.\n3. Define public methods in `indicators.py`.\n4. Update tests in `tests/`.\n5. Submit a pull request.\n\n**Testing**:\n```bash\n# Core tests (no network):\npytest -m \"not slow\"  # skips network-dependent tests\n\n# Full suite including yfinance examples (requires network + optional extras):\npytest\n```\n\n- All tests live under `tests/`.\n- Slow/optional tests are marked `@pytest.mark.slow`.\n- Some tests require extras: install with `pip install .[yf]` and `pip install .[plot]`.\n\n## Contact\n\nFor issues or feedback, contact Jakub Polec at [jakub@quantjourney.pro](mailto:jakub@quantjourney.pro) or open an issue on GitHub.\n",
    "bugtrack_url": null,
    "license": "MIT License\n        \n        Copyright (c) 2025 Jakub Polec\n        \n        Permission is hereby granted, free of charge, to any person obtaining a copy\n        of this software and associated documentation files (the \"Software\"), to deal\n        in the Software without restriction, including without limitation the rights\n        to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n        copies of the Software, and to permit persons to whom the Software is\n        furnished to do so, subject to the following conditions:\n        \n        The above copyright notice and this permission notice shall be included in all\n        copies or substantial portions of the Software.\n        \n        THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n        IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n        FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n        AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n        LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n        OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n        SOFTWARE.",
    "summary": "Comprehensive technical indicators for financial data.",
    "version": "0.3.2",
    "project_urls": {
        "Bug Tracker": "https://github.com/QuantJourneyOrg/qj_technical_indicators/issues",
        "Homepage": "https://quantjourney.substack.com",
        "Repository": "https://github.com/QuantJourneyOrg/qj_technical_indicators"
    },
    "split_keywords": [
        "financial",
        " technical analysis",
        " indicators",
        " quant",
        " numba"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "de5aeb71e4e058f6648625632d530e4ae051e8562e48345eb56a9fb73d40e555",
                "md5": "f543da58ab0e0905d68ffaca806744a9",
                "sha256": "cddc9b293b63247714656fbb04ef6c680d0979ede3774ce7839d388b2f396963"
            },
            "downloads": -1,
            "filename": "quantjourney_ti-0.3.2-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "f543da58ab0e0905d68ffaca806744a9",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": "<3.15,>=3.11",
            "size": 106834,
            "upload_time": "2025-10-13T22:54:22",
            "upload_time_iso_8601": "2025-10-13T22:54:22.446225Z",
            "url": "https://files.pythonhosted.org/packages/de/5a/eb71e4e058f6648625632d530e4ae051e8562e48345eb56a9fb73d40e555/quantjourney_ti-0.3.2-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "6861b48ca6c594a7f6ddb7b2decd230d8e1bb481c98ef1db5f504d801bb687f0",
                "md5": "7b0c7dec1eed83f259dfb4d608cc85ef",
                "sha256": "8aa37a46f03a0567c030ee83ee05aaee5ad20d0eff9f93bb39bfbdbf39665637"
            },
            "downloads": -1,
            "filename": "quantjourney_ti-0.3.2.tar.gz",
            "has_sig": false,
            "md5_digest": "7b0c7dec1eed83f259dfb4d608cc85ef",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": "<3.15,>=3.11",
            "size": 279408,
            "upload_time": "2025-10-13T22:54:23",
            "upload_time_iso_8601": "2025-10-13T22:54:23.782226Z",
            "url": "https://files.pythonhosted.org/packages/68/61/b48ca6c594a7f6ddb7b2decd230d8e1bb481c98ef1db5f504d801bb687f0/quantjourney_ti-0.3.2.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-10-13 22:54:23",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "QuantJourneyOrg",
    "github_project": "qj_technical_indicators",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "requirements": [
        {
            "name": "numpy",
            "specs": [
                [
                    ">=",
                    "1.26.0"
                ]
            ]
        },
        {
            "name": "pandas",
            "specs": [
                [
                    "<",
                    "3.0"
                ],
                [
                    ">=",
                    "2.0.0"
                ]
            ]
        },
        {
            "name": "numba",
            "specs": [
                [
                    ">=",
                    "0.59.0"
                ]
            ]
        },
        {
            "name": "pytest",
            "specs": []
        },
        {
            "name": "yfinance",
            "specs": []
        },
        {
            "name": "matplotlib",
            "specs": [
                [
                    ">=",
                    "3.5.0"
                ]
            ]
        }
    ],
    "lcname": "quantjourney-ti"
}
        
Elapsed time: 0.88890s