hyperquant 0.97__py3-none-any.whl → 0.98__py3-none-any.whl
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 hyperquant might be problematic. Click here for more details.
hyperquant/broker/bitmart.py
CHANGED
|
@@ -33,10 +33,19 @@ class Bitmart:
|
|
|
33
33
|
|
|
34
34
|
self.account_index = account_index
|
|
35
35
|
self.apis = apis
|
|
36
|
+
self.symbol_to_contract_id: dict[str, str] = {}
|
|
36
37
|
|
|
37
38
|
async def __aenter__(self) -> "Bitmart":
|
|
38
39
|
await self.update("detail")
|
|
39
40
|
asyncio.create_task(self.auto_refresh())
|
|
41
|
+
|
|
42
|
+
for entry in self.store.detail.find():
|
|
43
|
+
contract_id = entry.get("contract_id")
|
|
44
|
+
symbol = entry.get("name") or entry.get("display_name")
|
|
45
|
+
if contract_id is None or symbol is None:
|
|
46
|
+
continue
|
|
47
|
+
self.symbol_to_contract_id[str(symbol)] = str(contract_id)
|
|
48
|
+
|
|
40
49
|
return self
|
|
41
50
|
|
|
42
51
|
async def auto_refresh(self, sec=3600, test=False) -> None:
|
|
@@ -325,8 +334,8 @@ class Bitmart:
|
|
|
325
334
|
*,
|
|
326
335
|
category: Literal[1,2,"limit","market"] = "limit",
|
|
327
336
|
price: float,
|
|
328
|
-
|
|
329
|
-
|
|
337
|
+
qty: float,
|
|
338
|
+
side: Literal[1, 2, 3, 4, "open_long", "close_short", "close_long", "open_short", "buy", "sell"] = "open_long",
|
|
330
339
|
mode: Literal[1, 2, 3, 4, "gtc", "ioc", "fok", "maker_only", "maker-only", "post_only"] = "gtc",
|
|
331
340
|
open_type: Literal[1, 2, "cross", "isolated"] = "isolated",
|
|
332
341
|
leverage: int | str = 10,
|
|
@@ -334,8 +343,9 @@ class Bitmart:
|
|
|
334
343
|
trigger_price: float | None = None,
|
|
335
344
|
custom_id: int | str | None = None,
|
|
336
345
|
extra_params: dict[str, Any] | None = None,
|
|
337
|
-
) ->
|
|
346
|
+
) -> int:
|
|
338
347
|
"""Submit an order via ``submitOrder``.
|
|
348
|
+
返回值: order_id (int)
|
|
339
349
|
"""
|
|
340
350
|
|
|
341
351
|
contract_id = self.get_contract_id(symbol)
|
|
@@ -359,16 +369,16 @@ class Bitmart:
|
|
|
359
369
|
if contract_size_val <= 0:
|
|
360
370
|
raise ValueError(f"Invalid contract_size for {symbol}: {contract_size_str}")
|
|
361
371
|
|
|
362
|
-
contracts_float = float(
|
|
372
|
+
contracts_float = float(qty) / contract_size_val
|
|
363
373
|
contracts_int = int(round(contracts_float))
|
|
364
374
|
if contracts_int <= 0:
|
|
365
375
|
raise ValueError(
|
|
366
|
-
f"Volume too small for contract size ({contract_size_val}): volume={
|
|
376
|
+
f"Volume too small for contract size ({contract_size_val}): volume={qty}"
|
|
367
377
|
)
|
|
368
378
|
if abs(contracts_float - contracts_int) > 1e-8:
|
|
369
379
|
raise ValueError(
|
|
370
380
|
f"Volume must be a multiple of contract_size ({contract_size_val}). "
|
|
371
|
-
f"Received volume={
|
|
381
|
+
f"Received volume={qty} -> {contracts_float} contracts."
|
|
372
382
|
)
|
|
373
383
|
|
|
374
384
|
price_unit = detail.get("price_unit") or 1
|
|
@@ -396,7 +406,7 @@ class Bitmart:
|
|
|
396
406
|
price_fmt = f"{adjusted_price:.15f}".rstrip("0").rstrip(".") or "0"
|
|
397
407
|
|
|
398
408
|
way_value = self._normalize_enum(
|
|
399
|
-
|
|
409
|
+
side,
|
|
400
410
|
{
|
|
401
411
|
"open_long": 1,
|
|
402
412
|
"close_short": 2,
|
|
@@ -460,7 +470,10 @@ class Bitmart:
|
|
|
460
470
|
|
|
461
471
|
if resp.get("success") is False or resp.get("errno") not in (None, "OK"):
|
|
462
472
|
raise ValueError(f"Bitmart submitOrder error: {resp}")
|
|
463
|
-
|
|
473
|
+
|
|
474
|
+
# {"errno":"OK","message":"Success","data":{"order_id":3000236525013551},"success":true}
|
|
475
|
+
# 直接取order_id返回
|
|
476
|
+
return resp.get("data", {}).get("order_id")
|
|
464
477
|
|
|
465
478
|
async def cancel_order(
|
|
466
479
|
self,
|
|
@@ -381,7 +381,7 @@ class BitmartDataStore(DataStoreCollection):
|
|
|
381
381
|
@property
|
|
382
382
|
def orders(self) -> Orders:
|
|
383
383
|
"""用户订单 (`userAllOrders`)。
|
|
384
|
-
|
|
384
|
+
key: order_id
|
|
385
385
|
.. code:: json
|
|
386
386
|
|
|
387
387
|
[
|
|
@@ -510,19 +510,19 @@ class BitmartDataStore(DataStoreCollection):
|
|
|
510
510
|
{
|
|
511
511
|
"account_id": 14794011,
|
|
512
512
|
"coin_code": "USDT",
|
|
513
|
-
"available_vol": "
|
|
514
|
-
"cash_vol": "
|
|
513
|
+
"available_vol": "10.970977797397999999",
|
|
514
|
+
"cash_vol": "11.000536099457999999",
|
|
515
515
|
"freeze_vol": "0",
|
|
516
|
-
"realised_vol": "0",
|
|
517
|
-
"un_realised_vol": "0",
|
|
518
|
-
"earnings_vol": "0",
|
|
516
|
+
"realised_vol": "0.000536099457999999",
|
|
517
|
+
"un_realised_vol": "-0.00001502",
|
|
518
|
+
"earnings_vol": "0.000536099457999999",
|
|
519
519
|
"total_im": "",
|
|
520
520
|
"margin_balance": "",
|
|
521
521
|
"available_balance": "",
|
|
522
522
|
"trans_out_balance": "",
|
|
523
523
|
"status": 0,
|
|
524
524
|
"total_balance": "",
|
|
525
|
-
"account_rights": "
|
|
525
|
+
"account_rights": "11.000521079457999999",
|
|
526
526
|
"bonus_voucher_vol": "",
|
|
527
527
|
"freeze_bonus_voucher_vol": ""
|
|
528
528
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: hyperquant
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.98
|
|
4
4
|
Summary: A minimal yet hyper-efficient backtesting framework for quantitative trading
|
|
5
5
|
Project-URL: Homepage, https://github.com/yourusername/hyperquant
|
|
6
6
|
Project-URL: Issues, https://github.com/yourusername/hyperquant/issues
|
|
@@ -6,7 +6,7 @@ hyperquant/logkit.py,sha256=nUo7nx5eONvK39GOhWwS41zNRL756P2J7-5xGzwXnTY,8462
|
|
|
6
6
|
hyperquant/notikit.py,sha256=x5yAZ_tAvLQRXcRbcg-VabCaN45LUhvlTZnUqkIqfAA,3596
|
|
7
7
|
hyperquant/broker/auth.py,sha256=C8B5-x8Qcaeafm4ZwPCVFR7GRURmHC3CE4_vdg00Qgw,12139
|
|
8
8
|
hyperquant/broker/bitget.py,sha256=X_S0LKZ7FZAEb6oEMr1vdGP1fondzK74BhmNTpRDSEA,9488
|
|
9
|
-
hyperquant/broker/bitmart.py,sha256=
|
|
9
|
+
hyperquant/broker/bitmart.py,sha256=jMU2SPLB7bfndopJtnL5rqowZNZH-dnbBCkOAapJtDk,17365
|
|
10
10
|
hyperquant/broker/coinup.py,sha256=eOr8BTRXiTb5tCU2FDmvBdXXgqiwVmCbP5pdeA1ORJ8,20390
|
|
11
11
|
hyperquant/broker/coinw.py,sha256=SnJU0vASh77rfcpMGWaIfTblQSjQk3vjlW_4juYdbcs,17214
|
|
12
12
|
hyperquant/broker/edgex.py,sha256=TqUO2KRPLN_UaxvtLL6HnA9dAQXC1sGxOfqTHd6W5k8,18378
|
|
@@ -20,7 +20,7 @@ hyperquant/broker/lib/hpstore.py,sha256=LnLK2zmnwVvhEbLzYI-jz_SfYpO1Dv2u2cJaRAb8
|
|
|
20
20
|
hyperquant/broker/lib/hyper_types.py,sha256=HqjjzjUekldjEeVn6hxiWA8nevAViC2xHADOzDz9qyw,991
|
|
21
21
|
hyperquant/broker/lib/util.py,sha256=iMU1qF0CHj5zzlIMEQGwjz-qtEVosEe7slXOCuB7Rcw,566
|
|
22
22
|
hyperquant/broker/models/bitget.py,sha256=0RwDY75KrJb-c-oYoMxbqxWfsILe-n_Npojz4UFUq7c,11389
|
|
23
|
-
hyperquant/broker/models/bitmart.py,sha256=
|
|
23
|
+
hyperquant/broker/models/bitmart.py,sha256=6lOpQXLcuR7MEayvMt_e-okE2A8CCUvpzAT6aCxWSaM,20455
|
|
24
24
|
hyperquant/broker/models/coinup.py,sha256=X_ngB2_sgTOdfAZqTyeWvCN03j-0_inZ6ugZKW6hR7k,11173
|
|
25
25
|
hyperquant/broker/models/coinw.py,sha256=LvLMVP7i-qkkTK1ubw8eBkMK2RQmFoKPxdKqmC4IToY,22157
|
|
26
26
|
hyperquant/broker/models/edgex.py,sha256=vPAkceal44cjTYKQ_0BoNAskOpmkno_Yo1KxgMLPc6Y,33954
|
|
@@ -32,6 +32,6 @@ hyperquant/datavison/_util.py,sha256=92qk4vO856RqycO0YqEIHJlEg-W9XKapDVqAMxe6rbw
|
|
|
32
32
|
hyperquant/datavison/binance.py,sha256=3yNKTqvt_vUQcxzeX4ocMsI5k6Q6gLZrvgXxAEad6Kc,5001
|
|
33
33
|
hyperquant/datavison/coinglass.py,sha256=PEjdjISP9QUKD_xzXNzhJ9WFDTlkBrRQlVL-5pxD5mo,10482
|
|
34
34
|
hyperquant/datavison/okx.py,sha256=yg8WrdQ7wgWHNAInIgsWPM47N3Wkfr253169IPAycAY,6898
|
|
35
|
-
hyperquant-0.
|
|
36
|
-
hyperquant-0.
|
|
37
|
-
hyperquant-0.
|
|
35
|
+
hyperquant-0.98.dist-info/METADATA,sha256=qlQ1iovL3mASEQDkMbKD2Mn9Fkcs94oImykALPv7iE8,4409
|
|
36
|
+
hyperquant-0.98.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
37
|
+
hyperquant-0.98.dist-info/RECORD,,
|
|
File without changes
|