Tachyon

Docs

Tachyon measures market fragility, not price direction. It tells you when conditions are unsafe. What you do about it stays your decision.

Start

  1. Sign in. A new account has a 7-day trial with the Bot features.
  2. The console shows the lights for BTC, ETH and SOL perpetuals on Bybit.
  3. For alerts, keys and webhooks, open Advanced settings.

States

Each state is a suggestion for your own policy. You choose the response and how long it lasts.

StateMeaningUsual response
NORMALNothing unusual in the order bookTrade as planned
SHIFTActivity is well above this pair's recent rangeWiden spreads, reduce size, for 5 s
ANOMALYUnconfirmed stressPause new entries for 500 ms, keep cancels live
CIRCUIT_BREAKERConfirmed stress or a liquidity vacuumHalt and flatten for 120 s

Every reading has an age_ms and a stale flag. If stale is true the feed has stopped, and the state is not a reading of the market. Stale is not NORMAL.

Browser overlay

The overlay puts the light on the Bybit trading page. It is not in a browser store yet, so it is installed by hand in Chrome or Edge.

  1. Download tachyon_overlay.zip and unzip it.
  2. Open chrome://extensions and turn on Developer mode.
  3. Choose Load unpacked and pick the unzipped folder.
  4. Open the extension's options and paste an API key.
  5. Open a BTC, ETH or SOL perpetual on Bybit.

REST

curl -H "x-api-key: YOUR_KEY" https://api.tachyon.khalm.ai/v1/state/BTCUSDT
{
  "pair": "BTCUSDT",
  "state": "NORMAL",
  "regime": 1,
  "age_ms": 42,
  "stale": false,
  "stale_after_ms": 2000
}

The reply has more fields than shown. A failed request is not NORMAL.

WebSocket

On Bot and Pro. The stream sends the state as it is published.

wss://api.tachyon.khalm.ai/v1/stream/BTCUSDT
Header: x-api-key: YOUR_KEY

Python

pip install https://tachyon.khalm.ai/downloads/tachyon_client-0.1.0-py3-none-any.whl
from tachyon_client import TachyonClient, TachyonError

client = TachyonClient("your-api-key")
try:
    reading = client.state("BTCUSDT")
except TachyonError:
    reading = None

if reading is None or not reading.known:
    ...  # Unknown is not NORMAL.
elif reading.state != "NORMAL":
    ...  # Your policy.

freqtrade

The gate pauses new entries while the market is fragile. Your strategy, signals and exits stay yours. It acts in live and dry-run, so a backtest does not show its effect.

  1. Install the Python client in freqtrade's environment.
  2. Put tachyon_gate.py in user_data/strategies/.
  3. Set TACHYON_API_KEY, and add the gate before IStrategy.
from freqtrade.strategy import IStrategy
from tachyon_gate import TachyonGate

class MyStrategy(TachyonGate, IStrategy):
    ...

By default, SHIFT halves the stake, and ANOMALY, CIRCUIT_BREAKER or an unknown state stops new entries. Exits are never blocked. If your strategy defines confirm_trade_entry, custom_stake_amount or custom_exit, call super() in it.

Webhooks

On Bot and Pro. Add a URL in Advanced settings. Tachyon posts a signed event when a state changes or the feed goes stale. Check the signature over the raw body before parsing.

from tachyon_client import verify_webhook, WebhookError

try:
    event = verify_webhook(raw_body, headers["x-tachyon-signature"], secret)
except WebhookError:
    ...  # Reject it.

An event's event is state, stale or test. Delivery is at least once and may arrive out of order, so dedupe by id and order by timestamp_ns. Silence is not NORMAL: also read the state on a timer.

Your fills by state

The Python client can show what your own Bybit fills paid in each state. It runs on your machine, and Tachyon never receives your exchange key. Use a read-only key.

BYBIT_API_KEY=... BYBIT_API_SECRET=... python -m tachyon_client.report --pair BTCUSDT --days 7

States come from the track record, so it covers fills since go-live, and the newest hour shows as unknown. It shows what your fills paid, not what you would have saved.

Limits

  • Casual keys read REST at 2 requests a second. Bot keys read at 10.
  • WebSocket and webhooks need the Bot plan. A refusal is 403 and names the plan.
  • Too many requests gets 429. A lapsed subscription gets 402.
  • Coverage is BTC, ETH and SOL perpetuals on Bybit.

Downloads