Qubx 0.6.35__tar.gz → 0.6.36__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.

Potentially problematic release.


This version of Qubx might be problematic. Click here for more details.

Files changed (158) hide show
  1. {qubx-0.6.35 → qubx-0.6.36}/PKG-INFO +1 -1
  2. {qubx-0.6.35 → qubx-0.6.36}/pyproject.toml +1 -1
  3. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/connectors/ccxt/exchanges/bitfinex/bitfinex.py +23 -8
  4. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/connectors/ccxt/utils.py +2 -2
  5. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/connectors/tardis/data.py +1 -1
  6. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/utils/runner/runner.py +1 -1
  7. {qubx-0.6.35 → qubx-0.6.36}/LICENSE +0 -0
  8. {qubx-0.6.35 → qubx-0.6.36}/README.md +0 -0
  9. {qubx-0.6.35 → qubx-0.6.36}/build.py +0 -0
  10. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/__init__.py +0 -0
  11. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/_nb_magic.py +0 -0
  12. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/backtester/__init__.py +0 -0
  13. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/backtester/account.py +0 -0
  14. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/backtester/broker.py +0 -0
  15. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/backtester/data.py +0 -0
  16. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/backtester/management.py +0 -0
  17. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/backtester/ome.py +0 -0
  18. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/backtester/optimization.py +0 -0
  19. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/backtester/runner.py +0 -0
  20. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/backtester/simulated_data.py +0 -0
  21. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/backtester/simulated_exchange.py +0 -0
  22. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/backtester/simulator.py +0 -0
  23. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/backtester/utils.py +0 -0
  24. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/cli/__init__.py +0 -0
  25. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/cli/commands.py +0 -0
  26. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/cli/deploy.py +0 -0
  27. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/cli/misc.py +0 -0
  28. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/cli/release.py +0 -0
  29. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/connectors/ccxt/__init__.py +0 -0
  30. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/connectors/ccxt/account.py +0 -0
  31. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/connectors/ccxt/broker.py +0 -0
  32. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/connectors/ccxt/data.py +0 -0
  33. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/connectors/ccxt/exceptions.py +0 -0
  34. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/connectors/ccxt/exchanges/__init__.py +0 -0
  35. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/connectors/ccxt/exchanges/binance/broker.py +0 -0
  36. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/connectors/ccxt/exchanges/binance/exchange.py +0 -0
  37. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/connectors/ccxt/exchanges/bitfinex/bitfinex_account.py +0 -0
  38. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/connectors/ccxt/exchanges/kraken/kraken.py +0 -0
  39. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/connectors/ccxt/factory.py +0 -0
  40. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/connectors/ccxt/reader.py +0 -0
  41. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/connectors/tardis/utils.py +0 -0
  42. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/core/__init__.py +0 -0
  43. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/core/account.py +0 -0
  44. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/core/basics.py +0 -0
  45. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/core/context.py +0 -0
  46. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/core/deque.py +0 -0
  47. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/core/errors.py +0 -0
  48. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/core/exceptions.py +0 -0
  49. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/core/helpers.py +0 -0
  50. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/core/initializer.py +0 -0
  51. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/core/interfaces.py +0 -0
  52. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/core/loggers.py +0 -0
  53. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/core/lookups.py +0 -0
  54. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/core/metrics.py +0 -0
  55. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/core/mixins/__init__.py +0 -0
  56. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/core/mixins/market.py +0 -0
  57. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/core/mixins/processing.py +0 -0
  58. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/core/mixins/subscription.py +0 -0
  59. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/core/mixins/trading.py +0 -0
  60. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/core/mixins/universe.py +0 -0
  61. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/core/series.pxd +0 -0
  62. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/core/series.pyi +0 -0
  63. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/core/series.pyx +0 -0
  64. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/core/utils.pyi +0 -0
  65. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/core/utils.pyx +0 -0
  66. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/data/__init__.py +0 -0
  67. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/data/composite.py +0 -0
  68. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/data/helpers.py +0 -0
  69. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/data/hft.py +0 -0
  70. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/data/readers.py +0 -0
  71. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/data/registry.py +0 -0
  72. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/data/tardis.py +0 -0
  73. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/emitters/__init__.py +0 -0
  74. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/emitters/base.py +0 -0
  75. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/emitters/composite.py +0 -0
  76. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/emitters/csv.py +0 -0
  77. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/emitters/prometheus.py +0 -0
  78. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/emitters/questdb.py +0 -0
  79. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/exporters/__init__.py +0 -0
  80. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/exporters/composite.py +0 -0
  81. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/exporters/formatters/__init__.py +0 -0
  82. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/exporters/formatters/base.py +0 -0
  83. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/exporters/formatters/incremental.py +0 -0
  84. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/exporters/formatters/slack.py +0 -0
  85. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/exporters/redis_streams.py +0 -0
  86. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/exporters/slack.py +0 -0
  87. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/features/__init__.py +0 -0
  88. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/features/core.py +0 -0
  89. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/features/orderbook.py +0 -0
  90. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/features/price.py +0 -0
  91. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/features/trades.py +0 -0
  92. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/features/utils.py +0 -0
  93. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/gathering/simplest.py +0 -0
  94. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/health/__init__.py +0 -0
  95. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/health/base.py +0 -0
  96. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/math/__init__.py +0 -0
  97. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/math/stats.py +0 -0
  98. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/notifications/__init__.py +0 -0
  99. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/notifications/composite.py +0 -0
  100. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/notifications/slack.py +0 -0
  101. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/pandaz/__init__.py +0 -0
  102. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/pandaz/ta.py +0 -0
  103. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/pandaz/utils.py +0 -0
  104. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/resources/_build.py +0 -0
  105. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/resources/instruments/symbols-binance.cm.json +0 -0
  106. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/resources/instruments/symbols-binance.json +0 -0
  107. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/resources/instruments/symbols-binance.um.json +0 -0
  108. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/resources/instruments/symbols-bitfinex.f.json +0 -0
  109. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/resources/instruments/symbols-bitfinex.json +0 -0
  110. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/resources/instruments/symbols-kraken.f.json +0 -0
  111. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/resources/instruments/symbols-kraken.json +0 -0
  112. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/restarts/__init__.py +0 -0
  113. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/restarts/state_resolvers.py +0 -0
  114. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/restarts/time_finders.py +0 -0
  115. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/restorers/__init__.py +0 -0
  116. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/restorers/balance.py +0 -0
  117. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/restorers/factory.py +0 -0
  118. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/restorers/interfaces.py +0 -0
  119. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/restorers/position.py +0 -0
  120. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/restorers/signal.py +0 -0
  121. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/restorers/state.py +0 -0
  122. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/restorers/utils.py +0 -0
  123. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/ta/__init__.py +0 -0
  124. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/ta/indicators.pxd +0 -0
  125. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/ta/indicators.pyi +0 -0
  126. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/ta/indicators.pyx +0 -0
  127. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/trackers/__init__.py +0 -0
  128. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/trackers/advanced.py +0 -0
  129. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/trackers/composite.py +0 -0
  130. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/trackers/rebalancers.py +0 -0
  131. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/trackers/riskctrl.py +0 -0
  132. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/trackers/sizers.py +0 -0
  133. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/utils/__init__.py +0 -0
  134. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/utils/_pyxreloader.py +0 -0
  135. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/utils/charting/lookinglass.py +0 -0
  136. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/utils/charting/mpl_helpers.py +0 -0
  137. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/utils/collections.py +0 -0
  138. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/utils/marketdata/binance.py +0 -0
  139. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/utils/marketdata/ccxt.py +0 -0
  140. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/utils/marketdata/dukas.py +0 -0
  141. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/utils/misc.py +0 -0
  142. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/utils/ntp.py +0 -0
  143. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/utils/numbers_utils.py +0 -0
  144. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/utils/orderbook.py +0 -0
  145. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/utils/plotting/__init__.py +0 -0
  146. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/utils/plotting/dashboard.py +0 -0
  147. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/utils/plotting/data.py +0 -0
  148. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/utils/plotting/interfaces.py +0 -0
  149. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/utils/plotting/renderers/__init__.py +0 -0
  150. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/utils/plotting/renderers/plotly.py +0 -0
  151. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/utils/questdb.py +0 -0
  152. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/utils/runner/__init__.py +0 -0
  153. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/utils/runner/_jupyter_runner.pyt +0 -0
  154. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/utils/runner/accounts.py +0 -0
  155. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/utils/runner/configs.py +0 -0
  156. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/utils/runner/factory.py +0 -0
  157. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/utils/time.py +0 -0
  158. {qubx-0.6.35 → qubx-0.6.36}/src/qubx/utils/version.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: Qubx
3
- Version: 0.6.35
3
+ Version: 0.6.36
4
4
  Summary: Qubx - Quantitative Trading Framework
5
5
  Author: Dmitry Marienko
6
6
  Author-email: dmitry.marienko@xlydian.com
@@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api"
4
4
 
5
5
  [tool.poetry]
6
6
  name = "Qubx"
7
- version = "0.6.35"
7
+ version = "0.6.36"
8
8
  description = "Qubx - Quantitative Trading Framework"
9
9
  authors = [ "Dmitry Marienko <dmitry.marienko@xlydian.com>", "Yuriy Arabskyy <yuriy.arabskyy@xlydian.com>",]
10
10
  readme = "README.md"
@@ -78,6 +78,10 @@ class BitfinexF(cxp.bitfinex):
78
78
  # GTX is not supported by bitfinex, so we need to convert it to PO
79
79
  params["timeInForce"] = "PO"
80
80
  params["postOnly"] = True
81
+
82
+ if "lev" not in params:
83
+ params["lev"] = 2
84
+
81
85
  response = await super().create_order(symbol, type, side, amount, price, params)
82
86
  return response
83
87
 
@@ -90,6 +94,9 @@ class BitfinexF(cxp.bitfinex):
90
94
  params["timeInForce"] = "PO"
91
95
  params["postOnly"] = True
92
96
 
97
+ if "lev" not in params:
98
+ params["lev"] = 2
99
+
93
100
  await self.load_markets()
94
101
  market = self.market(symbol)
95
102
  request = self.create_order_request(symbol, type, side, amount, price, params)
@@ -98,14 +105,22 @@ class BitfinexF(cxp.bitfinex):
98
105
  # request["cid"] = request["newClientOrderId"]
99
106
  # del request["newClientOrderId"]
100
107
 
101
- await self.bfx.wss.inputs.submit_order(
102
- type=request["type"],
103
- symbol=request["symbol"],
104
- amount=float(request["amount"]),
105
- price=float(request["price"]),
106
- flags=request["flags"],
107
- # cid=int(request["cid"]),
108
- )
108
+ _params = {
109
+ "type": request["type"],
110
+ "symbol": request["symbol"],
111
+ "amount": float(request["amount"]),
112
+ "lev": request["lev"],
113
+ }
114
+
115
+ if "price" in request:
116
+ _params["price"] = float(request["price"])
117
+ else:
118
+ _params["price"] = None
119
+
120
+ if "flags" in request:
121
+ _params["flags"] = request["flags"]
122
+
123
+ await self.bfx.wss.inputs.submit_order(**_params)
109
124
  return self.safe_order({"info": {}}, market) # type: ignore
110
125
 
111
126
  async def cancel_order_ws(self, id: str, symbol: Str = None, params={}) -> Order | None:
@@ -54,7 +54,7 @@ def ccxt_convert_order_info(instrument: Instrument, raw: dict[str, Any]) -> Orde
54
54
  type=_type,
55
55
  instrument=instrument,
56
56
  time=pd.Timestamp(raw["timestamp"], unit="ms"), # type: ignore
57
- quantity=amnt,
57
+ quantity=abs(amnt) * (-1 if side == "SELL" else 1),
58
58
  price=float(price) if price is not None else 0.0,
59
59
  side=side,
60
60
  status=status.upper(),
@@ -157,7 +157,7 @@ def ccxt_convert_positions(
157
157
  )
158
158
  pos = Position(
159
159
  instrument=instr,
160
- quantity=info["contracts"] * (-1 if info["side"] == "short" else 1),
160
+ quantity=abs(info["contracts"]) * (-1 if info["side"] == "short" else 1),
161
161
  pos_average_price=info["entryPrice"],
162
162
  )
163
163
  if info.get("markPrice", None) is not None:
@@ -454,7 +454,7 @@ class TardisDataProvider(IDataProvider):
454
454
 
455
455
  # Record data arrival for health monitoring
456
456
  tardis_type = data["type"]
457
- tardis_name = data["name"]
457
+ tardis_name = data["name"] if "name" in data else ""
458
458
  qubx_type = self._map_tardis_type_to_data_type(tardis_type)
459
459
  if qubx_type:
460
460
  self._health_monitor.record_data_arrival(qubx_type, dt_64(msg_time, "ns"))
@@ -536,7 +536,7 @@ def _create_broker(
536
536
  enable_mm=_enable_mm,
537
537
  )
538
538
  return get_ccxt_broker(
539
- exchange_name, exchange, channel, time_provider, account, data_provider, **exchange_config.params
539
+ exchange_name, exchange, channel, time_provider, account, data_provider, **params
540
540
  )
541
541
  case "paper":
542
542
  assert isinstance(account, SimulatedAccountProcessor)
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
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
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