From f95f904f0aa9e737bc8d00917dba15e5f05a63bc Mon Sep 17 00:00:00 2001 From: Jeff West Date: Sun, 4 Oct 2026 10:57:30 -0500 Subject: [PATCH 1/2] chore(release): v4.4.0 Make Features an enum.StrEnum. str() and f-strings of a member return the value (for example "orderbook") instead of "Features.ORDERBOOK". Members, values, string equality, hashing, .value, and JSON are unchanged. Refs #155 --- .secrets.baseline | 4 ++-- CHANGELOG.md | 2 ++ README.md | 4 ++-- docs/changelog.md | 8 ++++++++ docs/index.md | 4 ++-- examples/README.md | 4 ++-- src/project_x_py/__init__.py | 6 +++--- src/project_x_py/client/http.py | 2 +- src/project_x_py/indicators/__init__.py | 2 +- src/project_x_py/statistics/__init__.py | 2 +- 10 files changed, 24 insertions(+), 14 deletions(-) diff --git a/.secrets.baseline b/.secrets.baseline index 94c6da3..470b7e8 100644 --- a/.secrets.baseline +++ b/.secrets.baseline @@ -133,7 +133,7 @@ "filename": "CHANGELOG.md", "hashed_secret": "89a6cfe2a229151e8055abee107d45ed087bbb4f", "is_verified": false, - "line_number": 2543 + "line_number": 2553 } ], "README.md": [ @@ -216,5 +216,5 @@ } ] }, - "generated_at": "2026-09-29T11:43:33Z" + "generated_at": "2026-10-04T15:46:59Z" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 03ecd1c..f5b93a6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [4.4.0] - 2026-10-04 + ### Changed - `Features` is now an `enum.StrEnum`. `str(Features.X)` and f-strings return diff --git a/README.md b/README.md index eea3104..b2ee5bf 100644 --- a/README.md +++ b/README.md @@ -27,9 +27,9 @@ A **high-performance async Python SDK** for the [ProjectX Trading Platform](http This Python SDK acts as a bridge between your trading strategies and the ProjectX platform, handling all the complex API interactions, data processing, and real-time connectivity. -## 🚀 v4.3.3 - cachetools 7 runtime dependency +## 🚀 v4.4.0 - Features is a StrEnum -**Latest Version**: v4.3.3 — runtime `cachetools` is 7.2.0 (`>=7.1.7`). Use remains `TTLCache` only, with typing updated for cachetools 7 stubs (#150, #119). v4.3.2 skips the bounded-statistics counter sweep in `RealtimeDataManager.cleanup()` (#98). v4.3.1 coalesces `quote_update` / `market_depth` forwards so an RTH-open flood cannot starve `NEW_BAR` (#143). +**Latest Version**: v4.4.0 — `Features` is an `enum.StrEnum`. `str()` and f-strings of a member return the value (for example `"orderbook"`) instead of `"Features.ORDERBOOK"`. Equality, `.value`, and JSON are unchanged (#155). v4.3.3 bumps runtime cachetools to 7.2.0 (#150, #119). v4.3.2 skips the bounded-statistics counter sweep in `RealtimeDataManager.cleanup()` (#98). **Key changes**: - Official defaults: `https://api.topstepx.com` and `https://rtc.topstepx.com` diff --git a/docs/changelog.md b/docs/changelog.md index 77a7dae..29b4be9 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -9,6 +9,14 @@ The canonical changelog is the repository root [CHANGELOG.md](https://github.com ## [Unreleased] +## [4.4.0] - 2026-10-04 + +`Features` is now an `enum.StrEnum`. `str()` and f-strings return the +member value (for example `"orderbook"`) instead of `"Features.ORDERBOOK"`. +Equality with strings, `.value`, and JSON serialization are unchanged +(#155). `src/` formats under ruff 0.16. See the root CHANGELOG for the +full note. + ## [4.3.3] - 2026-09-29 Runtime `cachetools` is 7.2.0 (`>=7.1.7`). Use remains `TTLCache` only; diff --git a/docs/index.md b/docs/index.md index cd97ad5..22c8bc7 100644 --- a/docs/index.md +++ b/docs/index.md @@ -7,8 +7,8 @@ **project-x-py** is a high-performance **async Python SDK** for the [ProjectX Trading Platform](https://www.projectx.com/) Gateway API. This library enables developers to build sophisticated trading strategies and applications by providing comprehensive async access to futures trading operations, real-time market data, Level 2 orderbook analysis, and 64 named indicators (Polars implementations; **not** a full TA-Lib port). -!!! note "Version 4.3.3" - **Latest Release**: TopstepX-only Gateway SDK (`api.topstepx.com` / `rtc.topstepx.com`) with native brackets, risk OCO and entry-order gating, stale-feed watchdog, `OrderSubmissionUncertainError`, and 64 named Polars indicators (not a full TA-Lib port). v4.3.3 bumps runtime cachetools to 7.2.0 (>=7.1.7); TTLCache use is unchanged and typing matches cachetools 7 stubs (#150, #119). v4.3.2 skips the bounded-statistics counter sweep in `RealtimeDataManager.cleanup()` so teardown does not read counters that are about to be discarded (#98). v4.3.1 coalesces `quote_update` / `market_depth` forwards so an RTH-open flood cannot starve `NEW_BAR` (#143). v4.3.0 added `aggregate_session_bars()` and reconnect health fixes (#140, #141). See the [v3 → v4 migration guide](migration/v3-to-v4.md). +!!! note "Version 4.4.0" + **Latest Release**: TopstepX-only Gateway SDK (`api.topstepx.com` / `rtc.topstepx.com`) with native brackets, risk OCO and entry-order gating, stale-feed watchdog, `OrderSubmissionUncertainError`, and 64 named Polars indicators (not a full TA-Lib port). v4.4.0 makes `Features` an `enum.StrEnum`: `str()` and f-strings return the member value (for example `"orderbook"`) instead of `"Features.ORDERBOOK"`; equality, `.value`, and JSON are unchanged (#155). v4.3.3 bumps runtime cachetools to 7.2.0 (>=7.1.7); TTLCache use is unchanged and typing matches cachetools 7 stubs (#150, #119). v4.3.2 skips the bounded-statistics counter sweep in `RealtimeDataManager.cleanup()` so teardown does not read counters that are about to be discarded (#98). v4.3.1 coalesces `quote_update` / `market_depth` forwards so an RTH-open flood cannot starve `NEW_BAR` (#143). v4.3.0 added `aggregate_session_bars()` and reconnect health fixes (#140, #141). See the [v3 → v4 migration guide](migration/v3-to-v4.md). !!! note "Stable Production Release" This project maintains strict semantic versioning. v4.0.0 is a major release with documented breaking changes. Deprecation warnings are provided for at least 2 minor versions before removal. diff --git a/examples/README.md b/examples/README.md index 59b5341..223e34c 100644 --- a/examples/README.md +++ b/examples/README.md @@ -1,6 +1,6 @@ -# ProjectX Python SDK Examples (v4.3.3) +# ProjectX Python SDK Examples (v4.4.0) -This directory contains working examples for the ProjectX Python SDK v4.3.3. All examples use **MNQ (Micro E-mini NASDAQ)** contracts to minimize risk during testing. +This directory contains working examples for the ProjectX Python SDK v4.4.0. All examples use **MNQ (Micro E-mini NASDAQ)** contracts to minimize risk during testing. **Note:** v4.0 is the TopstepX Gateway revival. Use `TradingSuite.create()`, `await suite.get_stats()` / `export_stats()`, and see `docs/migration/v3-to-v4.md` for breaking changes. diff --git a/src/project_x_py/__init__.py b/src/project_x_py/__init__.py index 7fe6bb5..4aacd6d 100644 --- a/src/project_x_py/__init__.py +++ b/src/project_x_py/__init__.py @@ -3,7 +3,7 @@ Author: @TexasCoding Date: 2026-08-29 -Version: 4.3.3 - bump cachetools to 7.2.0 (#150) +Version: 4.4.0 - Features is a StrEnum (#155) Overview: A comprehensive Python SDK for the ProjectX Trading Platform Gateway API, providing @@ -96,7 +96,7 @@ It provides the infrastructure to help developers create their own trading applications that integrate with the ProjectX platform. -Version: 4.3.3 +Version: 4.4.0 Author: TexasCoding See Also: @@ -109,7 +109,7 @@ - `utils`: Utility functions and calculations """ -__version__ = "4.3.3" +__version__ = "4.4.0" __author__ = "TexasCoding" # Core client classes - renamed from Async* to standard names diff --git a/src/project_x_py/client/http.py b/src/project_x_py/client/http.py index 029501d..639f6a2 100644 --- a/src/project_x_py/client/http.py +++ b/src/project_x_py/client/http.py @@ -159,7 +159,7 @@ async def _create_client(self: "ProjectXClientProtocol") -> httpx.AsyncClient: verify=True, follow_redirects=False, headers={ - "User-Agent": "ProjectX-Python-SDK/4.3.3", + "User-Agent": "ProjectX-Python-SDK/4.4.0", "Accept": "application/json", }, ) diff --git a/src/project_x_py/indicators/__init__.py b/src/project_x_py/indicators/__init__.py index f35d29d..e1ae0dd 100644 --- a/src/project_x_py/indicators/__init__.py +++ b/src/project_x_py/indicators/__init__.py @@ -206,7 +206,7 @@ ) # Version info -__version__ = "4.3.3" +__version__ = "4.4.0" __author__ = "TexasCoding" diff --git a/src/project_x_py/statistics/__init__.py b/src/project_x_py/statistics/__init__.py index 3ea1daf..17abbaa 100644 --- a/src/project_x_py/statistics/__init__.py +++ b/src/project_x_py/statistics/__init__.py @@ -57,4 +57,4 @@ "CleanupScheduler", ] -__version__ = "4.3.3" +__version__ = "4.4.0" From 175c6d6e48df9336475b5836240f0a3beacbd734 Mon Sep 17 00:00:00 2001 From: Jeff West Date: Sun, 4 Oct 2026 11:00:46 -0500 Subject: [PATCH 2/2] docs(changelog): #154 is still blocked after #155 (mypy under polars 1.44) #155 clears the ruff 0.16 lint finding in Dependabot #154, but #154 stays blocked on mypy errors from its polars 1.44.2 bump, so don't say #155 unblocks it. --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f5b93a6..929022d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,7 +24,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 the value (e.g. `"orderbook"`) instead of `"Features.X"`. Equality with strings, `.value`, and JSON serialization are unchanged. `src/` also formats under ruff 0.16 (`overlap.py` WMA lambda, Python fences in - `utils/README.md`), which unblocks Dependabot #154. + `utils/README.md`), which clears the ruff 0.16 lint in Dependabot #154. ## [4.3.3] - 2026-09-29