Skip to main content

Python SDK for Quant Platform — Bitcoin on-chain analytics from the Arabic Bitcoin Academy

Project description

Obiko — Python SDK for Quant Platform

PyPI version Python License

The official Python SDK for Quant by Bitcoin Academy — a research-driven Bitcoin on-chain analytics platform with pre-registered scientific methodology.

What makes Quant different

Quant is the only Bitcoin analytics platform that publishes its hypotheses before running the tests. Every indicator goes through a 5-phase protocol with SHA-256 hashed pre-registration, locked thresholds, and out-of-sample validation. We publish refutations as openly as we publish validations.

As of May 2026:

  • 22 indicators with 100% real data sources (no proxies)
  • 7 pre-registered research papers with reproducible methodology
  • 1 validated finding (CBA — 5/5 + 6/6 sanity checks)
  • Original methodological contribution: Phase 0 Protocol

Installation

pip install obiko

For DataFrame support:

pip install obiko[pandas]

Quick start

import obiko

client = obiko.Client(api_key="qnt_pro_xxxxxxxxxxxx")

# Get the validated CBA indicator
cba = client.cba()
print(cba.value, cba.data_date)

# Or fetch any indicator by name
mvrv = client.get_indicator("mvrv_z")
print(mvrv.value)

# Get the full dashboard snapshot
snap = client.dashboard()
print(f"Score: {snap.score}/100  Zone: {snap.zone}  Price: ${snap.price:,.0f}")

API key

API keys are issued to Pro-tier subscribers. Subscribe at /pro to get yours.

You can also set the OBIKO_API_KEY environment variable to avoid passing the key in code:

export OBIKO_API_KEY="qnt_pro_xxxxxxxxxxxx"
import obiko
client = obiko.Client()  # reads OBIKO_API_KEY automatically

Working with pandas

Every data-returning method supports df=True for direct DataFrame output:

import obiko

client = obiko.Client()

# All current indicators
df = client.indicators(df=True)
print(df.head())
#       indicator   value
# 0        cba       12.5
# 1        map        0.234
# 2        mvrv_z     2.1
# ...

# Full dashboard, flattened
df = client.dashboard(df=True)
print(df.head())
#       section    indicator   value
# 0     top        score       58.3
# 1     top        zone        تراكم ذكي
# ...

Research papers

Pro-tier keys can fetch the underlying data for all 7 pre-registered papers:

papers = client.papers()
for p in papers:
    print(p)
# <Paper ⭐ CBA phase=D outcome=validated>
# <Paper   MAP phase=D outcome=mixed>
# <Paper   PPR phase=D outcome=refuted>
# ...

# Drill into the validated paper
cba = client.paper("cba")
print(cba.verdict)              # 'VALIDATED: CBA U-shape variance pattern holds OOS'
print(cba.thresholds)           # {'P10': 1.9081, 'P90': 20.3353}
print(cba.pre_registration_hash)  # SHA-256 commit hash

Available indicators

print(client.info()["available_indicators"])

The SDK currently exposes 31 indicators across these groups:

  • Price & valuation: mayer_multiple, ma_200d, ma_200w, realized_price, mvrv_z, mvrv_ratio, nupl, puell_multiple, stock_to_flow
  • Cycle markers: pi_cycle_ratio, pi_cycle_signal, nupl_phase, rhodl_ratio
  • Validated indicators: map, cba (with their _zone companions)
  • Network health: hash_health, active_addresses, rsi, bvol_30d
  • Premium (Pro tier): hash_ribbons, hash_ribbons_buy, miner_position_index, fear_greed
  • Composite: hybrid_index, price, zone

Error handling

Errors are typed for clean handling:

from obiko import Client, AuthenticationError, RateLimitError, TierError

try:
    client = Client(api_key="qnt_pro_invalid")
    client.cba()
except AuthenticationError:
    print("Bad key — get a new one at /pro")
except TierError as e:
    print(f"Need Pro tier: {e}")
except RateLimitError as e:
    print(f"Slow down — retry after {e.retry_after}s")

Rate limits

Tier Requests / minute
Pro 100
Premium 30

The client raises RateLimitError (with a .retry_after attribute) when limits are exceeded.

Context manager

Sessions are automatically reused. For explicit cleanup:

with obiko.Client() as client:
    snap = client.dashboard()
    # ... session closed automatically

Versioning

Obiko follows semantic versioning. The current major version is 1.x.

Links

License

MIT — see LICENSE.


Made with conviction in London, UK by Obaida Kotainy.

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

obiko-1.0.0.tar.gz (9.1 kB view details)

Uploaded Source

Built Distribution

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

obiko-1.0.0-py3-none-any.whl (10.7 kB view details)

Uploaded Python 3

File details

Details for the file obiko-1.0.0.tar.gz.

File metadata

  • Download URL: obiko-1.0.0.tar.gz
  • Upload date:
  • Size: 9.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.15.0a8

File hashes

Hashes for obiko-1.0.0.tar.gz
Algorithm Hash digest
SHA256 e70c78f974b1d1e4835264380905b6bf224954d71b24be674ec62fb4ec53e0eb
MD5 1630fcf82d377b8e394cbcb2e4150ab0
BLAKE2b-256 ffd4645545aadb3ab0d1c96473dc6d145f1030b0f47ef5942c6d7dc2919160e7

See more details on using hashes here.

File details

Details for the file obiko-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: obiko-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 10.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.15.0a8

File hashes

Hashes for obiko-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f62f41ee367e2e12c78ed7335e9ad0de7c7e976d3d0f03f60b1d3f9d3233664a
MD5 c9ec00a93ba9159b22dfbcb1120a62fe
BLAKE2b-256 f5df55ac411528aeca6e20b5506153e4cb85af4a244708881a6609993aea3671

See more details on using hashes here.

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