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.1.0.tar.gz (60.4 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.1.0-py3-none-any.whl (103.3 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for hexital-4.1.0.tar.gz
Algorithm Hash digest
SHA256 c9fb003cff7a0f1efb1b2c3c8981999537c165dffd675f3f51510f575f740f4f
MD5 e3f07a2d88461854374fbf1c81667819
BLAKE2b-256 b235793feda35a244d4de1a94f3787300bfb2ced026a7c7559259686751057ac

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: hexital-4.1.0-py3-none-any.whl
  • Upload date:
  • Size: 103.3 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.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 94eb299d9cf0fb28807b169e2d8e7eec64027fcdaac682e1e7f958633cbe7b5c
MD5 89e287219f5a76f44fd5a2988cf756dd
BLAKE2b-256 4020b1847d6fea3f69ad2680177de0a757531d58ca1001466f0014cd7b5ca505

See more details on using hashes here.

Provenance

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

Release history Release notifications | RSS feed

This release

4.1.0 This release

2 files

4.0.2

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