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


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.

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.1.tar.gz (58.9 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.1-py3-none-any.whl (101.3 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: hexital-4.0.1.tar.gz
  • Upload date:
  • Size: 58.9 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.1.tar.gz
Algorithm Hash digest
SHA256 4d5ce83ddeb74a8de6a970450a4d61c76a0125f27a001194a2af3f9db247fa34
MD5 4eed56684364bc28b84d10fc93796d72
BLAKE2b-256 a1269445ba9ac20c501362c136131de730a327f7cedb3b58b0f725972f2744d3

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: hexital-4.0.1-py3-none-any.whl
  • Upload date:
  • Size: 101.3 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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 db0c36dcf63870459fc7aa754dc6b1bb8fd70f692dc68000d90e4f603efb84ce
MD5 12f75e8772b19a04c1f36311be4692ba
BLAKE2b-256 0dc82366be03aa18e962b4599a08fdd1280aae00ffc948c90b7890ff40ad3180

See more details on using hashes here.

Provenance

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