Skip to main content

PyneCore Capital.com Plugin

Capital.com integration for PyneCore: historical and live market data plus live order execution over the public REST v1 + WebSocket API.

Status

Both the data provider (LiveProviderPlugin) and live order execution (BrokerPlugin) are implemented: session-based authentication, historical plus live OHLCV, and position-based order routing with server-side stop-loss / take-profit / trailing stop.

Demo first

Capital.com has a full demo environment (demo-api-capital.backend-capital.com) — run your strategy there before risking funds. Set demo = true and the plugin talks to the demo host; the same API key works on both hosts, and the host you authenticate against decides which account list (demo or live) you see. Note two demo-side differences: fills are effectively deterministic at the requested price (slippage and partial fills are simulated away), and the hourly order-POST rate limit is tighter than on live.

Configuration

Settings live in workdir/config/plugins/capitalcom.toml, auto-generated from CapitalComConfig on first run. One credential block serves both market data and order execution:

demo = false           # demo host vs. live real funds
user_email = ""        # your Capital.com account email
api_key = ""           # API key from Settings -> API integrations
api_password = ""      # the password you set when generating the key

Generating the key: enable two-factor authentication on your account first (Capital.com requires 2FA before API key generation), then create the key under Settings -> API integrations on the platform; the API password is set there as part of key creation. The plugin encrypts the password with the server-provided RSA key at login and keeps the session tokens refreshed proactively.

Capital.com limits POST /session to one request per second per API key. Concurrent broker/provider instances in one process therefore share a keyed bootstrap gate. Session POST starts are spaced by at least one second, and a bootstrap throttle receives one bounded retry. Existing tokens stay visible while a replacement session is created, so an active WebSocket is never sent an empty credential pair.

Symbols

Capital.com identifies instruments by epic (e.g. EURUSD, GOLD) — use the epic directly in the provider string:

capitalcom:EURUSD@1

Pine scripts written with TradingView-style symbols keep working through the optional symbol_map translation table in the config:

[symbol_map]
"FX:EURUSD" = "EURUSD"
"OANDA:XAUUSD" = "GOLD"

Architecture

  • Transport: REST v1 (api-capital.backend-capital.com, or the demo host with demo = true) for account, orders, and history; WebSocket for live quotes and OHLC updates. Execution events are polled from REST (/positions, /workingorders, /history/activity) — Capital.com has no order-event WebSocket channel.
  • Authentication: API key + email + API password. The plugin encrypts the password with the server-provided RSA key and keeps the session tokens refreshed proactively.
  • Order model: position-based (dealId rows) with server-side stop-loss / take-profit / trailing stop as position attributes. One-way (netting) accounts use the direct execution path; hedging-mode accounts run through PyneCore's one-way emulation layer, so Pine one-way semantics hold on both.

Account-mode notes

  • Hedging mode is detected at connect time (GET /accounts/preferences) and handled transparently: closes, reversals, and brackets are decomposed per position row by the core one-way emulator.
  • Partial closes on a hedging account are not supported: DELETE /positions/{dealId} is full-row only (it ignores any size parameter), so a fractional strategy.close(qty=...) becomes a loud, non-halting skip. Use a one-way (netting) account for partial closes — there the plugin emulates them via opposite-direction orders.
  • Deferred trailing activation (Pine trail_price + trail_points) is only available on netting accounts; on a hedging account the trailing stop arms immediately at the given offset (logged as a warning).

License

Apache-2.0. See LICENSE and NOTICE.

Metadata

Release files for pynesys-pynecore-capitalcom 0.9.6

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-capitalcom 0.9.6
File Size Uploaded Provenance
pynesys_pynecore_capitalcom-0.9.6.tar.gz 459.9 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for pynesys-pynecore-capitalcom 0.9.6
File Interpreter ABI Platform
pynesys_pynecore_capitalcom-0.9.6-py3-none-any.whl Python 3 none any Details

Total release size: 735.6 kB

Release files / pynesys_pynecore_capitalcom-0.9.6.tar.gz

Download URL pynesys_pynecore_capitalcom-0.9.6.tar.gz
Size 459.9 kB
Tags Source
SHA-256 checksum
How to use checksums
0967387d59efa8b62d466e63c4b8dc6d201e9faec8bd497aae9405190bcc7422
BLAKE2b-256 checksum
How to use checksums
3c5c5fb8e773903a6633d96236773439d4ab2b90b7aa0988d2c6007e026edf07
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.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 Oct 18, 2026.

Transparency log

Release files / pynesys_pynecore_capitalcom-0.9.6-py3-none-any.whl

Download URL pynesys_pynecore_capitalcom-0.9.6-py3-none-any.whl
Size 275.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ab45c6951a2c9f0d42a9e9e97a00dba397d6c550cb59586cdb742fe1d7e19bfc
BLAKE2b-256 checksum
How to use checksums
a12ff7bb569bf79ceaa3152737224f27005a7b1c24b0a4ce45221c5957795c05
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.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 Oct 18, 2026.

Transparency log

Security for pynesys-pynecore-capitalcom 0.9.6

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.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for pynesys_pynecore_capitalcom-0.9.6.tar.gz

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 Oct 18, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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