siglab-py 0.3.12__tar.gz → 0.3.13__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 (42) hide show
  1. {siglab_py-0.3.12 → siglab_py-0.3.13}/PKG-INFO +1 -1
  2. {siglab_py-0.3.12 → siglab_py-0.3.13}/pyproject.toml +1 -1
  3. {siglab_py-0.3.12 → siglab_py-0.3.13}/setup.cfg +1 -1
  4. {siglab_py-0.3.12 → siglab_py-0.3.13}/siglab_py/util/market_data_util.py +40 -1
  5. {siglab_py-0.3.12 → siglab_py-0.3.13}/siglab_py.egg-info/PKG-INFO +1 -1
  6. {siglab_py-0.3.12 → siglab_py-0.3.13}/siglab_py/__init__.py +0 -0
  7. {siglab_py-0.3.12 → siglab_py-0.3.13}/siglab_py/constants.py +0 -0
  8. {siglab_py-0.3.12 → siglab_py-0.3.13}/siglab_py/exchanges/__init__.py +0 -0
  9. {siglab_py-0.3.12 → siglab_py-0.3.13}/siglab_py/exchanges/any_exchange.py +0 -0
  10. {siglab_py-0.3.12 → siglab_py-0.3.13}/siglab_py/exchanges/futubull.py +0 -0
  11. {siglab_py-0.3.12 → siglab_py-0.3.13}/siglab_py/market_data_providers/__init__.py +0 -0
  12. {siglab_py-0.3.12 → siglab_py-0.3.13}/siglab_py/market_data_providers/aggregated_orderbook_provider.py +0 -0
  13. {siglab_py-0.3.12 → siglab_py-0.3.13}/siglab_py/market_data_providers/candles_provider.py +0 -0
  14. {siglab_py-0.3.12 → siglab_py-0.3.13}/siglab_py/market_data_providers/candles_ta_provider.py +0 -0
  15. {siglab_py-0.3.12 → siglab_py-0.3.13}/siglab_py/market_data_providers/ccxt_candles_ta_to_csv.py +0 -0
  16. {siglab_py-0.3.12 → siglab_py-0.3.13}/siglab_py/market_data_providers/deribit_options_expiry_provider.py +0 -0
  17. {siglab_py-0.3.12 → siglab_py-0.3.13}/siglab_py/market_data_providers/futu_candles_ta_to_csv.py +0 -0
  18. {siglab_py-0.3.12 → siglab_py-0.3.13}/siglab_py/market_data_providers/orderbooks_provider.py +0 -0
  19. {siglab_py-0.3.12 → siglab_py-0.3.13}/siglab_py/market_data_providers/test_provider.py +0 -0
  20. {siglab_py-0.3.12 → siglab_py-0.3.13}/siglab_py/ordergateway/__init__.py +0 -0
  21. {siglab_py-0.3.12 → siglab_py-0.3.13}/siglab_py/ordergateway/client.py +0 -0
  22. {siglab_py-0.3.12 → siglab_py-0.3.13}/siglab_py/ordergateway/encrypt_keys_util.py +0 -0
  23. {siglab_py-0.3.12 → siglab_py-0.3.13}/siglab_py/ordergateway/gateway.py +0 -0
  24. {siglab_py-0.3.12 → siglab_py-0.3.13}/siglab_py/ordergateway/test_ordergateway.py +0 -0
  25. {siglab_py-0.3.12 → siglab_py-0.3.13}/siglab_py/tests/__init__.py +0 -0
  26. {siglab_py-0.3.12 → siglab_py-0.3.13}/siglab_py/tests/integration/__init__.py +0 -0
  27. {siglab_py-0.3.12 → siglab_py-0.3.13}/siglab_py/tests/integration/market_data_util_tests.py +0 -0
  28. {siglab_py-0.3.12 → siglab_py-0.3.13}/siglab_py/tests/unit/__init__.py +0 -0
  29. {siglab_py-0.3.12 → siglab_py-0.3.13}/siglab_py/tests/unit/analytic_util_tests.py +0 -0
  30. {siglab_py-0.3.12 → siglab_py-0.3.13}/siglab_py/tests/unit/market_data_util_tests.py +0 -0
  31. {siglab_py-0.3.12 → siglab_py-0.3.13}/siglab_py/tests/unit/trading_util_tests.py +0 -0
  32. {siglab_py-0.3.12 → siglab_py-0.3.13}/siglab_py/util/__init__.py +0 -0
  33. {siglab_py-0.3.12 → siglab_py-0.3.13}/siglab_py/util/analytic_util.py +0 -0
  34. {siglab_py-0.3.12 → siglab_py-0.3.13}/siglab_py/util/aws_util.py +0 -0
  35. {siglab_py-0.3.12 → siglab_py-0.3.13}/siglab_py/util/notification_util.py +0 -0
  36. {siglab_py-0.3.12 → siglab_py-0.3.13}/siglab_py/util/retry_util.py +0 -0
  37. {siglab_py-0.3.12 → siglab_py-0.3.13}/siglab_py/util/slack_notification_util.py +0 -0
  38. {siglab_py-0.3.12 → siglab_py-0.3.13}/siglab_py/util/trading_util.py +0 -0
  39. {siglab_py-0.3.12 → siglab_py-0.3.13}/siglab_py.egg-info/SOURCES.txt +0 -0
  40. {siglab_py-0.3.12 → siglab_py-0.3.13}/siglab_py.egg-info/dependency_links.txt +0 -0
  41. {siglab_py-0.3.12 → siglab_py-0.3.13}/siglab_py.egg-info/requires.txt +0 -0
  42. {siglab_py-0.3.12 → siglab_py-0.3.13}/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.3.12
3
+ Version: 0.3.13
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.3.12"
7
+ version = "0.3.13"
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.3.12
3
+ version = 0.3.13
4
4
  description = Market data fetches, TA calculations and generic order gateway.
5
5
  author = r0bbarh00d
6
6
  author_email = r0bbarh00d@gmail.com
@@ -2,6 +2,7 @@ import logging
2
2
  import incremental
3
3
  import tzlocal
4
4
  from datetime import datetime, timezone
5
+ import time
5
6
  from typing import List, Dict, Union, NoReturn, Any, Tuple
6
7
  from pathlib import Path
7
8
  import math
@@ -512,6 +513,28 @@ def fetch_candles(
512
513
  )
513
514
  return { '' : None }
514
515
 
516
+ '''
517
+ Find listing date https://gist.github.com/mr-easy/5185b1dcdd5f9f908ff196446f092e9b
518
+
519
+ Usage:
520
+ listing_ts = find_start_time(exchange, 'HYPE/USDT:USDT', int(datetime(2024,1,1).timestamp()*1000), int(datetime(2025,5,1).timestamp()*1000), '1h')
521
+
522
+ Caveats:
523
+ 1) If listing date lies outside [start_time, end_time], this function will stackoverflow,
524
+ 2) Even if not, it's still very time consuming.
525
+
526
+ Alternative: market['created']
527
+ '''
528
+ def search_listing_ts(exchange, symbol, start_time, end_time, timeframe):
529
+ mid_time = (start_time + end_time)//2
530
+ if(mid_time == start_time): return mid_time+1
531
+ ohlcv = exchange.fetch_ohlcv(symbol, timeframe, mid_time, limit=1)
532
+ time.sleep(1)
533
+ if(len(ohlcv) == 0):
534
+ return search_listing_ts(exchange, symbol, mid_time, end_time, timeframe)
535
+ else:
536
+ return search_listing_ts(exchange, symbol, start_time, mid_time, timeframe)
537
+
515
538
  def _fetch_candles_ccxt(
516
539
  start_ts : int,
517
540
  end_ts : int,
@@ -524,6 +547,10 @@ def _fetch_candles_ccxt(
524
547
 
525
548
  rsp = {}
526
549
 
550
+ exchange.load_markets()
551
+
552
+ num_tickers = len(normalized_symbols)
553
+ i = 0
527
554
  for ticker in normalized_symbols:
528
555
  @retry(num_attempts=3, pause_between_retries_ms=1000)
529
556
  def _fetch_ohlcv(exchange, symbol, timeframe, since, limit, params) -> Union[List, NoReturn]:
@@ -548,7 +575,17 @@ def _fetch_candles_ccxt(
548
575
  raise ValueError(f"Invalid candle_size {candle_size}")
549
576
  return num_intervals * increment
550
577
 
551
- logger.info(f"Fetching {candle_size} candles for {ticker}.")
578
+ logger.info(f"{i}/{num_tickers} Fetching {candle_size} candles for {ticker}.")
579
+
580
+ '''
581
+ It uses a while loop to implement a sliding window to download candles between start_ts and end_ts.
582
+ However, start_ts for example can be 1 Jan 2021 for a given ticker.
583
+ But if that ticker listing date is 1 Jan 2025, this while loop would waste a lot of time loop between 1 Jan 2021 thru 31 Dec 2024, slowly incrementing this_cutoff += _calc_increment(candle_size).
584
+ A more efficient way is to find listing date. Start looping from there.
585
+ '''
586
+ market = exchange.markets[ticker]
587
+ if market['created']:
588
+ start_ts = max(start_ts, int(market['created']/1000))
552
589
 
553
590
  all_candles = []
554
591
  params = {}
@@ -574,6 +611,8 @@ def _fetch_candles_ccxt(
574
611
 
575
612
  rsp[ticker] = pd_all_candles
576
613
 
614
+ i+=1
615
+
577
616
  return rsp
578
617
 
579
618
  def fetch_deribit_btc_option_expiries(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: siglab-py
3
- Version: 0.3.12
3
+ Version: 0.3.13
4
4
  Summary: Market data fetches, TA calculations and generic order gateway.
5
5
  Author: r0bbarh00d
6
6
  Author-email: r0bbarh00d <r0bbarh00d@gmail.com>