CPZ — Python SDK for Strategy Lab, Risk, Backtesting, and Execution (multi-broker)
Project description
Install
pip install cpz-ai
# dev
pip install -e .[dev]
60-second Quickstart (Sync)
import cpz
from cpz.execution.models import OrderSubmitRequest
from cpz.execution.enums import OrderSide, OrderType, TimeInForce
client = cpz.clients.sync.CPZClient()
client.execution.use_broker("alpaca", env="paper")
order = client.execution.submit_order(OrderSubmitRequest(
symbol="AAPL",
side=OrderSide.BUY,
qty=10,
type=OrderType.MARKET,
time_in_force=TimeInForce.DAY,
))
print(order.id, order.status)
Execution Architecture
CPZClient.execution --> BrokerRouter --> AlpacaAdapter
| ^
+---- future brokers (IBKR, Tradier, ...)
Configuration (.env)
| Key | Description | Example | Required |
|---|---|---|---|
| CPZ_ENV | SDK environment | dev | No |
| CPZ_LOG_LEVEL | Log level | INFO | No |
| CPZ_REQUEST_TIMEOUT_SECONDS | Default request timeout | 30 | No |
| ALPACA_ENV | Alpaca environment | paper | Yes (if using Alpaca) |
| ALPACA_API_KEY_ID | Alpaca API key | AK... | Yes (if using Alpaca) |
| ALPACA_API_SECRET_KEY | Alpaca API secret | ... | Yes (if using Alpaca) |
Usage
Selecting a broker
client.execution.use_broker("alpaca", env="paper")
Submit / cancel / replace order (sync)
from cpz.execution.models import OrderSubmitRequest, OrderReplaceRequest
from cpz.execution.enums import OrderSide, OrderType, TimeInForce
req = OrderSubmitRequest(symbol="AAPL", side=OrderSide.BUY, qty=1,
type=OrderType.MARKET, time_in_force=TimeInForce.DAY)
order = client.execution.submit_order(req)
client.execution.cancel_order(order.id)
client.execution.replace_order(order.id, OrderReplaceRequest(qty=2))
Async + Streaming
import asyncio
from cpz.clients.async_ import AsyncCPZClient
async def main():
client = AsyncCPZClient()
await client.execution.use_broker("alpaca", env="paper")
async for q in client.execution.stream_quotes(["AAPL", "MSFT"]):
print(q.symbol, q.bid, q.ask)
break
asyncio.run(main())
Get account / positions
acct = client.execution.get_account()
positions = client.execution.get_positions()
CLI
cpz-ai broker list
cpz-ai broker use alpaca --env paper
cpz-ai order submit --symbol AAPL --side buy --qty 10 --type market --tif day
cpz-ai order get --id <id>
cpz-ai positions
cpz-ai stream quotes --symbols AAPL,MSFT
Error handling
Catch cpz.common.errors.CPZBrokerError. Broker errors are mapped to CPZ errors.
Logging & Redaction
Structured JSON logging via structlog, with redaction of Authorization, ALPACA_API_SECRET_KEY, and similar.
Configure level via CPZ_LOG_LEVEL.
Testing & Quality
make test(coverage goal ≥ 85%)mypy --strict
Contributing
Style: ruff/black/isort, pre-commit, branch naming. See CONTRIBUTING.md.
Versioning & Release
Bump version in pyproject.toml, build, and publish to PyPI.
Roadmap
Next brokers: IBKR, Tradier, …
Security
See SECURITY.md. No LICENSE file is included intentionally.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cpz_ai-0.1.1.tar.gz.
File metadata
- Download URL: cpz_ai-0.1.1.tar.gz
- Upload date:
- Size: 17.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7914f406bc740958a9244b4ab8fee28c8fc2871494fad55cc6aec2ce0b61fa11
|
|
| MD5 |
dcbe6d228969bc2e171a7d1b82ded1d6
|
|
| BLAKE2b-256 |
32235c92b8f1139c87f1ebd06f33cefbdb7a503a31cf5c4d4e342cc4f2eed314
|
File details
Details for the file cpz_ai-0.1.1-py3-none-any.whl.
File metadata
- Download URL: cpz_ai-0.1.1-py3-none-any.whl
- Upload date:
- Size: 22.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b29889fde14e35b299b745b2b528bd849aa9d8d64d68897fddba08696a0382b2
|
|
| MD5 |
46d10f3e76cb7db313fd91943748ab89
|
|
| BLAKE2b-256 |
5908eae8ff8161817b4f41f57a2185b59df4644c96eb8791a685f1a0dc54c634
|