ctrader-api-client 0.2.0__tar.gz → 0.2.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/PKG-INFO +1 -1
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/pyproject.toml +1 -1
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/events/router.py +1 -1
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/models/market_data.py +15 -2
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/uv.lock +1 -1
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/.claude/settings.local.json +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/.github/workflows/docs.yml +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/.gitignore +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/.pre-commit-config.yaml +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/.python-version +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/Justfile +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/LICENSE +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/README.md +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/docs/api/accounts.md +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/docs/api/client.md +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/docs/api/enums.md +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/docs/api/events.md +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/docs/api/market-data.md +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/docs/api/models.md +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/docs/api/symbols.md +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/docs/api/trading.md +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/docs/getting-started.md +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/docs/index.md +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/mkdocs.yml +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/protos/SOURCE +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/protos/VERSION +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/protos/update.sh +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/protos/vendor/.gitkeep +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/protos/vendor/OpenApiCommonMessages.proto +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/protos/vendor/OpenApiCommonModelMessages.proto +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/protos/vendor/OpenApiMessages.proto +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/protos/vendor/OpenApiModelMessages.proto +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/scripts/fix_proto_imports.py +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/__init__.py +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/_internal/__init__.py +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/_internal/messages.py +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/_internal/proto/OpenApiCommonMessages.py +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/_internal/proto/OpenApiCommonModelMessages.py +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/_internal/proto/OpenApiMessages.py +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/_internal/proto/OpenApiModelMessages.py +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/_internal/proto/__init__.py +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/_internal/serialization.py +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/api/__init__.py +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/api/accounts.py +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/api/market_data.py +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/api/symbols.py +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/api/trading.py +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/auth/__init__.py +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/auth/credentials.py +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/auth/manager.py +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/client.py +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/config.py +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/connection/__init__.py +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/connection/heartbeat.py +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/connection/protocol.py +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/connection/transport.py +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/enums.py +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/events/__init__.py +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/events/emitter.py +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/events/types.py +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/exceptions.py +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/models/__init__.py +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/models/_base.py +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/models/account.py +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/models/deal.py +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/models/order.py +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/models/position.py +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/models/requests.py +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/models/symbol.py +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/py.typed +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/tests/unit/_internal/test_messages.py +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/tests/unit/_internal/test_serialization.py +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/tests/unit/api/conftest.py +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/tests/unit/api/test_accounts.py +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/tests/unit/api/test_market_data_api.py +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/tests/unit/api/test_symbols.py +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/tests/unit/api/test_trading.py +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/tests/unit/auth/test_credentials.py +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/tests/unit/auth/test_manager.py +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/tests/unit/connection/test_heartbeat.py +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/tests/unit/connection/test_protocol.py +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/tests/unit/connection/test_transport.py +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/tests/unit/events/test_emitter.py +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/tests/unit/events/test_router.py +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/tests/unit/events/test_types.py +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/tests/unit/models/test_account.py +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/tests/unit/models/test_deal.py +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/tests/unit/models/test_market_data.py +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/tests/unit/models/test_order.py +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/tests/unit/models/test_position.py +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/tests/unit/models/test_requests.py +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/tests/unit/models/test_symbol.py +0 -0
- {ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/tests/unit/test_client.py +0 -0
{ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/events/router.py
RENAMED
|
@@ -190,7 +190,7 @@ class EventRouter:
|
|
|
190
190
|
bid=proto.bid / 1e5 if proto.bid else None,
|
|
191
191
|
ask=proto.ask / 1e5 if proto.ask else None,
|
|
192
192
|
timestamp=self._timestamp_to_datetime(proto.timestamp) if proto.timestamp else datetime.now(UTC),
|
|
193
|
-
trendbar=Trendbar.from_proto(proto.trendbar[0]) if proto.trendbar else None,
|
|
193
|
+
trendbar=Trendbar.from_proto(proto.trendbar[0], bid_price=proto.bid) if proto.trendbar else None,
|
|
194
194
|
)
|
|
195
195
|
await self._emitter.emit(event)
|
|
196
196
|
|
{ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/models/market_data.py
RENAMED
|
@@ -56,11 +56,13 @@ class Trendbar(FrozenModel):
|
|
|
56
56
|
volume: int
|
|
57
57
|
|
|
58
58
|
@classmethod
|
|
59
|
-
def from_proto(cls, proto: ProtoOATrendbar) -> Trendbar:
|
|
59
|
+
def from_proto(cls, proto: ProtoOATrendbar, bid_price: float | None = None) -> Trendbar:
|
|
60
60
|
"""Create Trendbar from proto message.
|
|
61
61
|
|
|
62
62
|
Args:
|
|
63
63
|
proto: The proto message.
|
|
64
|
+
bid_price: Optional bid price to use for specifying the close price since the API never provides delta_close
|
|
65
|
+
on live trendbar updates.
|
|
64
66
|
|
|
65
67
|
Returns:
|
|
66
68
|
A new Trendbar instance.
|
|
@@ -74,7 +76,18 @@ class Trendbar(FrozenModel):
|
|
|
74
76
|
low = proto.low
|
|
75
77
|
open_price = low + proto.delta_open
|
|
76
78
|
high = low + proto.delta_high
|
|
77
|
-
|
|
79
|
+
|
|
80
|
+
if bid_price is not None:
|
|
81
|
+
close = bid_price
|
|
82
|
+
else:
|
|
83
|
+
if proto.delta_close == 0:
|
|
84
|
+
# If delta_close is 0, it means the API did not provide a close price (e.g. for live updates).
|
|
85
|
+
# In this case, we must raise instead of silently returning an incorrect close price.
|
|
86
|
+
raise RuntimeError(
|
|
87
|
+
"delta_close missing from Trendbar proto and no bid_price was provided to use as fallback."
|
|
88
|
+
"Returning error as this is safer than silently returning an incorrect close price of low + 0."
|
|
89
|
+
)
|
|
90
|
+
close = low + proto.delta_close
|
|
78
91
|
|
|
79
92
|
return cls(
|
|
80
93
|
timestamp=ts,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/protos/vendor/OpenApiCommonMessages.proto
RENAMED
|
File without changes
|
{ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/protos/vendor/OpenApiCommonModelMessages.proto
RENAMED
|
File without changes
|
|
File without changes
|
{ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/protos/vendor/OpenApiModelMessages.proto
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/_internal/__init__.py
RENAMED
|
File without changes
|
{ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/_internal/messages.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/api/__init__.py
RENAMED
|
File without changes
|
{ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/api/accounts.py
RENAMED
|
File without changes
|
{ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/api/market_data.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/auth/__init__.py
RENAMED
|
File without changes
|
{ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/auth/credentials.py
RENAMED
|
File without changes
|
{ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/auth/manager.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/connection/__init__.py
RENAMED
|
File without changes
|
{ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/connection/heartbeat.py
RENAMED
|
File without changes
|
{ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/connection/protocol.py
RENAMED
|
File without changes
|
{ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/connection/transport.py
RENAMED
|
File without changes
|
|
File without changes
|
{ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/events/__init__.py
RENAMED
|
File without changes
|
{ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/events/emitter.py
RENAMED
|
File without changes
|
{ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/events/types.py
RENAMED
|
File without changes
|
|
File without changes
|
{ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/models/__init__.py
RENAMED
|
File without changes
|
{ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/models/_base.py
RENAMED
|
File without changes
|
{ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/models/account.py
RENAMED
|
File without changes
|
|
File without changes
|
{ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/models/order.py
RENAMED
|
File without changes
|
{ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/models/position.py
RENAMED
|
File without changes
|
{ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/models/requests.py
RENAMED
|
File without changes
|
{ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/src/ctrader_api_client/models/symbol.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/tests/unit/_internal/test_serialization.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/tests/unit/api/test_market_data_api.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/tests/unit/connection/test_heartbeat.py
RENAMED
|
File without changes
|
{ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/tests/unit/connection/test_protocol.py
RENAMED
|
File without changes
|
{ctrader_api_client-0.2.0 → ctrader_api_client-0.2.1}/tests/unit/connection/test_transport.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|