siglab-py 0.5.51__tar.gz → 0.5.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.

Files changed (45) hide show
  1. {siglab_py-0.5.51 → siglab_py-0.5.53}/PKG-INFO +1 -1
  2. {siglab_py-0.5.51 → siglab_py-0.5.53}/pyproject.toml +1 -1
  3. {siglab_py-0.5.51 → siglab_py-0.5.53}/setup.cfg +1 -1
  4. {siglab_py-0.5.51 → siglab_py-0.5.53}/siglab_py/tests/unit/analytic_util_tests.py +3 -3
  5. {siglab_py-0.5.51 → siglab_py-0.5.53}/siglab_py/util/analytic_util.py +10 -5
  6. {siglab_py-0.5.51 → siglab_py-0.5.53}/siglab_py.egg-info/PKG-INFO +1 -1
  7. {siglab_py-0.5.51 → siglab_py-0.5.53}/siglab_py/__init__.py +0 -0
  8. {siglab_py-0.5.51 → siglab_py-0.5.53}/siglab_py/constants.py +0 -0
  9. {siglab_py-0.5.51 → siglab_py-0.5.53}/siglab_py/exchanges/__init__.py +0 -0
  10. {siglab_py-0.5.51 → siglab_py-0.5.53}/siglab_py/exchanges/any_exchange.py +0 -0
  11. {siglab_py-0.5.51 → siglab_py-0.5.53}/siglab_py/exchanges/futubull.py +0 -0
  12. {siglab_py-0.5.51 → siglab_py-0.5.53}/siglab_py/market_data_providers/__init__.py +0 -0
  13. {siglab_py-0.5.51 → siglab_py-0.5.53}/siglab_py/market_data_providers/aggregated_orderbook_provider.py +0 -0
  14. {siglab_py-0.5.51 → siglab_py-0.5.53}/siglab_py/market_data_providers/candles_provider.py +0 -0
  15. {siglab_py-0.5.51 → siglab_py-0.5.53}/siglab_py/market_data_providers/candles_ta_provider.py +0 -0
  16. {siglab_py-0.5.51 → siglab_py-0.5.53}/siglab_py/market_data_providers/ccxt_candles_ta_to_csv.py +0 -0
  17. {siglab_py-0.5.51 → siglab_py-0.5.53}/siglab_py/market_data_providers/deribit_options_expiry_provider.py +0 -0
  18. {siglab_py-0.5.51 → siglab_py-0.5.53}/siglab_py/market_data_providers/futu_candles_ta_to_csv.py +0 -0
  19. {siglab_py-0.5.51 → siglab_py-0.5.53}/siglab_py/market_data_providers/orderbooks_provider.py +0 -0
  20. {siglab_py-0.5.51 → siglab_py-0.5.53}/siglab_py/market_data_providers/test_provider.py +0 -0
  21. {siglab_py-0.5.51 → siglab_py-0.5.53}/siglab_py/market_data_providers/tg_monitor.py +0 -0
  22. {siglab_py-0.5.51 → siglab_py-0.5.53}/siglab_py/ordergateway/__init__.py +0 -0
  23. {siglab_py-0.5.51 → siglab_py-0.5.53}/siglab_py/ordergateway/client.py +0 -0
  24. {siglab_py-0.5.51 → siglab_py-0.5.53}/siglab_py/ordergateway/encrypt_keys_util.py +0 -0
  25. {siglab_py-0.5.51 → siglab_py-0.5.53}/siglab_py/ordergateway/gateway.py +0 -0
  26. {siglab_py-0.5.51 → siglab_py-0.5.53}/siglab_py/ordergateway/test_ordergateway.py +0 -0
  27. {siglab_py-0.5.51 → siglab_py-0.5.53}/siglab_py/tests/__init__.py +0 -0
  28. {siglab_py-0.5.51 → siglab_py-0.5.53}/siglab_py/tests/integration/__init__.py +0 -0
  29. {siglab_py-0.5.51 → siglab_py-0.5.53}/siglab_py/tests/integration/market_data_util_tests.py +0 -0
  30. {siglab_py-0.5.51 → siglab_py-0.5.53}/siglab_py/tests/unit/__init__.py +0 -0
  31. {siglab_py-0.5.51 → siglab_py-0.5.53}/siglab_py/tests/unit/market_data_util_tests.py +0 -0
  32. {siglab_py-0.5.51 → siglab_py-0.5.53}/siglab_py/tests/unit/simple_math_tests.py +0 -0
  33. {siglab_py-0.5.51 → siglab_py-0.5.53}/siglab_py/tests/unit/trading_util_tests.py +0 -0
  34. {siglab_py-0.5.51 → siglab_py-0.5.53}/siglab_py/util/__init__.py +0 -0
  35. {siglab_py-0.5.51 → siglab_py-0.5.53}/siglab_py/util/aws_util.py +0 -0
  36. {siglab_py-0.5.51 → siglab_py-0.5.53}/siglab_py/util/market_data_util.py +0 -0
  37. {siglab_py-0.5.51 → siglab_py-0.5.53}/siglab_py/util/notification_util.py +0 -0
  38. {siglab_py-0.5.51 → siglab_py-0.5.53}/siglab_py/util/retry_util.py +0 -0
  39. {siglab_py-0.5.51 → siglab_py-0.5.53}/siglab_py/util/simple_math.py +0 -0
  40. {siglab_py-0.5.51 → siglab_py-0.5.53}/siglab_py/util/slack_notification_util.py +0 -0
  41. {siglab_py-0.5.51 → siglab_py-0.5.53}/siglab_py/util/trading_util.py +0 -0
  42. {siglab_py-0.5.51 → siglab_py-0.5.53}/siglab_py.egg-info/SOURCES.txt +0 -0
  43. {siglab_py-0.5.51 → siglab_py-0.5.53}/siglab_py.egg-info/dependency_links.txt +0 -0
  44. {siglab_py-0.5.51 → siglab_py-0.5.53}/siglab_py.egg-info/requires.txt +0 -0
  45. {siglab_py-0.5.51 → siglab_py-0.5.53}/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.51
3
+ Version: 0.5.53
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.51"
7
+ version = "0.5.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"}
@@ -1,6 +1,6 @@
1
1
  [metadata]
2
2
  name = siglab_py
3
- version = 0.5.51
3
+ version = 0.5.53
4
4
  description = Market data fetches, TA calculations and generic order gateway.
5
5
  author = r0bbarh00d
6
6
  author_email = r0bbarh00d@gmail.com
@@ -67,12 +67,12 @@ class AnalyticUtilTests(unittest.TestCase):
67
67
  'aggressive_up', 'aggressive_up_index', 'aggressive_up_candle_height', 'aggressive_up_candle_high', 'aggressive_up_candle_low', 'aggressive_down', 'aggressive_down_index', 'aggressive_down_candle_height', 'aggressive_down_candle_high', 'aggressive_down_candle_low',
68
68
  'fvg_low', 'fvg_high', 'fvg_gap', 'fvg_mitigated',
69
69
  'close_delta', 'close_delta_percent', 'up', 'down',
70
- 'rsi', 'ema_rsi', 'rsi_max', 'rsi_idmax', 'rsi_min', 'rsi_idmin', 'rsi_trend', 'rsi_trend_from_highs', 'rsi_trend_from_lows', 'rsi_divergence',
70
+ 'rsi', 'rsi_bucket', 'ema_rsi', 'rsi_max', 'rsi_idmax', 'rsi_min', 'rsi_idmin', 'rsi_trend', 'rsi_trend_from_highs', 'rsi_trend_from_lows', 'rsi_divergence',
71
71
  'typical_price',
72
- 'money_flow', 'money_flow_positive', 'money_flow_negative', 'positive_flow_sum', 'negative_flow_sum', 'money_flow_ratio', 'mfi',
72
+ 'money_flow', 'money_flow_positive', 'money_flow_negative', 'positive_flow_sum', 'negative_flow_sum', 'money_flow_ratio', 'mfi', 'mfi_bucket',
73
73
  'macd', 'signal', 'macd_minus_signal',
74
74
  'fib_0.618_short_periods', 'fib_0.618_long_periods',
75
- 'gap_close_vs_ema',
75
+ 'gap_close_vs_ema', 'gap_close_vs_ema_percent',
76
76
  'close_above_or_below_ema',
77
77
  'close_vs_ema_inflection'
78
78
  ]
@@ -11,7 +11,7 @@ from hurst import compute_Hc # compatible with pypy
11
11
  from ccxt.base.exchange import Exchange as CcxtExchange
12
12
  from ccxt import deribit
13
13
 
14
- from siglab_py.util.simple_math import bucket_series
14
+ from siglab_py.util.simple_math import bucket_series, bucketize_val
15
15
  from siglab_py.util.market_data_util import fix_column_types
16
16
  from siglab_py.constants import TrendDirection
17
17
 
@@ -185,7 +185,6 @@ def compute_candles_stats(
185
185
  annualization_factor = np.sqrt(candles_per_year)
186
186
  pd_candles['annualized_hist_vol'] = pd_candles['interval_hist_vol'] * annualization_factor
187
187
 
188
-
189
188
  pd_candles['chop_against_ema'] = (
190
189
  (~pd_candles['is_green'] & (pd_candles['close'] > pd_candles['ema_close'])) | # Case 1: Green candle and close > EMA
191
190
  (pd_candles['is_green'] & (pd_candles['close'] < pd_candles['ema_close'])) # Case 2: Red candle and close < EMA
@@ -480,9 +479,7 @@ def compute_candles_stats(
480
479
  level_granularity=0.1
481
480
  )
482
481
 
483
- pd_candles['rsi_bucket'] = pd_candles['rsi'].rolling(
484
- window=sliding_window_how_many_candles
485
- ).apply(lambda x: bucketize_val(x, buckets=rsi_buckets))
482
+ pd_candles['rsi_bucket'] = pd_candles['rsi'].apply(lambda x: bucketize_val(x, buckets=rsi_buckets))
486
483
  pd_candles['ema_rsi'] = pd_candles['rsi'].ewm(
487
484
  span=rsi_sliding_window_how_many_candles,
488
485
  adjust=False).mean()
@@ -544,6 +541,12 @@ def compute_candles_stats(
544
541
  rsi_sliding_window_how_many_candles if rsi_sliding_window_how_many_candles else sliding_window_how_many_candles).sum()
545
542
  pd_candles['money_flow_ratio'] = pd_candles['positive_flow_sum'] / pd_candles['negative_flow_sum']
546
543
  pd_candles['mfi'] = 100 - (100 / (1 + pd_candles['money_flow_ratio']))
544
+ mfi_buckets = bucket_series(
545
+ values = pd_candles['mfi'].to_list(),
546
+ outlier_threshold_percent=10,
547
+ level_granularity=0.1
548
+ )
549
+ pd_candles['mfi_bucket'] = pd_candles['mfi'].apply(lambda x: bucketize_val(x, buckets=mfi_buckets))
547
550
 
548
551
 
549
552
  # MACD https://www.investopedia.com/terms/m/macd.asp
@@ -622,6 +625,8 @@ def compute_candles_stats(
622
625
 
623
626
  # Inflection points
624
627
  pd_candles['gap_close_vs_ema'] = pd_candles['close'] - pd_candles['ema_long_periods']
628
+ pd_candles['gap_close_vs_ema_percent'] = pd_candles['gap_close_vs_ema']/pd_candles['close'] *100
629
+
625
630
  pd_candles['close_above_or_below_ema'] = None
626
631
  pd_candles.loc[pd_candles['gap_close_vs_ema'] > 0, 'close_above_or_below_ema'] = 'above'
627
632
  pd_candles.loc[pd_candles['gap_close_vs_ema'] < 0, 'close_above_or_below_ema'] = 'below'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: siglab_py
3
- Version: 0.5.51
3
+ Version: 0.5.53
4
4
  Summary: Market data fetches, TA calculations and generic order gateway.
5
5
  Author: r0bbarh00d
6
6
  Author-email: r0bbarh00d <r0bbarh00d@gmail.com>