Skip to main content

PyneCore Bybit Plugin

Bybit v5 integration for PyneCore: historical and live market data plus live order execution over the Bybit v5 Open API, covering the spot, linear (USDT/USDC perpetuals and futures) and inverse (coin-margined) categories.

Status

Both the data provider (LiveProviderPlugin) and live order execution (BrokerPlugin) are implemented and verified against the Bybit demo environment: historical plus live OHLCV for all three categories, and order execution with entries, exit brackets, cancels, in-place amends, crash recovery and fill reconciliation over the private WebSocket event stream.

Demo first

Bybit's demo environment (api-demo.*) runs on real mainnet prices with simulated balances — exactly the paper-trade path you should run before risking funds. The plugin defaults to demo = true; set it to false only once your strategy has proven itself on demo.

Demo API keys are generated from your mainnet account after switching the dashboard to Demo Trading. Demo covers spot, linear and inverse alike, and the private order/execution stream works the same as live. (Demo hosts serve no public market-data stream; public data always comes from the mainnet stream, which is fine — demo trades on mainnet prices.)

Configuration

Settings live in workdir/config/plugins/bybit.toml, auto-generated from BybitConfig on first run. Fill in your API key pair and pick the environment:

demo = true            # demo (api-demo.*) vs. live real funds
region = "global"      # global | eu | nl | tr | kz | ge | ae | id | testnet
api_key = ""
api_secret = ""
  • demo selects the paper-trade environment (see above).
  • region is your account's legal entity / host family, decided by your residency — it is not auto-detected. The (region, demo) pair resolves to a REST + WebSocket host triple (see hosts.py).
  • Optional rest_host / ws_public_host / ws_private_host overrides are an escape hatch for unlisted regional domains.

API key expiry and rotation

Bybit API keys without an IP whitelist expire after a limited period (currently three months) — a long-running bot will silently lose authentication when the key lapses. For unattended operation either bind the key to your server's IP address (whitelisted keys do not expire) or put a key-rotation reminder in your operations calendar.

The EU entity

Bybit EU (region = "eu", the MiCA-regulated entity for EEA residents) does not allow generating API keys directly: API access is only available through Bybit's third-party-application program, and that path is currently not usable in practice. Until this changes, EU-entity accounts cannot be used with this plugin — the host table and the eu region are wired and waiting, but there is no way to obtain a key. Development and verification run on the global entity's demo environment.

Symbols

The provider accepts TradingView-style notation:

  • BTCUSDT — plain name: spot first, then other categories are probed
  • BTCUSDT.P, BTCUSD.P — .P suffix: perpetual, linear probed first
  • BTCUSDT-26JUN26 — dated futures under their native Bybit name

Architecture

  • Transport: raw httpx (REST) + websockets (WS), no vendor SDK — the v5 API is plain JSON REST and JSON WebSocket, and the official pybit SDK is thread-based, which would fight the asyncio broker event loop.
  • Authentication: API key + secret, HMAC-SHA256 request signing; the private WebSocket authenticates with the same key pair.
  • One plugin, category-based model selection. The traded symbol's category (spot / linear / inverse) is resolved at connect time and selects both the execution model and the capability profile.
  • Push order events: order state and fills arrive over the private WebSocket order / execution / position topics — no polling. Crash recovery reconciles missed fills from REST history on restart.

Category notes

Spot

  • Inventory model, not position model. Spot has no exchange-side position object; PyneCore's spot-inventory core folds the plugin's execution ledger into a synthetic position. Short selling is unsupported (the core rejects shorting scripts on spot).
  • Fee dust: Bybit charges the spot buy fee in the base coin, so round trips leave sub-precision dust behind. Balances below one quantity-grid step are treated as flat.

Linear (USDT/USDC perpetuals and futures)

  • Real venue position model with native short selling and reduceOnly.
  • One-way position mode is the native path; hedge-mode accounts run through PyneCore's one-way emulation layer, so Pine one-way semantics hold on both.

Inverse (coin-margined)

  • Contracts are whole-USD denominated and settle in the base coin; the plugin maps Pine's base-quantity model onto USD contracts at dispatch, so strategies behave exactly as on linear (this matches TradingView, which also applies linear qty * Δprice accounting to inverse symbols).
  • Collateral switch gotcha: on a Unified Trading Account the settle coin's collateral switch must be ON, otherwise every inverse order is rejected with retCode 110101. Enable it under margin/collateral settings for the coin you trade (e.g. BTC for BTCUSD).

License

Apache-2.0. See LICENSE and NOTICE.

Metadata

Release files for pynesys-pynecore-bybit 0.9.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pynesys-pynecore-bybit 0.9.3
File Size Uploaded
pynesys_pynecore_bybit-0.9.3.tar.gz 153.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pynesys-pynecore-bybit 0.9.3
File Interpreter ABI Platform
pynesys_pynecore_bybit-0.9.3-py3-none-any.whl Python 3 none any Details

Total release size: 279.6 kB

Release files / pynesys_pynecore_bybit-0.9.3.tar.gz

Download URL pynesys_pynecore_bybit-0.9.3.tar.gz
Size 153.8 kB
Tags Source
SHA-256 checksum
How to use checksums
6226e6761358d7c53b5a54a969cd74ce1e4f9c2f3826189a8e438623a3809968
BLAKE2b-256 checksum
How to use checksums
735ee4fe4b1d8a96d86b1e68fe6b678db21661d2218dfe0f03b3760800683fb1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 28, 2026.

Transparency log

Release files / pynesys_pynecore_bybit-0.9.3-py3-none-any.whl

Download URL pynesys_pynecore_bybit-0.9.3-py3-none-any.whl
Size 125.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
7e61cfdb93185cc006084180f9eed9df05f9ab74a0ea3d6d601ad45d6b5defcc
BLAKE2b-256 checksum
How to use checksums
115b7a90592eae30e4bdfa30b901c8f0592be565b6da7e5a0a4f9af3eb730b0b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 28, 2026.

Transparency log

Release history Release notifications | RSS feed

0.9.4

2 release files

This release

0.9.3 This release

2 release files

0.9.1

2 release files

0.9.0

2 release 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