Skip to main content

Hex Incremental Technical Analysis Library

Project description

Hexital - Incremental Technical Analysis Library

Python Version PyPi Version Package Status GitHub Release Date Downloads Downloads GitHub Repo stars Unit Tests - master Unit Tests - development license

Source Code: https://github.com/MerlinR/Hexital


Hexital is a fast, zero-dependency Python library for technical analysis. It computes indicators incrementally — append a candle, get the new reading — instead of recalculating the entire series each time.

  • Fast — built for live feeds and append-one-candle workflows
  • Easy — dicts, lists, or Candle objects as input
  • Versatile — indicators, patterns, candlestick transforms, analysis helpers
  • Lightweight — no pandas or numpy required at runtime

Beta: Breaking changes are still possible. See the Release Notes.


Installation

pip install hexital

Development branch:

pip install git+https://github.com/merlinr/hexital.git@development

Choose your path

I want to… Use Guide
Compute one indicator on a live feed EMA(...).append() Quick Start
Run several indicators on one candle stream Hexital(...) Strategies
Load candles from CSV, Pandas, timestamps Candle.from_dicts() etc. Candles
Build 5m bars from 1m data timeframe= on indicator + label on candles Candles · Features
Check crossovers, rising/falling hexital.analysis Analysis
Heikin-Ashi or other candle transforms candlestick= Candlesticks
Write my own indicator subclass Indicator Custom indicators
Browse what's built in catalogues Indicators · Patterns

New here? Quick Start walks through the examples below step by step.


Getting started

Single indicator

from hexital import EMA, Candle

candles = Candle.from_dicts([
    {"open": 17213, "high": 2395, "low": 7813, "close": 3615, "volume": 19661},
    {"open": 1301, "high": 3007, "low": 11626, "close": 19048, "volume": 28909},
])

ema = EMA(candles=candles, period=3)
ema.calculate()
print(ema.reading())  # 8408.7552

# Append updates the reading automatically
ema.append(Candle.from_dict({"open": 19723, "high": 4837, "low": 11631, "close": 6231, "volume": 38993}))
print(ema.reading())  # 7319.8776

Hexital — multiple indicators, one candle stream

Use [Hexital][hexital.core.hexital.Hexital] when a strategy needs several indicators fed from the same candles:

from hexital import EMA, WMA, Candle, Hexital

candles = Candle.from_dicts([
    {"open": 17213, "high": 2395, "low": 7813, "close": 3615, "volume": 19661},
    {"open": 1301, "high": 3007, "low": 11626, "close": 19048, "volume": 28909},
    {"open": 12615, "high": 923, "low": 7318, "close": 1351, "volume": 33765},
])

strategy = Hexital("Demo Strat", candles, [
    WMA(name="WMA", period=8),
    EMA(period=3),
])
strategy.calculate()

print(strategy.reading("EMA_3"))  # 8408.7552
print(strategy.reading("WMA"))    # 9316.4722

strategy.append(Candle.from_dict({"open": 19723, "high": 4837, "low": 11631, "close": 6231, "volume": 38993}))
print(strategy.reading("EMA_3"))  # 7319.8776
print(strategy.reading("WMA"))    # 8934.9722

Named indicators keep stable keys (WMA). Unnamed indicators get generated names from type and settings (EMA_3 = EMA with period 3). Nested dict fields use : at lookup time (e.g. MACD_12_26_9:signal).


What's included

Indicators

40+ incremental indicators for common strategies. Full reference: indicator catalogue.

ADX · AO · Amorph · AROON · ATR · BBANDS / BandWidth · CCI · ChandelierExit / CKSP · CMF · CMO · COPC · Counter · DEMA · Donchian · EMA · Fisher · HL / HLA / HLCA · HMA · Ichimoku · JMA · KAMA · KC · KST · LinearRegression / RegressionSlope / RegressionChannel · MACD · MFI · MOP · NATR · OBV · PPO · PSAR · PivotPoints · RMA · ROC · RSI · RVI · SMA · Squeeze / SqueezePro · STDEV / STDEVT · STOCH · Supertrend · TEMA · TR · TRIX · TSI · UO · Vortex · VWAP · VWMA · WillR · WMA · ZScore

Candlestick patterns

Pattern detection on candle sequences — full catalogue.

doji · dojistar · hammer · inverted_hammer

Candlestick types

Transform incoming candles before indicators run (e.g. Heikin-Ashi) — catalogue.

HeikinAshi

Movements

Pine Script–style helpers for indicator behaviour over time — full catalogue.

positive / negative · rising / falling · mean_rising / mean_falling · highest / lowest · highestbar / lowestbar · cross / crossover / crossunder · value_range

from hexital.analysis import cross, rising

rising(ema, "EMA_3", length=8)
cross(strategy, "EMA_3", "WMA")

Testing & performance

Accuracy

Every built-in indicator is unit tested against Pandas-TA as a source of truth. Values are compared with a small tolerance where floating-point or formula differences apply.

When to use Hexital vs Pandas-TA

Use case Better fit
Live / streaming — append one candle at a time Hexital
Large bulk backtest — load full history once, vectorise Pandas-TA

Hexital only calculates missing readings on append (O(1) per update). Libraries built on pandas typically recompute or reshape the full frame on each append, which gets slower as history grows.

In internal benchmarks, Hexital stays roughly flat as candle count increases during incremental updates, while Pandas-TA time grows with series length. For bulk calculation on large static datasets, Pandas-TA is often faster. Chart of bulk calculations. Chart of all calculations.

More detail and charts: Features.


Learn more


License

MIT — see LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

hexital-4.0.0.tar.gz (58.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

hexital-4.0.0-py3-none-any.whl (101.2 kB view details)

Uploaded Python 3

File details

Details for the file hexital-4.0.0.tar.gz.

File metadata

  • Download URL: hexital-4.0.0.tar.gz
  • Upload date:
  • Size: 58.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for hexital-4.0.0.tar.gz
Algorithm Hash digest
SHA256 d00fde1681374cc48ae7298370c7355c660034ae3cd44c0a1186d45d4a015e5f
MD5 d7767d3c76931eb65d722389eae5baf3
BLAKE2b-256 ed5adf1ad97f6609e72261f8f3a9116607edf684b6f4c8ae2c3ab123768ca6c3

See more details on using hashes here.

Provenance

The following attestation bundles were made for hexital-4.0.0.tar.gz:

Publisher: release.yaml on MerlinR/Hexital

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file hexital-4.0.0-py3-none-any.whl.

File metadata

  • Download URL: hexital-4.0.0-py3-none-any.whl
  • Upload date:
  • Size: 101.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for hexital-4.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 938b1f15e03737592100b88780b36aa9b723e16ef22c44dd9f6ed87a0cfb5536
MD5 e6269116053cc8681b6e67fdf9004f31
BLAKE2b-256 900071327e5e6e5fe699794cd46fef3831ebe71d6b5833ceba47eb2d4a916a8e

See more details on using hashes here.

Provenance

The following attestation bundles were made for hexital-4.0.0-py3-none-any.whl:

Publisher: release.yaml on MerlinR/Hexital

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page