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.
- {siglab_py-0.1.51 → siglab_py-0.1.53}/PKG-INFO +1 -1
- {siglab_py-0.1.51 → siglab_py-0.1.53}/pyproject.toml +1 -1
- {siglab_py-0.1.51 → siglab_py-0.1.53}/setup.cfg +1 -1
- {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/ordergateway/client.py +1 -0
- {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/ordergateway/gateway.py +7 -4
- {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/tests/integration/market_data_util_tests.py +1 -1
- {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/util/market_data_util.py +6 -0
- {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py.egg-info/PKG-INFO +1 -1
- {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/__init__.py +0 -0
- {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/constants.py +0 -0
- {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/exchanges/__init__.py +0 -0
- {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/exchanges/any_exchange.py +0 -0
- {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/exchanges/futubull.py +0 -0
- {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/market_data_providers/__init__.py +0 -0
- {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/market_data_providers/aggregated_orderbook_provider.py +0 -0
- {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/market_data_providers/candles_provider.py +0 -0
- {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/market_data_providers/candles_ta_provider.py +0 -0
- {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/market_data_providers/ccxt_candles_ta_to_csv.py +0 -0
- {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/market_data_providers/deribit_options_expiry_provider.py +0 -0
- {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/market_data_providers/futu_candles_ta_to_csv.py +0 -0
- {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/market_data_providers/orderbooks_provider.py +0 -0
- {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/market_data_providers/test_provider.py +0 -0
- {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/ordergateway/__init__.py +0 -0
- {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/ordergateway/encrypt_keys_util.py +0 -0
- {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/ordergateway/test_ordergateway.py +0 -0
- {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/tests/__init__.py +0 -0
- {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/tests/integration/__init__.py +0 -0
- {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/tests/unit/__init__.py +0 -0
- {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/tests/unit/analytic_util_tests.py +0 -0
- {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/tests/unit/market_data_util_tests.py +0 -0
- {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/util/__init__.py +0 -0
- {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/util/analytic_util.py +0 -0
- {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/util/aws_util.py +0 -0
- {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/util/retry_util.py +0 -0
- {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py.egg-info/SOURCES.txt +0 -0
- {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py.egg-info/dependency_links.txt +0 -0
- {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py.egg-info/requires.txt +0 -0
- {siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py.egg-info/top_level.txt +0 -0
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "siglab_py"
|
|
7
|
-
version = "0.1.
|
|
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"}
|
|
@@ -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
|
|
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
|
-
|
|
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,
|
|
@@ -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)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/market_data_providers/candles_ta_provider.py
RENAMED
|
File without changes
|
{siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/market_data_providers/ccxt_candles_ta_to_csv.py
RENAMED
|
File without changes
|
|
File without changes
|
{siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/market_data_providers/futu_candles_ta_to_csv.py
RENAMED
|
File without changes
|
{siglab_py-0.1.51 → siglab_py-0.1.53}/siglab_py/market_data_providers/orderbooks_provider.py
RENAMED
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|