ctrader-api-client 0.4.0__tar.gz → 0.4.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.
Files changed (92) hide show
  1. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/PKG-INFO +1 -1
  2. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/pyproject.toml +1 -1
  3. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/src/ctrader_api_client/models/symbol.py +12 -0
  4. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/tests/unit/models/test_symbol.py +19 -0
  5. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/uv.lock +1 -1
  6. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/.claude/settings.local.json +0 -0
  7. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/.github/workflows/docs.yml +0 -0
  8. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/.gitignore +0 -0
  9. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/.pre-commit-config.yaml +0 -0
  10. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/.python-version +0 -0
  11. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/Justfile +0 -0
  12. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/LICENSE +0 -0
  13. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/README.md +0 -0
  14. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/docs/api/accounts.md +0 -0
  15. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/docs/api/client.md +0 -0
  16. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/docs/api/enums.md +0 -0
  17. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/docs/api/events.md +0 -0
  18. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/docs/api/market-data.md +0 -0
  19. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/docs/api/models.md +0 -0
  20. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/docs/api/symbols.md +0 -0
  21. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/docs/api/trading.md +0 -0
  22. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/docs/getting-started.md +0 -0
  23. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/docs/index.md +0 -0
  24. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/mkdocs.yml +0 -0
  25. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/protos/SOURCE +0 -0
  26. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/protos/VERSION +0 -0
  27. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/protos/update.sh +0 -0
  28. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/protos/vendor/OpenApiCommonMessages.proto +0 -0
  29. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/protos/vendor/OpenApiCommonModelMessages.proto +0 -0
  30. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/protos/vendor/OpenApiMessages.proto +0 -0
  31. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/protos/vendor/OpenApiModelMessages.proto +0 -0
  32. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/scripts/fix_proto_imports.py +0 -0
  33. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/src/ctrader_api_client/__init__.py +0 -0
  34. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/src/ctrader_api_client/_internal/__init__.py +0 -0
  35. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/src/ctrader_api_client/_internal/messages.py +0 -0
  36. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/src/ctrader_api_client/_internal/proto/OpenApiCommonMessages.py +0 -0
  37. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/src/ctrader_api_client/_internal/proto/OpenApiCommonModelMessages.py +0 -0
  38. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/src/ctrader_api_client/_internal/proto/OpenApiMessages.py +0 -0
  39. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/src/ctrader_api_client/_internal/proto/OpenApiModelMessages.py +0 -0
  40. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/src/ctrader_api_client/_internal/proto/__init__.py +0 -0
  41. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/src/ctrader_api_client/_internal/serialization.py +0 -0
  42. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/src/ctrader_api_client/api/__init__.py +0 -0
  43. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/src/ctrader_api_client/api/accounts.py +0 -0
  44. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/src/ctrader_api_client/api/market_data.py +0 -0
  45. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/src/ctrader_api_client/api/symbols.py +0 -0
  46. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/src/ctrader_api_client/api/trading.py +0 -0
  47. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/src/ctrader_api_client/auth/__init__.py +0 -0
  48. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/src/ctrader_api_client/auth/credentials.py +0 -0
  49. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/src/ctrader_api_client/auth/manager.py +0 -0
  50. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/src/ctrader_api_client/client.py +0 -0
  51. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/src/ctrader_api_client/config.py +0 -0
  52. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/src/ctrader_api_client/connection/__init__.py +0 -0
  53. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/src/ctrader_api_client/connection/heartbeat.py +0 -0
  54. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/src/ctrader_api_client/connection/protocol.py +0 -0
  55. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/src/ctrader_api_client/connection/transport.py +0 -0
  56. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/src/ctrader_api_client/enums.py +0 -0
  57. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/src/ctrader_api_client/events/__init__.py +0 -0
  58. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/src/ctrader_api_client/events/emitter.py +0 -0
  59. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/src/ctrader_api_client/events/router.py +0 -0
  60. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/src/ctrader_api_client/events/types.py +0 -0
  61. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/src/ctrader_api_client/exceptions.py +0 -0
  62. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/src/ctrader_api_client/models/__init__.py +0 -0
  63. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/src/ctrader_api_client/models/_base.py +0 -0
  64. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/src/ctrader_api_client/models/account.py +0 -0
  65. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/src/ctrader_api_client/models/deal.py +0 -0
  66. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/src/ctrader_api_client/models/market_data.py +0 -0
  67. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/src/ctrader_api_client/models/order.py +0 -0
  68. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/src/ctrader_api_client/models/position.py +0 -0
  69. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/src/ctrader_api_client/models/requests.py +0 -0
  70. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/src/ctrader_api_client/py.typed +0 -0
  71. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/tests/unit/_internal/test_messages.py +0 -0
  72. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/tests/unit/_internal/test_serialization.py +0 -0
  73. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/tests/unit/api/conftest.py +0 -0
  74. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/tests/unit/api/test_accounts.py +0 -0
  75. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/tests/unit/api/test_market_data_api.py +0 -0
  76. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/tests/unit/api/test_symbols.py +0 -0
  77. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/tests/unit/api/test_trading.py +0 -0
  78. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/tests/unit/auth/test_credentials.py +0 -0
  79. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/tests/unit/auth/test_manager.py +0 -0
  80. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/tests/unit/connection/test_heartbeat.py +0 -0
  81. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/tests/unit/connection/test_protocol.py +0 -0
  82. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/tests/unit/connection/test_transport.py +0 -0
  83. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/tests/unit/events/test_emitter.py +0 -0
  84. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/tests/unit/events/test_router.py +0 -0
  85. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/tests/unit/events/test_types.py +0 -0
  86. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/tests/unit/models/test_account.py +0 -0
  87. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/tests/unit/models/test_deal.py +0 -0
  88. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/tests/unit/models/test_market_data.py +0 -0
  89. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/tests/unit/models/test_order.py +0 -0
  90. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/tests/unit/models/test_position.py +0 -0
  91. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/tests/unit/models/test_requests.py +0 -0
  92. {ctrader_api_client-0.4.0 → ctrader_api_client-0.4.1}/tests/unit/test_client.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ctrader-api-client
3
- Version: 0.4.0
3
+ Version: 0.4.1
4
4
  Summary: API Client to interact with the cTrader Open API spec
5
5
  Author-email: Elio <elioachukri@pm.me>
6
6
  License-File: LICENSE
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "ctrader-api-client"
3
- version = "0.4.0"
3
+ version = "0.4.1"
4
4
  description = "API Client to interact with the cTrader Open API spec"
5
5
  readme = "README.md"
6
6
  authors = [
@@ -137,6 +137,18 @@ class Symbol(FrozenModel):
137
137
  """
138
138
  return int(lots * self.lot_size)
139
139
 
140
+ def quantize_price(self, price: Decimal) -> Decimal:
141
+ """Quantize price to symbol's allowed decimal places
142
+
143
+ Args:
144
+ price: The price to quantize.
145
+
146
+ Returns:
147
+ Quantized price.
148
+ """
149
+ quantize_exp = Decimal(10) ** (-self.digits)
150
+ return price.quantize(quantize_exp)
151
+
140
152
  @classmethod
141
153
  def from_proto(cls, proto: ProtoOASymbol) -> Symbol:
142
154
  """Create Symbol from proto message.
@@ -215,3 +215,22 @@ class TestSymbol:
215
215
  volume = symbol.lots_to_volume(original_lots)
216
216
  result = symbol.volume_to_lots(volume)
217
217
  assert result == original_lots
218
+
219
+ def test_quantize(self):
220
+ """Test that quantize correctly rounds to the symbol's digits."""
221
+ symbol = Symbol(
222
+ symbol_id=1,
223
+ digits=5,
224
+ pip_position=4,
225
+ lot_size=100000,
226
+ min_volume=1000,
227
+ max_volume=10000000,
228
+ step_volume=1000,
229
+ trading_mode=TradingMode.ENABLED,
230
+ swap_long=Decimal("0.0"),
231
+ swap_short=Decimal("0.0"),
232
+ )
233
+
234
+ assert symbol.quantize_price(Decimal("1.23456789")) == Decimal("1.23457")
235
+ assert symbol.quantize_price(Decimal("1.23456123")) == Decimal("1.23456")
236
+ assert symbol.quantize_price(Decimal("1.23456499")) == Decimal("1.23456")
@@ -201,7 +201,7 @@ wheels = [
201
201
 
202
202
  [[package]]
203
203
  name = "ctrader-api-client"
204
- version = "0.4.0"
204
+ version = "0.4.1"
205
205
  source = { editable = "." }
206
206
  dependencies = [
207
207
  { name = "anyio" },