Skip to main content

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


Documentation: https://merlinr.github.io/Hexital/

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.

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.2.tar.gz (59.2 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.2-py3-none-any.whl (101.7 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for hexital-4.0.2.tar.gz
Algorithm Hash digest
SHA256 0222dbe6a316915f86feba10f6b2b2008667a3b7b379ecce892dff71c6863a2b
MD5 6eddf9950bf655885457ea767be845c5
BLAKE2b-256 c70afc3fc32681238c72037f074fad4b564e4ecbedc394bfe6b8a4c6ea1d0ab5

See more details on using hashes here.

Provenance

The following attestation bundles were made for hexital-4.0.2.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.2-py3-none-any.whl.

File metadata

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

File hashes

Hashes for hexital-4.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 f360ce295d170242773e00a789b9eae8c9312d8509fe811f079fee1417f0a1ca
MD5 12309545575dc4819612de4dfb21722d
BLAKE2b-256 7ae24ee3f54d8a5bb7c0cc2f0e2011b50ae81e24aef50920e4533ebd74d6fd4b

See more details on using hashes here.

Provenance

The following attestation bundles were made for hexital-4.0.2-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.

Release history Release notifications | RSS feed

4.1.0

2 files

This release

4.0.2 This release

2 files

4.0.1

2 files

4.0.0

2 files

3.0.1

2 files

3.0.0

2 files

2.0.3

2 files

2.0.2

2 files

2.0.1

2 files

2.0.0

2 files

1.1.2

2 files

1.1.1

2 files

1.1.0

2 files

1.0.1

2 files

1.0.0

2 files

0.4.0

2 files

0.3.1

2 files

0.3.0

2 files

0.2.0

2 files

0.1.1

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page