hyperquant 0.98__tar.gz → 0.99__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 (62) hide show
  1. {hyperquant-0.98 → hyperquant-0.99}/PKG-INFO +1 -1
  2. {hyperquant-0.98 → hyperquant-0.99}/apis.json +3 -3
  3. {hyperquant-0.98 → hyperquant-0.99}/pyproject.toml +1 -1
  4. {hyperquant-0.98 → hyperquant-0.99}/src/hyperquant/broker/bitmart.py +27 -20
  5. {hyperquant-0.98 → hyperquant-0.99}/tests/test_bitmart.py +7 -4
  6. {hyperquant-0.98 → hyperquant-0.99}/uv.lock +1 -1
  7. {hyperquant-0.98 → hyperquant-0.99}/.gitignore +0 -0
  8. {hyperquant-0.98 → hyperquant-0.99}/.python-version +0 -0
  9. {hyperquant-0.98 → hyperquant-0.99}/README.md +0 -0
  10. {hyperquant-0.98 → hyperquant-0.99}/data/alpine_smoke.log +0 -0
  11. {hyperquant-0.98 → hyperquant-0.99}/data/logs/notikit.log +0 -0
  12. {hyperquant-0.98 → hyperquant-0.99}/data/logs/test_order_sync.log +0 -0
  13. {hyperquant-0.98 → hyperquant-0.99}/data/records_swap.csv +0 -0
  14. {hyperquant-0.98 → hyperquant-0.99}/data/records_swapc.csv +0 -0
  15. {hyperquant-0.98 → hyperquant-0.99}/doc/bitmart.md +0 -0
  16. {hyperquant-0.98 → hyperquant-0.99}/doc/coinup.md +0 -0
  17. {hyperquant-0.98 → hyperquant-0.99}/doc/lbank.md +0 -0
  18. {hyperquant-0.98 → hyperquant-0.99}/pub.sh +0 -0
  19. {hyperquant-0.98 → hyperquant-0.99}/requirements-dev.lock +0 -0
  20. {hyperquant-0.98 → hyperquant-0.99}/requirements.lock +0 -0
  21. {hyperquant-0.98 → hyperquant-0.99}/src/hyperquant/__init__.py +0 -0
  22. {hyperquant-0.98 → hyperquant-0.99}/src/hyperquant/broker/auth.py +0 -0
  23. {hyperquant-0.98 → hyperquant-0.99}/src/hyperquant/broker/bitget.py +0 -0
  24. {hyperquant-0.98 → hyperquant-0.99}/src/hyperquant/broker/coinup.py +0 -0
  25. {hyperquant-0.98 → hyperquant-0.99}/src/hyperquant/broker/coinw.py +0 -0
  26. {hyperquant-0.98 → hyperquant-0.99}/src/hyperquant/broker/edgex.py +0 -0
  27. {hyperquant-0.98 → hyperquant-0.99}/src/hyperquant/broker/hyperliquid.py +0 -0
  28. {hyperquant-0.98 → hyperquant-0.99}/src/hyperquant/broker/lbank.py +0 -0
  29. {hyperquant-0.98 → hyperquant-0.99}/src/hyperquant/broker/lib/edgex_sign.py +0 -0
  30. {hyperquant-0.98 → hyperquant-0.99}/src/hyperquant/broker/lib/hpstore.py +0 -0
  31. {hyperquant-0.98 → hyperquant-0.99}/src/hyperquant/broker/lib/hyper_types.py +0 -0
  32. {hyperquant-0.98 → hyperquant-0.99}/src/hyperquant/broker/lib/util.py +0 -0
  33. {hyperquant-0.98 → hyperquant-0.99}/src/hyperquant/broker/lighter.py +0 -0
  34. {hyperquant-0.98 → hyperquant-0.99}/src/hyperquant/broker/models/bitget.py +0 -0
  35. {hyperquant-0.98 → hyperquant-0.99}/src/hyperquant/broker/models/bitmart.py +0 -0
  36. {hyperquant-0.98 → hyperquant-0.99}/src/hyperquant/broker/models/coinup.py +0 -0
  37. {hyperquant-0.98 → hyperquant-0.99}/src/hyperquant/broker/models/coinw.py +0 -0
  38. {hyperquant-0.98 → hyperquant-0.99}/src/hyperquant/broker/models/edgex.py +0 -0
  39. {hyperquant-0.98 → hyperquant-0.99}/src/hyperquant/broker/models/hyperliquid.py +0 -0
  40. {hyperquant-0.98 → hyperquant-0.99}/src/hyperquant/broker/models/lbank.py +0 -0
  41. {hyperquant-0.98 → hyperquant-0.99}/src/hyperquant/broker/models/lighter.py +0 -0
  42. {hyperquant-0.98 → hyperquant-0.99}/src/hyperquant/broker/models/ourbit.py +0 -0
  43. {hyperquant-0.98 → hyperquant-0.99}/src/hyperquant/broker/ourbit.py +0 -0
  44. {hyperquant-0.98 → hyperquant-0.99}/src/hyperquant/broker/ws.py +0 -0
  45. {hyperquant-0.98 → hyperquant-0.99}/src/hyperquant/core.py +0 -0
  46. {hyperquant-0.98 → hyperquant-0.99}/src/hyperquant/datavison/_util.py +0 -0
  47. {hyperquant-0.98 → hyperquant-0.99}/src/hyperquant/datavison/binance.py +0 -0
  48. {hyperquant-0.98 → hyperquant-0.99}/src/hyperquant/datavison/coinglass.py +0 -0
  49. {hyperquant-0.98 → hyperquant-0.99}/src/hyperquant/datavison/okx.py +0 -0
  50. {hyperquant-0.98 → hyperquant-0.99}/src/hyperquant/db.py +0 -0
  51. {hyperquant-0.98 → hyperquant-0.99}/src/hyperquant/draw.py +0 -0
  52. {hyperquant-0.98 → hyperquant-0.99}/src/hyperquant/logkit.py +0 -0
  53. {hyperquant-0.98 → hyperquant-0.99}/src/hyperquant/notikit.py +0 -0
  54. {hyperquant-0.98 → hyperquant-0.99}/tests/test_bitget.py +0 -0
  55. {hyperquant-0.98 → hyperquant-0.99}/tests/test_coinup.py +0 -0
  56. {hyperquant-0.98 → hyperquant-0.99}/tests/test_coinw.py +0 -0
  57. {hyperquant-0.98 → hyperquant-0.99}/tests/test_draw.py +0 -0
  58. {hyperquant-0.98 → hyperquant-0.99}/tests/test_edgex.py +0 -0
  59. {hyperquant-0.98 → hyperquant-0.99}/tests/test_lbank.py +0 -0
  60. {hyperquant-0.98 → hyperquant-0.99}/tests/test_lighter.py +0 -0
  61. {hyperquant-0.98 → hyperquant-0.99}/tests/test_ourbit.py +0 -0
  62. {hyperquant-0.98 → hyperquant-0.99}/tests/tmp.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hyperquant
3
- Version: 0.98
3
+ Version: 0.99
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
@@ -24,8 +24,8 @@
24
24
  "41933ec0f5dace5eee47628ea2e2cb40a491f7fd20f983b385f8bdc5eea3d3ad4a47bd745f70fc2a"
25
25
  ],
26
26
  "bitmart":[
27
- "eyJoZWFkZXIiOnsidHlwIjoiQml0TWFydCIsImFsZyI6IkJNQVBJU0lYIn0sInBheWxvYWQiOnsiamlkIjoiYTQ4YTYyODRjYzI3NDIyZTg5MzlhNmMxZDY3YWEzNWMiLCJ2ZXJzaW9uIjoiMjAyNTEwMzEiLCJleHBpcmVzQXQiOjE3NjE5NzAxNDM1NTMsImJtIjoiVXppdFJkZEdpdUNZek5KWSs5Q25xNkFjMlZWNmhiT0hhRzVwemdTSTE5cGRLS0JJN2FpUThGRXNaQkFyTDFVUkJFVGFFdFJsdlB2bE5ISU0zaktJcjF6bERSVlZNQjVlRmVySjRxZ2FaS3VxNXZveEY3NEFMRXZ3NS9mYUdZVk8xeVhzTWJEbUUvSW5sYll6ZUZ5MW5YMmxjYmM2dTd1cUVRYnQxb2ltZUNKbngrdWdEQ09ZU1hsbHNQY2dxTkJZUStVbHBTNGR1L3crejl4dGFUY2s3cjQ1UGRxTGxMODNTekRLc1FlSTdOZEtaVlZFZlIraTJFWWU3M2Zma0ZvSGlqdkJJSkdtWmZvQnAzLytVZTR6aXUrdkl5a0FFYk9rUUlJTGMxMVBqcUFQVERIS0dzNlh3d0ZhelE5S0hxQ1FoT3Zwdys1TDh2Z1BtSGJpWWNSTEtkVmlQam5vanEwZ1ZCRDdKS09rRkdyYmZpYTlqMmoweTBaeHE1cStyRWRzIn0sInNpZ25hdHVyZSI6InpWU2NKWDFLOWV5eitUaEhCNU9wOU5wZVc5OWgraWF1eXdaUlFSWjltV1I1bkwwTmozd25XZW1NSnlISkxTVkFPaVdmb1Baa3F4RVg0anAwQUtYTWNBPT0ifQ==",
28
- "E3zjQwurncDtiolAiGnPU7MTOuLwgMqoS7",
29
- "1UwiT974jJGn3fiqWuH2mVtrlzAwjxS8"
27
+ "eyJoZWFkZXIiOnsidHlwIjoiQml0TWFydCIsImFsZyI6IkJNQVBJU0lYIn0sInBheWxvYWQiOnsiamlkIjoiMWU0ZjI2OWQxYTJmNGE0YzlhYWFmNjAwZTRiYzkwYzUiLCJ2ZXJzaW9uIjoiMjAyNTEwMzEiLCJleHBpcmVzQXQiOjE3NjE5ODA0MzgwOTAsImJtIjoiVXppdFJkZEdpdUNZek5KWSs5Q25xNkFjMlZWNmhiT0hhRzVwemdTSTE5cGRLS0JJN2FpUThGRXNaQkFyTDFVUlRnclA1b0ZMMDFJNHQvMnVKUENvVlcxQzhCN1ZGUytyTmtXcmpjbGxHY05hZjNSRjVlbGhkT3MvU1N6UXZlcUNhTW1RS0M2LzhxMy9ySG9xK0ttMFFMRzlnSmlLU3lRMCtqUldnUSs1SllOT0pYbm1yVlpHekdmSUpDM0xwNE1aRjBYNlZ3Y2VkcEhmL0FVYjNsM20zVUltbThLWkxHMitiTjRxMUh0NGtJdkxTL2tsMm5COEpLazVISjQ5S2xEN0RXYTg0NkFwUUdBMDlrWkUrbkdTQ3U4L2VUNTNINGFrYmxMbzlJS3FhdERPVG1ORjlGcTZyc3QzRWlIWnFMNFBwdkdwUDlTNDZscnNrQzZjY0xWOTN5a0VEaTh2NlN6REQ5Um5aQnk1L2dDb0F5VFl2em50NC9uR285R2dwS3dGIn0sInNpZ25hdHVyZSI6ImU1bVl6T3lpMTQxTkJTNjhwamc3NHNYaGJuMHF0WDViNkZvb25ZdnU3eGNNeUE5M3BCN2lLMThkWTFLOEZ5ZzVXdlVyakpYK1p5ZlN1aHRDWVMxbHpnPT0ifQ==",
28
+ "genUaMiA34QCgcB2J3lGN44IM88zqL9y9DE5",
29
+ "1c0886dd192a1dd0f23f71f7ab577a45"
30
30
  ]
31
31
  }
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "hyperquant"
3
- version = "0.98"
3
+ version = "0.99"
4
4
  description = "A minimal yet hyper-efficient backtesting framework for quantitative trading"
5
5
  authors = [
6
6
  { name = "MissinA", email = "1421329142@qq.com" }
@@ -4,7 +4,7 @@ import asyncio
4
4
  import json
5
5
  import random
6
6
  import time
7
- from typing import Any, Literal, Sequence
7
+ from typing import Any, Literal, Optional, Sequence
8
8
 
9
9
  import pybotters
10
10
 
@@ -335,6 +335,7 @@ class Bitmart:
335
335
  category: Literal[1,2,"limit","market"] = "limit",
336
336
  price: float,
337
337
  qty: float,
338
+ qty_contract: Optional[int] = None,
338
339
  side: Literal[1, 2, 3, 4, "open_long", "close_short", "close_long", "open_short", "buy", "sell"] = "open_long",
339
340
  mode: Literal[1, 2, 3, 4, "gtc", "ioc", "fok", "maker_only", "maker-only", "post_only"] = "gtc",
340
341
  open_type: Literal[1, 2, "cross", "isolated"] = "isolated",
@@ -361,25 +362,31 @@ class Bitmart:
361
362
  raise ValueError(f"Market metadata unavailable for symbol: {symbol}")
362
363
 
363
364
 
364
- contract_size_str = detail.get("contract_size") or detail.get("vol_unit") or "1"
365
- try:
366
- contract_size_val = float(contract_size_str)
367
- except (TypeError, ValueError):
368
- contract_size_val = 1.0
369
- if contract_size_val <= 0:
370
- raise ValueError(f"Invalid contract_size for {symbol}: {contract_size_str}")
371
-
372
- contracts_float = float(qty) / contract_size_val
373
- contracts_int = int(round(contracts_float))
374
- if contracts_int <= 0:
375
- raise ValueError(
376
- f"Volume too small for contract size ({contract_size_val}): volume={qty}"
377
- )
378
- if abs(contracts_float - contracts_int) > 1e-8:
379
- raise ValueError(
380
- f"Volume must be a multiple of contract_size ({contract_size_val}). "
381
- f"Received volume={qty} -> {contracts_float} contracts."
382
- )
365
+ if qty_contract is not None:
366
+
367
+ contract_size_str = detail.get("contract_size") or detail.get("vol_unit") or "1"
368
+ try:
369
+ contract_size_val = float(contract_size_str)
370
+ except (TypeError, ValueError):
371
+ contract_size_val = 1.0
372
+ if contract_size_val <= 0:
373
+ raise ValueError(f"Invalid contract_size for {symbol}: {contract_size_str}")
374
+
375
+ contracts_float = float(qty) / contract_size_val
376
+ contracts_int = int(round(contracts_float))
377
+ if contracts_int <= 0:
378
+ raise ValueError(
379
+ f"Volume too small for contract size ({contract_size_val}): volume={qty}"
380
+ )
381
+ if abs(contracts_float - contracts_int) > 1e-8:
382
+ raise ValueError(
383
+ f"Volume must be a multiple of contract_size ({contract_size_val}). "
384
+ f"Received volume={qty} -> {contracts_float} contracts."
385
+ )
386
+ else:
387
+ contracts_int = int(qty)
388
+ if contracts_int <= 0:
389
+ raise ValueError(f"Volume must be positive integer contracts: volume={qty}")
383
390
 
384
391
  price_unit = detail.get("price_unit") or 1
385
392
  try:
@@ -20,9 +20,12 @@ async def test_update():
20
20
  # await broker.update('ticker')
21
21
  # print(broker.store.ticker.find())
22
22
 
23
- await broker.update('history_orders')
24
- print(broker.store.orders.find())
25
- print(broker.store.orders.get({'order_id':3000237069605967}))
23
+ # await broker.update('history_orders')
24
+ # print(broker.store.orders.find())
25
+ # print(broker.store.orders.get({'order_id':3000237069605967}))
26
+ await broker.update('positions')
27
+ print(broker.store.positions.find())
28
+
26
29
 
27
30
  async def test_place():
28
31
  async with pybotters.Client(apis='./apis.json') as client:
@@ -150,4 +153,4 @@ async def test_sync_place():
150
153
  logger.info(f"Order Sync Result: {result}")
151
154
 
152
155
  if __name__ == "__main__":
153
- asyncio.run(test_sync_place())
156
+ asyncio.run(test_update())
@@ -921,7 +921,7 @@ wheels = [
921
921
 
922
922
  [[package]]
923
923
  name = "hyperquant"
924
- version = "0.97"
924
+ version = "0.98"
925
925
  source = { editable = "." }
926
926
  dependencies = [
927
927
  { name = "aiohttp" },
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