siglab-py 0.5.35__tar.gz → 0.5.37__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 (43) hide show
  1. {siglab_py-0.5.35 → siglab_py-0.5.37}/PKG-INFO +1 -1
  2. {siglab_py-0.5.35 → siglab_py-0.5.37}/pyproject.toml +1 -1
  3. {siglab_py-0.5.35 → siglab_py-0.5.37}/setup.cfg +1 -1
  4. {siglab_py-0.5.35 → siglab_py-0.5.37}/siglab_py/tests/unit/analytic_util_tests.py +1 -1
  5. {siglab_py-0.5.35 → siglab_py-0.5.37}/siglab_py/util/analytic_util.py +21 -20
  6. {siglab_py-0.5.35 → siglab_py-0.5.37}/siglab_py/util/notification_util.py +1 -1
  7. {siglab_py-0.5.35 → siglab_py-0.5.37}/siglab_py.egg-info/PKG-INFO +1 -1
  8. {siglab_py-0.5.35 → siglab_py-0.5.37}/siglab_py/__init__.py +0 -0
  9. {siglab_py-0.5.35 → siglab_py-0.5.37}/siglab_py/constants.py +0 -0
  10. {siglab_py-0.5.35 → siglab_py-0.5.37}/siglab_py/exchanges/__init__.py +0 -0
  11. {siglab_py-0.5.35 → siglab_py-0.5.37}/siglab_py/exchanges/any_exchange.py +0 -0
  12. {siglab_py-0.5.35 → siglab_py-0.5.37}/siglab_py/exchanges/futubull.py +0 -0
  13. {siglab_py-0.5.35 → siglab_py-0.5.37}/siglab_py/market_data_providers/__init__.py +0 -0
  14. {siglab_py-0.5.35 → siglab_py-0.5.37}/siglab_py/market_data_providers/aggregated_orderbook_provider.py +0 -0
  15. {siglab_py-0.5.35 → siglab_py-0.5.37}/siglab_py/market_data_providers/candles_provider.py +0 -0
  16. {siglab_py-0.5.35 → siglab_py-0.5.37}/siglab_py/market_data_providers/candles_ta_provider.py +0 -0
  17. {siglab_py-0.5.35 → siglab_py-0.5.37}/siglab_py/market_data_providers/ccxt_candles_ta_to_csv.py +0 -0
  18. {siglab_py-0.5.35 → siglab_py-0.5.37}/siglab_py/market_data_providers/deribit_options_expiry_provider.py +0 -0
  19. {siglab_py-0.5.35 → siglab_py-0.5.37}/siglab_py/market_data_providers/futu_candles_ta_to_csv.py +0 -0
  20. {siglab_py-0.5.35 → siglab_py-0.5.37}/siglab_py/market_data_providers/orderbooks_provider.py +0 -0
  21. {siglab_py-0.5.35 → siglab_py-0.5.37}/siglab_py/market_data_providers/test_provider.py +0 -0
  22. {siglab_py-0.5.35 → siglab_py-0.5.37}/siglab_py/market_data_providers/tg_monitor.py +0 -0
  23. {siglab_py-0.5.35 → siglab_py-0.5.37}/siglab_py/ordergateway/__init__.py +0 -0
  24. {siglab_py-0.5.35 → siglab_py-0.5.37}/siglab_py/ordergateway/client.py +0 -0
  25. {siglab_py-0.5.35 → siglab_py-0.5.37}/siglab_py/ordergateway/encrypt_keys_util.py +0 -0
  26. {siglab_py-0.5.35 → siglab_py-0.5.37}/siglab_py/ordergateway/gateway.py +0 -0
  27. {siglab_py-0.5.35 → siglab_py-0.5.37}/siglab_py/ordergateway/test_ordergateway.py +0 -0
  28. {siglab_py-0.5.35 → siglab_py-0.5.37}/siglab_py/tests/__init__.py +0 -0
  29. {siglab_py-0.5.35 → siglab_py-0.5.37}/siglab_py/tests/integration/__init__.py +0 -0
  30. {siglab_py-0.5.35 → siglab_py-0.5.37}/siglab_py/tests/integration/market_data_util_tests.py +0 -0
  31. {siglab_py-0.5.35 → siglab_py-0.5.37}/siglab_py/tests/unit/__init__.py +0 -0
  32. {siglab_py-0.5.35 → siglab_py-0.5.37}/siglab_py/tests/unit/market_data_util_tests.py +0 -0
  33. {siglab_py-0.5.35 → siglab_py-0.5.37}/siglab_py/tests/unit/trading_util_tests.py +0 -0
  34. {siglab_py-0.5.35 → siglab_py-0.5.37}/siglab_py/util/__init__.py +0 -0
  35. {siglab_py-0.5.35 → siglab_py-0.5.37}/siglab_py/util/aws_util.py +0 -0
  36. {siglab_py-0.5.35 → siglab_py-0.5.37}/siglab_py/util/market_data_util.py +0 -0
  37. {siglab_py-0.5.35 → siglab_py-0.5.37}/siglab_py/util/retry_util.py +0 -0
  38. {siglab_py-0.5.35 → siglab_py-0.5.37}/siglab_py/util/slack_notification_util.py +0 -0
  39. {siglab_py-0.5.35 → siglab_py-0.5.37}/siglab_py/util/trading_util.py +0 -0
  40. {siglab_py-0.5.35 → siglab_py-0.5.37}/siglab_py.egg-info/SOURCES.txt +0 -0
  41. {siglab_py-0.5.35 → siglab_py-0.5.37}/siglab_py.egg-info/dependency_links.txt +0 -0
  42. {siglab_py-0.5.35 → siglab_py-0.5.37}/siglab_py.egg-info/requires.txt +0 -0
  43. {siglab_py-0.5.35 → siglab_py-0.5.37}/siglab_py.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: siglab_py
3
- Version: 0.5.35
3
+ Version: 0.5.37
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.5.35"
7
+ version = "0.5.37"
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.5.35
3
+ version = 0.5.37
4
4
  description = Market data fetches, TA calculations and generic order gateway.
5
5
  author = r0bbarh00d
6
6
  author_email = r0bbarh00d@gmail.com
@@ -38,7 +38,7 @@ class AnalyticUtilTests(unittest.TestCase):
38
38
  pd_candles=pd_candles,
39
39
  boillenger_std_multiples=2,
40
40
  sliding_window_how_many_candles=20,
41
- pypy_compat=True
41
+ pypy_compat=True # Slopes calculation? Set pypy_compat to False
42
42
  )
43
43
 
44
44
  expected_columns : List[str] = [
@@ -141,7 +141,6 @@ def compute_candles_stats(
141
141
  close_short_periods_ewm = pd_candles['close'].ewm(span=int(sliding_window_how_many_candles/slow_fast_interval_ratio), adjust=False)
142
142
  close_long_periods_ewm = pd_candles['close'].ewm(span=sliding_window_how_many_candles, adjust=False)
143
143
 
144
-
145
144
  pd_candles['pct_change_close'] = pd_candles['close'].pct_change() * 100
146
145
  pd_candles['sma_short_periods'] = close_short_periods_rolling.mean()
147
146
  pd_candles['sma_long_periods'] = close_long_periods_rolling.mean()
@@ -168,6 +167,8 @@ def compute_candles_stats(
168
167
  pd_candles['annualized_volatility'] = (
169
168
  pd_candles['interval_historical_volatility'] * annualization_factor
170
169
  )
170
+
171
+ Why log return? Trading Dude https://python.plainenglish.io/stop-using-percentage-returns-logarithmic-returns-explained-with-code-64a4634b883a
171
172
  '''
172
173
  pd_candles['log_return'] = np.log(pd_candles['close'] / pd_candles['close'].shift(1))
173
174
  pd_candles['interval_hist_vol'] = pd_candles['log_return'].rolling(window=sliding_window_how_many_candles).std()
@@ -203,25 +204,25 @@ def compute_candles_stats(
203
204
  bearish_indices = pd.Series(pd_candles.index.where(pd_candles['ema_cross'] == -1), index=pd_candles.index).astype('Int64')
204
205
  pd_candles['ema_bullish_cross_last_id'] = bullish_indices.rolling(window=pd_candles.shape[0], min_periods=1).max().astype('Int64')
205
206
  pd_candles['ema_bearish_cross_last_id'] = bearish_indices.rolling(window=pd_candles.shape[0], min_periods=1).max().astype('Int64')
206
- pd_candles['ema_cross_last'] = np.where(
207
- (pd_candles['ema_bullish_cross_last_id'].notna()) & (
208
- pd_candles['ema_bearish_cross_last_id'].isna() |
209
- (pd_candles['ema_bullish_cross_last_id'] > pd_candles['ema_bearish_cross_last_id'])
210
- ),
211
- 'bullish',
212
- np.where(
213
- (pd_candles['ema_bearish_cross_last_id'].notna()) & (
214
- pd_candles['ema_bullish_cross_last_id'].isna() |
215
- (pd_candles['ema_bearish_cross_last_id'] > pd_candles['ema_bullish_cross_last_id'])
216
- ),
217
- 'bearish',
218
- None # type: ignore
219
- )
220
- )
221
- pd_candles['ema_cross_last'] = pd_candles['ema_cross_last'].where(
222
- pd_candles['ema_bullish_cross_last_id'].isna() & pd_candles['ema_bearish_cross_last_id'].isna(),
223
- None
224
- )
207
+ conditions = [
208
+ (pd_candles['ema_bullish_cross_last_id'].notna() &
209
+ pd_candles['ema_bearish_cross_last_id'].notna() &
210
+ (pd_candles['ema_bullish_cross_last_id'] > pd_candles['ema_bearish_cross_last_id'])),
211
+
212
+ (pd_candles['ema_bullish_cross_last_id'].notna() &
213
+ pd_candles['ema_bearish_cross_last_id'].notna() &
214
+ (pd_candles['ema_bearish_cross_last_id'] > pd_candles['ema_bullish_cross_last_id'])),
215
+
216
+ (pd_candles['ema_bullish_cross_last_id'].notna() &
217
+ pd_candles['ema_bearish_cross_last_id'].isna()),
218
+
219
+ (pd_candles['ema_bearish_cross_last_id'].notna() &
220
+ pd_candles['ema_bullish_cross_last_id'].isna())
221
+ ]
222
+ choices = ['bullish', 'bearish', 'bullish', 'bearish']
223
+ pd_candles['ema_cross_last'] = np.select(conditions, choices, default=None) # type: ignore
224
+ pd_candles.loc[bullish_ema_crosses, 'ema_cross'] = 'bullish'
225
+ pd_candles.loc[bearish_ema_crosses, 'ema_cross'] = 'bearish'
225
226
 
226
227
  pd_candles['max_short_periods'] = close_short_periods_rolling.max()
227
228
  pd_candles['max_long_periods'] = close_long_periods_rolling.max()
@@ -5,7 +5,7 @@ import pandas as pd
5
5
  import numpy as np
6
6
  from tabulate import tabulate
7
7
 
8
- from util.slack_notification_util import slack_dispatch_notification
8
+ from siglab_py.util.slack_notification_util import slack_dispatch_notification
9
9
 
10
10
  from siglab_py.constants import LogLevel
11
11
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: siglab_py
3
- Version: 0.5.35
3
+ Version: 0.5.37
4
4
  Summary: Market data fetches, TA calculations and generic order gateway.
5
5
  Author: r0bbarh00d
6
6
  Author-email: r0bbarh00d <r0bbarh00d@gmail.com>