siglab-py 0.3.6__tar.gz → 0.3.8__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.3.6 → siglab_py-0.3.8}/PKG-INFO +1 -1
- {siglab_py-0.3.6 → siglab_py-0.3.8}/pyproject.toml +1 -1
- {siglab_py-0.3.6 → siglab_py-0.3.8}/setup.cfg +1 -1
- {siglab_py-0.3.6 → siglab_py-0.3.8}/siglab_py/market_data_providers/ccxt_candles_ta_to_csv.py +2 -2
- {siglab_py-0.3.6 → siglab_py-0.3.8}/siglab_py/util/analytic_util.py +30 -0
- {siglab_py-0.3.6 → siglab_py-0.3.8}/siglab_py/util/market_data_util.py +2 -0
- {siglab_py-0.3.6 → siglab_py-0.3.8}/siglab_py.egg-info/PKG-INFO +1 -1
- {siglab_py-0.3.6 → siglab_py-0.3.8}/siglab_py/__init__.py +0 -0
- {siglab_py-0.3.6 → siglab_py-0.3.8}/siglab_py/constants.py +0 -0
- {siglab_py-0.3.6 → siglab_py-0.3.8}/siglab_py/exchanges/__init__.py +0 -0
- {siglab_py-0.3.6 → siglab_py-0.3.8}/siglab_py/exchanges/any_exchange.py +0 -0
- {siglab_py-0.3.6 → siglab_py-0.3.8}/siglab_py/exchanges/futubull.py +0 -0
- {siglab_py-0.3.6 → siglab_py-0.3.8}/siglab_py/market_data_providers/__init__.py +0 -0
- {siglab_py-0.3.6 → siglab_py-0.3.8}/siglab_py/market_data_providers/aggregated_orderbook_provider.py +0 -0
- {siglab_py-0.3.6 → siglab_py-0.3.8}/siglab_py/market_data_providers/candles_provider.py +0 -0
- {siglab_py-0.3.6 → siglab_py-0.3.8}/siglab_py/market_data_providers/candles_ta_provider.py +0 -0
- {siglab_py-0.3.6 → siglab_py-0.3.8}/siglab_py/market_data_providers/deribit_options_expiry_provider.py +0 -0
- {siglab_py-0.3.6 → siglab_py-0.3.8}/siglab_py/market_data_providers/futu_candles_ta_to_csv.py +0 -0
- {siglab_py-0.3.6 → siglab_py-0.3.8}/siglab_py/market_data_providers/orderbooks_provider.py +0 -0
- {siglab_py-0.3.6 → siglab_py-0.3.8}/siglab_py/market_data_providers/test_provider.py +0 -0
- {siglab_py-0.3.6 → siglab_py-0.3.8}/siglab_py/ordergateway/__init__.py +0 -0
- {siglab_py-0.3.6 → siglab_py-0.3.8}/siglab_py/ordergateway/client.py +0 -0
- {siglab_py-0.3.6 → siglab_py-0.3.8}/siglab_py/ordergateway/encrypt_keys_util.py +0 -0
- {siglab_py-0.3.6 → siglab_py-0.3.8}/siglab_py/ordergateway/gateway.py +0 -0
- {siglab_py-0.3.6 → siglab_py-0.3.8}/siglab_py/ordergateway/test_ordergateway.py +0 -0
- {siglab_py-0.3.6 → siglab_py-0.3.8}/siglab_py/tests/__init__.py +0 -0
- {siglab_py-0.3.6 → siglab_py-0.3.8}/siglab_py/tests/integration/__init__.py +0 -0
- {siglab_py-0.3.6 → siglab_py-0.3.8}/siglab_py/tests/integration/market_data_util_tests.py +0 -0
- {siglab_py-0.3.6 → siglab_py-0.3.8}/siglab_py/tests/unit/__init__.py +0 -0
- {siglab_py-0.3.6 → siglab_py-0.3.8}/siglab_py/tests/unit/analytic_util_tests.py +0 -0
- {siglab_py-0.3.6 → siglab_py-0.3.8}/siglab_py/tests/unit/market_data_util_tests.py +0 -0
- {siglab_py-0.3.6 → siglab_py-0.3.8}/siglab_py/tests/unit/trading_util_tests.py +0 -0
- {siglab_py-0.3.6 → siglab_py-0.3.8}/siglab_py/util/__init__.py +0 -0
- {siglab_py-0.3.6 → siglab_py-0.3.8}/siglab_py/util/aws_util.py +0 -0
- {siglab_py-0.3.6 → siglab_py-0.3.8}/siglab_py/util/notification_util.py +0 -0
- {siglab_py-0.3.6 → siglab_py-0.3.8}/siglab_py/util/retry_util.py +0 -0
- {siglab_py-0.3.6 → siglab_py-0.3.8}/siglab_py/util/slack_notification_util.py +0 -0
- {siglab_py-0.3.6 → siglab_py-0.3.8}/siglab_py/util/test_market_data_analytic_util.py +0 -0
- {siglab_py-0.3.6 → siglab_py-0.3.8}/siglab_py/util/trading_util.py +0 -0
- {siglab_py-0.3.6 → siglab_py-0.3.8}/siglab_py.egg-info/SOURCES.txt +0 -0
- {siglab_py-0.3.6 → siglab_py-0.3.8}/siglab_py.egg-info/dependency_links.txt +0 -0
- {siglab_py-0.3.6 → siglab_py-0.3.8}/siglab_py.egg-info/requires.txt +0 -0
- {siglab_py-0.3.6 → siglab_py-0.3.8}/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.3.
|
|
7
|
+
version = "0.3.8"
|
|
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"}
|
{siglab_py-0.3.6 → siglab_py-0.3.8}/siglab_py/market_data_providers/ccxt_candles_ta_to_csv.py
RENAMED
|
@@ -27,7 +27,7 @@ from siglab_py.util.analytic_util import compute_candles_stats
|
|
|
27
27
|
Usage:
|
|
28
28
|
set PYTHONPATH=%PYTHONPATH%;D:\dev\siglab\siglab_py
|
|
29
29
|
python ccxt_candles_ta_to_csv.py --exchange_name okx --symbol BTC/USDT:USDT --candle_size 1h --end_date "2025-04-22 0:0:0" --start_date "2024-01-01 0:0:0" --default_type linear --compute_ta Y --pypy_compatible N
|
|
30
|
-
|
|
30
|
+
|
|
31
31
|
(Remember: python -mpip install siglab_py)
|
|
32
32
|
|
|
33
33
|
This script is pypy compatible. Set "pypy_compatible" to True, in which case "compute_candles_stats" will skip calculation for TAs which requires: scipy, statsmodels, scikit-learn, sklearn.preprocessing
|
|
@@ -83,7 +83,7 @@ param : Dict = {
|
|
|
83
83
|
'start_date' : start_date,
|
|
84
84
|
'end_date' : end_date,
|
|
85
85
|
'exchange_params' : {
|
|
86
|
-
'rateLimit' :
|
|
86
|
+
'rateLimit' : 100, # in ms
|
|
87
87
|
'options' : {
|
|
88
88
|
'defaultType' : "linear"
|
|
89
89
|
}
|
|
@@ -865,3 +865,33 @@ def partition_sliding_window(
|
|
|
865
865
|
'maxima' : maxima,
|
|
866
866
|
'segments' : consolidated_segements
|
|
867
867
|
}
|
|
868
|
+
|
|
869
|
+
# This relies on statsmodels.api, which is not pypy compatible
|
|
870
|
+
def compute_pair_stats(
|
|
871
|
+
pd_candles : pd.DataFrame,
|
|
872
|
+
how_many_candles : int = 24*7
|
|
873
|
+
) -> None:
|
|
874
|
+
import statsmodels.api as sm
|
|
875
|
+
|
|
876
|
+
def _compute_hedge_ratio(
|
|
877
|
+
prices0 : List[float],
|
|
878
|
+
prices1 : List[float]
|
|
879
|
+
):
|
|
880
|
+
model = sm.OLS(prices0, prices1).fit()
|
|
881
|
+
hedge_ratio = model.params[0]
|
|
882
|
+
return hedge_ratio
|
|
883
|
+
|
|
884
|
+
pd_candles['hedge_ratio'] = np.nan
|
|
885
|
+
for j in range(how_many_candles, pd_candles.shape[0]):
|
|
886
|
+
window = pd_candles.iloc[j-how_many_candles:j]
|
|
887
|
+
hedge_ratio = _compute_hedge_ratio(window['close_1'].values, window['close_2'].values) # type: ignore
|
|
888
|
+
pd_candles.loc[j, 'hedge_ratio'] = hedge_ratio
|
|
889
|
+
|
|
890
|
+
pd_candles['close_spread'] = pd_candles['close_1'] - (pd_candles['close_2'] * pd_candles['hedge_ratio']) # You're fitting one hedge_ratio over a windows
|
|
891
|
+
mean = pd_candles['close_spread'].rolling(how_many_candles).mean()
|
|
892
|
+
std = pd_candles['close_spread'].rolling(how_many_candles).std()
|
|
893
|
+
pd_candles['close_spread_mean'] = mean
|
|
894
|
+
pd_candles['close_spread_std'] = std
|
|
895
|
+
pd_candles['zscore_close_spread'] = (pd_candles['close_spread'] - mean)/std
|
|
896
|
+
pd_candles['zscore_close_spread_min'] = pd_candles['zscore_close_spread'].rolling(how_many_candles).min()
|
|
897
|
+
pd_candles['zscore_close_spread_max'] = pd_candles['zscore_close_spread'].rolling(how_many_candles).max()
|
|
@@ -672,6 +672,8 @@ def build_pair_candles(
|
|
|
672
672
|
pd_candles['timestamp_ms_gap'] = pd_candles['timestamp_ms_1'] - pd_candles['timestamp_ms_2']
|
|
673
673
|
assert(pd_candles[pd_candles.timestamp_ms_gap!=0].shape[0]==0)
|
|
674
674
|
|
|
675
|
+
pd_candles.drop(pd_candles.columns[pd_candles.columns.str.contains('unnamed',case = False)],axis = 1, inplace = True)
|
|
676
|
+
|
|
675
677
|
return pd_candles
|
|
676
678
|
|
|
677
679
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{siglab_py-0.3.6 → siglab_py-0.3.8}/siglab_py/market_data_providers/aggregated_orderbook_provider.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{siglab_py-0.3.6 → siglab_py-0.3.8}/siglab_py/market_data_providers/futu_candles_ta_to_csv.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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|