siglab-py 0.1.52__py3-none-any.whl → 0.1.55__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 siglab-py might be problematic. Click here for more details.

@@ -1,6 +1,7 @@
1
1
  import sys
2
2
  import traceback
3
3
  import os
4
+ import random
4
5
  from dotenv import load_dotenv
5
6
  from enum import Enum
6
7
  import argparse
@@ -185,6 +186,7 @@ param : Dict = {
185
186
 
186
187
  "default_fees_ccy" : None,
187
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.
188
190
 
189
191
  'mds' : {
190
192
  'topics' : {
@@ -605,7 +607,9 @@ async def execute_one_position(
605
607
  log(f"Limit order fully filled: {order_id}", log_level=LogLevel.INFO)
606
608
  break
607
609
 
608
- 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)
609
613
 
610
614
 
611
615
  # Cancel hung limit order, resend as market
@@ -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,10 +377,13 @@ 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
383
- while this_cutoff<=end_ts:
386
+ while this_cutoff<end_ts:
384
387
  candles = _fetch_ohlcv(exchange=exchange, symbol=symbol, timeframe=candle_size, since=int(this_cutoff * 1000), limit=num_candles_limit, params=params)
385
388
  if candles and len(candles)>0:
386
389
  all_candles = all_candles + [[ int(x[0]), float(x[1]), float(x[2]), float(x[3]), float(x[4]), float(x[5]) ] for x in candles if x[1] and x[2] and x[3] and x[4] and x[5] ]
@@ -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.52
3
+ Version: 0.1.55
4
4
  Summary: Market data fetches, TA calculations and generic order gateway.
5
5
  Author: r0bbarh00d
6
6
  Author-email: r0bbarh00d <r0bbarh00d@gmail.com>
@@ -15,20 +15,20 @@ siglab_py/market_data_providers/test_provider.py,sha256=wBLCgcWjs7FGZJXWsNyn30lk
15
15
  siglab_py/ordergateway/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
16
  siglab_py/ordergateway/client.py,sha256=EwoVKxEcngIs8-b4MThPBdZfFIWJg1OFAKG9bwC5BYw,14826
17
17
  siglab_py/ordergateway/encrypt_keys_util.py,sha256=-qi87db8To8Yf1WS1Q_Cp2Ya7ZqgWlRqSHfNXCM7wE4,1339
18
- siglab_py/ordergateway/gateway.py,sha256=VkTTNDVWQxmhgdDNd4d0Xg0TYA-yVKNenemqLz5ZXmA,38556
18
+ siglab_py/ordergateway/gateway.py,sha256=9D70r6KsgrUo70m_jtt2zG5UUq4w2TTXuEmSfuykDhI,38969
19
19
  siglab_py/ordergateway/test_ordergateway.py,sha256=_Gz2U_VqljogGWqGyNDYYls1INqUiig9veyPttfGRpg,3901
20
20
  siglab_py/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
21
  siglab_py/tests/integration/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
- siglab_py/tests/integration/market_data_util_tests.py,sha256=X0CiSMDfsafKcmjVKknA03vUUbMV0fAZweb3D01ikYI,7174
22
+ siglab_py/tests/integration/market_data_util_tests.py,sha256=xzvZeU3QnXmDF4S90uujy11PbdEx0IOAHy0sIlLuByU,7173
23
23
  siglab_py/tests/unit/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
24
  siglab_py/tests/unit/analytic_util_tests.py,sha256=BzT__hxfqXMRAKvqtYDVYNrcMGGDF3-gFoXhxiJ0Lew,3703
25
25
  siglab_py/tests/unit/market_data_util_tests.py,sha256=A1y83itISmMJdn6wLpfwcr4tGola8wTf1D1xbelMvgw,2026
26
26
  siglab_py/util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
27
  siglab_py/util/analytic_util.py,sha256=xo9gD1ELQt_1v84yu9d4NgxtOIXthePZGipvDrjZAQ8,43834
28
28
  siglab_py/util/aws_util.py,sha256=KGmjHrr1rpnnxr33nXHNzTul4tvyyxl9p6gpwNv0Ygc,2557
29
- siglab_py/util/market_data_util.py,sha256=QJGYIO-ixzjbOm3pY1koiDd_UV5-_QS7JrwuaCn7kug,19486
29
+ siglab_py/util/market_data_util.py,sha256=UV9-gYPqT0Ls7e9Key6u8EzD-WeVVt_Bvfq9PWNQK2U,19627
30
30
  siglab_py/util/retry_util.py,sha256=mxYuRFZRZoaQQjENcwPmxhxixtd1TFvbxIdPx4RwfRc,743
31
- siglab_py-0.1.52.dist-info/METADATA,sha256=93KeqsFYmMe8_ydvspXrxw-fhv8DUJ-OFjzvFUmTxjQ,980
32
- siglab_py-0.1.52.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
33
- siglab_py-0.1.52.dist-info/top_level.txt,sha256=AbD4VR9OqmMOGlMJLkAVPGQMtUPIQv0t1BF5xmcLJSk,10
34
- siglab_py-0.1.52.dist-info/RECORD,,
31
+ siglab_py-0.1.55.dist-info/METADATA,sha256=IOlJYSRtgpOBpETdCayWaFTaMuTxqDZ_lq0bZzsgFbI,980
32
+ siglab_py-0.1.55.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
33
+ siglab_py-0.1.55.dist-info/top_level.txt,sha256=AbD4VR9OqmMOGlMJLkAVPGQMtUPIQv0t1BF5xmcLJSk,10
34
+ siglab_py-0.1.55.dist-info/RECORD,,