https://github.com/vilhelmhilding/igapy
A modern, fully featured Python wrapper for IG’s REST and streaming trading APIs – built for quant developers and algo traders. Includes CLI, full test coverage, and production-ready design.
https://github.com/vilhelmhilding/igapy
algorithmic-trading api-wrapper ig-markets market-data quantitative-finance trading trading-api
Last synced: 3 months ago
JSON representation
A modern, fully featured Python wrapper for IG’s REST and streaming trading APIs – built for quant developers and algo traders. Includes CLI, full test coverage, and production-ready design.
- Host: GitHub
- URL: https://github.com/vilhelmhilding/igapy
- Owner: vilhelmhilding
- License: mit
- Created: 2025-06-28T15:32:59.000Z (12 months ago)
- Default Branch: main
- Last Pushed: 2025-06-28T16:04:37.000Z (12 months ago)
- Last Synced: 2026-01-03T06:27:45.424Z (5 months ago)
- Topics: algorithmic-trading, api-wrapper, ig-markets, market-data, quantitative-finance, trading, trading-api
- Language: Python
- Homepage: https://pypi.org/project/igapy/
- Size: 31.3 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# igapy – IG API Wrapper
[](https://pypi.org/project/igapy)
[](LICENSE)
[](https://pypi.org/project/igapy)
[](https://github.com/vilhelmhilding/igapy/actions)
[](https://codecov.io/gh/vilhelmhilding/igapy)
[](https://github.com/psf/black)
A complete, modern, production-ready Python wrapper for the IG REST and streaming API.
---
## Why igapy?
**igapy** is an unofficial, open source Python client for IG's REST and streaming API. It is designed for quant developers, algo traders, and anyone who wants a robust, well-documented and production-ready interface to IG's trading platform. The project aims to be a reference implementation for clean API wrappers in Python.
- 100% endpoint coverage (REST & streaming)
- Modern, type-annotated, PEP8/Black-formatted codebase
- CLI for all public API endpoints
- Full test suite and CI/CD
- No unnecessary complexity – easy to read, extend, and audit
---
## Features
- Full REST API coverage (session, accounts, markets, orders, prices, watchlists, sentiment, history, costs, operations)
- WebSocket streaming client with reconnect, ping, custom subscription management
- Authentication (session management, token handling, account switching, encryption keys)
- Market data retrieval (search, details, bulk, navigation)
- Order management (positions, working orders, confirmations)
- Client sentiment access (single, related, batch)
- Historical prices (multiple date/resolution variants)
- Account preferences management
- Watchlist management (create, modify, delete, add/remove markets)
- Command-line interface (CLI)
- GitHub Actions CI workflow
- Unit tests with pytest (90 tests, 100% coverage)
- PEP8-compliant, Black-formatted codebase
---
## Quickstart
### Install
```bash
pip install igapy
```
### Python Example
```python
from igapy import IGClient, Accounts, Markets
client = IGClient(
api_key="YOUR_API_KEY",
username="YOUR_USERNAME",
password="YOUR_PASSWORD",
is_demo=True
)
client.login()
accounts = Accounts(client).list_accounts()
print(accounts)
# Search for Apple stock (AAPL)
apple_search = Markets(client).search_markets("APPLE")
print(apple_search)
# Get details for the first Apple market found (if any)
if apple_search and apple_search["markets"]:
apple_epic = apple_search["markets"][0]["epic"]
apple_details = Markets(client).get_market_details(apple_epic)
print(apple_details)
```
### CLI Example
```bash
# List accounts
igapy accounts list --api-key KEY --username USER --password PASS --demo
# Get market details
igapy markets get-details --api-key KEY --username USER --password PASS --demo --epic IX.D.FTSE.DAILY.IP
# Create order
igapy orders create --api-key KEY --username USER --password PASS --demo --order '{"epic":"IX.D.FTSE.DAILY.IP","expiry":"DFB","direction":"BUY","size":1,"orderType":"MARKET","currencyCode":"GBP"}'
# Get prices
igapy prices get --api-key KEY --username USER --password PASS --demo --epic IX.D.FTSE.DAILY.IP
# Get transactions for type and period
igapy history transactions-period --api-key KEY --username USER --password PASS --demo --transaction-type ALL --last-period MONTH
# Get cost history
igapy costs history --api-key KEY --username USER --password PASS --demo --from-date 2024-01-01 --to-date 2024-06-01
```
### Streaming Example
```python
from igapy import IGClient, IGStreamingClient
import time
client = IGClient(
api_key="YOUR_API_KEY",
username="YOUR_USERNAME",
password="YOUR_PASSWORD",
is_demo=False
)
client.login()
def on_chart_tick(data):
print("Chart tick update:", data)
# IGStreamingClient supports automatic reconnect and re-subscription on connection loss.
# You can control this with the 'reconnect' and 'reconnect_delay' parameters.
stream = IGStreamingClient(client, reconnect=True, reconnect_delay=5)
stream.start()
stream.subscribe_chart_tick(
epic = "CS.D.BITCOIN.CFD.IP",
fields=["BID", "OFR", "UTM"],
callback=on_chart_tick
)
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
print("Stopping streaming...")
stream.stop()
```
---
## API Documentation
- [IG REST API Reference](https://labs.ig.com/rest-trading-api-reference.html)
---
## Development & Contribution
- Clone repo, create a virtualenv, install with `pip install -e .[dev]`
- Run tests: `pytest`
- Lint: `flake8 src/igapy tests`
- Format: `black src/igapy tests`
Pull requests and issues are welcome!
---
## Project Structure
```
.
├── LICENSE
├── pyproject.toml
├── MANIFEST.in
├── README.md
├── .gitignore
├── .github/
│ └── workflows/
│ └── python-ci.yml
├── src/
│ └── igapy/
│ ├── __init__.py
│ ├── cli.py
│ ├── client.py
│ ├── session.py
│ ├── accounts.py
│ ├── markets.py
│ ├── prices.py
│ ├── orders.py
│ ├── sentiment.py
│ ├── history.py
│ ├── repeat.py
│ ├── watchlists.py
│ ├── costs.py
│ ├── operations.py
│ ├── streaming.py
│ ├── exceptions.py
│ └── utils.py
└── tests/
├── conftest.py
├── test_accounts.py
├── test_cli.py
├── test_client.py
├── test_costs.py
├── test_exceptions.py
├── test_history.py
├── test_markets.py
├── test_operations.py
├── test_orders.py
├── test_prices.py
├── test_repeat.py
├── test_sentiment.py
├── test_session.py
├── test_streaming.py
├── test_utils.py
└── test_watchlists.py
```
---
## Code Style
- PEP8 via flake8
- Black formatting
- Type annotations and docstrings for all public classes/methods
---
## Continuous Integration
- GitHub Actions: `.github/workflows/python-ci.yml`
- Coverage via pytest-cov
---
## License
MIT License – see [LICENSE](LICENSE) file for details.
---
## Contact
hi@vilhelmhilding.com
---
*This project is not affiliated with or endorsed by IG Group. Use at your own risk.*