siglab-py 0.1.51__tar.gz → 0.1.53__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 siglab-py might be problematic. Click here for more details.

Files changed (38) hide show
  1. {siglab_py-0.1.51 → siglab_py-0.1.53}/PKG-INFO +1 -1
  2. {siglab_py-0.1.51 → siglab_py-0.1.53}/pyproject.toml +1 -1
  3. {siglab_py-0.1.51 → siglab_py-0.1.53}/setup.cfg +1 -1
  4. {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/ordergateway/client.py +1 -0
  5. {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/ordergateway/gateway.py +7 -4
  6. {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/tests/integration/market_data_util_tests.py +1 -1
  7. {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/util/market_data_util.py +6 -0
  8. {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py.egg-info/PKG-INFO +1 -1
  9. {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/__init__.py +0 -0
  10. {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/constants.py +0 -0
  11. {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/exchanges/__init__.py +0 -0
  12. {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/exchanges/any_exchange.py +0 -0
  13. {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/exchanges/futubull.py +0 -0
  14. {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/market_data_providers/__init__.py +0 -0
  15. {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/market_data_providers/aggregated_orderbook_provider.py +0 -0
  16. {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/market_data_providers/candles_provider.py +0 -0
  17. {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/market_data_providers/candles_ta_provider.py +0 -0
  18. {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/market_data_providers/ccxt_candles_ta_to_csv.py +0 -0
  19. {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/market_data_providers/deribit_options_expiry_provider.py +0 -0
  20. {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/market_data_providers/futu_candles_ta_to_csv.py +0 -0
  21. {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/market_data_providers/orderbooks_provider.py +0 -0
  22. {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/market_data_providers/test_provider.py +0 -0
  23. {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/ordergateway/__init__.py +0 -0
  24. {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/ordergateway/encrypt_keys_util.py +0 -0
  25. {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/ordergateway/test_ordergateway.py +0 -0
  26. {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/tests/__init__.py +0 -0
  27. {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/tests/integration/__init__.py +0 -0
  28. {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/tests/unit/__init__.py +0 -0
  29. {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/tests/unit/analytic_util_tests.py +0 -0
  30. {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/tests/unit/market_data_util_tests.py +0 -0
  31. {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/util/__init__.py +0 -0
  32. {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/util/analytic_util.py +0 -0
  33. {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/util/aws_util.py +0 -0
  34. {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/util/retry_util.py +0 -0
  35. {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py.egg-info/SOURCES.txt +0 -0
  36. {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py.egg-info/dependency_links.txt +0 -0
  37. {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py.egg-info/requires.txt +0 -0
  38. {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: siglab_py
3
- Version: 0.1.51
3
+ Version: 0.1.53
4
4
  Summary: Market data fetches, TA calculations and generic order gateway.
5
5
  Author: r0bbarh00d
6
6
  Author-email: r0bbarh00d <r0bbarh00d@gmail.com>
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "siglab_py"
7
- version = "0.1.51"
7
+ version = "0.1.53"
8
8
  description = "Market data fetches, TA calculations and generic order gateway."
9
9
  authors = [{name = "r0bbarh00d", email = "r0bbarh00d@gmail.com"}]
10
10
  license = {text = "MIT"}
@@ -1,6 +1,6 @@
1
1
  [metadata]
2
2
  name = siglab_py
3
- version = 0.1.51
3
+ version = 0.1.53
4
4
  description = Market data fetches, TA calculations and generic order gateway.
5
5
  author = r0bbarh00d
6
6
  author_email = r0bbarh00d@gmail.com
@@ -327,6 +327,7 @@ class DivisiblePosition(Order):
327
327
  rv['executions'] = self.executions
328
328
  rv['filled_amount'] = self.filled_amount
329
329
  rv['average_cost'] = self.average_cost
330
+ rv['fees'] = self.fees
330
331
  rv['pos'] = self.pos
331
332
  rv['done'] = self.done
332
333
  rv['execution_err'] = self.execution_err
@@ -1,7 +1,7 @@
1
- from ctypes import ArgumentError
2
1
  import sys
3
2
  import traceback
4
3
  import os
4
+ import random
5
5
  from dotenv import load_dotenv
6
6
  from enum import Enum
7
7
  import argparse
@@ -186,6 +186,7 @@ param : Dict = {
186
186
 
187
187
  "default_fees_ccy" : None,
188
188
  "loop_freq_ms" : 500, # reduce this if you need trade faster
189
+ "loops_random_delay_multiplier" : 1, # Add randomness to time between slices are sent off. Set to 1 if no random delay needed.
189
190
 
190
191
  'mds' : {
191
192
  'topics' : {
@@ -392,7 +393,7 @@ async def instantiate_exchange(
392
393
  }
393
394
  ) # type: ignore
394
395
  else:
395
- raise ArgumentError(f"Unsupported exchange {exchange_name}, check gateway_id {gateway_id}.")
396
+ raise ValueError(f"Unsupported exchange {exchange_name}, check gateway_id {gateway_id}.")
396
397
 
397
398
  await exchange.load_markets() # type: ignore
398
399
 
@@ -606,7 +607,9 @@ async def execute_one_position(
606
607
  log(f"Limit order fully filled: {order_id}", log_level=LogLevel.INFO)
607
608
  break
608
609
 
609
- await asyncio.sleep(int(param['loop_freq_ms']/1000))
610
+ loops_random_delay_multiplier : int = random.randint(1, param['loops_random_delay_multiplier']) if param['loops_random_delay_multiplier']!=1 else 1
611
+ loop_freq_sec : int = int(param['loop_freq_ms']/1000)
612
+ await asyncio.sleep(loop_freq_sec * loops_random_delay_multiplier)
610
613
 
611
614
 
612
615
  # Cancel hung limit order, resend as market
@@ -697,7 +700,7 @@ async def execute_one_position(
697
700
 
698
701
  except Exception as position_execution_err:
699
702
  position.done = False
700
- position.execution_err = position_execution_err
703
+ position.execution_err = f"Execution failed: {position_execution_err} {str(sys.exc_info()[0])} {str(sys.exc_info()[1])} {traceback.format_exc()}"
701
704
 
702
705
  async def work(
703
706
  param : Dict,
@@ -88,7 +88,7 @@ class MarketDataUtilTests(unittest.TestCase):
88
88
 
89
89
  def test_fetch_candles_ccxt(self):
90
90
  start_date : datetime = datetime(2024,1,1)
91
- end_date : datetime = datetime(2024,12,31)
91
+ end_date : datetime = datetime(2025,3,28)
92
92
 
93
93
  param = {
94
94
  'apiKey' : None,
@@ -377,6 +377,9 @@ def _fetch_candles(
377
377
 
378
378
  return candles
379
379
 
380
+ if end_ts>datetime.now().timestamp():
381
+ end_ts = int(datetime.now().timestamp())
382
+
380
383
  all_candles = []
381
384
  params = {}
382
385
  this_cutoff = start_ts
@@ -391,6 +394,9 @@ def _fetch_candles(
391
394
  record_ts = int(int(record_ts_str)/1000) # Convert from milli-seconds to seconds
392
395
 
393
396
  this_cutoff = record_ts + 1
397
+ else:
398
+ this_cutoff += 1
399
+
394
400
  columns = ['exchange', 'symbol', 'timestamp_ms', 'open', 'high', 'low', 'close', 'volume']
395
401
  pd_all_candles = pd.DataFrame([ [ exchange.name, symbol, x[0], x[1], x[2], x[3], x[4], x[5] ] for x in all_candles], columns=columns)
396
402
  fix_column_types(pd_all_candles)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: siglab-py
3
- Version: 0.1.51
3
+ Version: 0.1.53
4
4
  Summary: Market data fetches, TA calculations and generic order gateway.
5
5
  Author: r0bbarh00d
6
6
  Author-email: r0bbarh00d <r0bbarh00d@gmail.com>