siglab-py 0.5.51__py3-none-any.whl → 0.5.53__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.
- siglab_py/tests/unit/analytic_util_tests.py +3 -3
- siglab_py/util/analytic_util.py +10 -5
- {siglab_py-0.5.51.dist-info → siglab_py-0.5.53.dist-info}/METADATA +1 -1
- {siglab_py-0.5.51.dist-info → siglab_py-0.5.53.dist-info}/RECORD +6 -6
- {siglab_py-0.5.51.dist-info → siglab_py-0.5.53.dist-info}/WHEEL +0 -0
- {siglab_py-0.5.51.dist-info → siglab_py-0.5.53.dist-info}/top_level.txt +0 -0
|
@@ -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
|
]
|
siglab_py/util/analytic_util.py
CHANGED
|
@@ -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'].
|
|
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'
|
|
@@ -22,12 +22,12 @@ siglab_py/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
|
22
22
|
siglab_py/tests/integration/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
23
23
|
siglab_py/tests/integration/market_data_util_tests.py,sha256=p-RWIJZLyj0lAdfi4QTIeAttCm_e8mEVWFKh4OWuogU,7189
|
|
24
24
|
siglab_py/tests/unit/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
25
|
-
siglab_py/tests/unit/analytic_util_tests.py,sha256=
|
|
25
|
+
siglab_py/tests/unit/analytic_util_tests.py,sha256=90tC5wjaYtoma3DGwkQF7akAKkZ0R1LGDL8Jwna2TFg,5834
|
|
26
26
|
siglab_py/tests/unit/market_data_util_tests.py,sha256=A1y83itISmMJdn6wLpfwcr4tGola8wTf1D1xbelMvgw,2026
|
|
27
27
|
siglab_py/tests/unit/simple_math_tests.py,sha256=rWqq93W4Vlqmu0UeZCmSOfLirr0gPh2ASVIZ8O77qXY,9653
|
|
28
28
|
siglab_py/tests/unit/trading_util_tests.py,sha256=LiflZrduWXyLMbpSFQCaydA7jdJx3vFR-3KuKRRGhjQ,2927
|
|
29
29
|
siglab_py/util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
30
|
-
siglab_py/util/analytic_util.py,sha256=
|
|
30
|
+
siglab_py/util/analytic_util.py,sha256=xbA5HPiL1UX8VdZwHzKh-pKSCdQuNIwSKlnsISgRq1M,62009
|
|
31
31
|
siglab_py/util/aws_util.py,sha256=KGmjHrr1rpnnxr33nXHNzTul4tvyyxl9p6gpwNv0Ygc,2557
|
|
32
32
|
siglab_py/util/market_data_util.py,sha256=mUXg4uaiX3b6_klgJWIEgnUQU4IUd6CwTOqKLiQWRlU,31307
|
|
33
33
|
siglab_py/util/notification_util.py,sha256=tNZMUkkjz4q1CKqcQq62oEmZgHgNIwz2Iw9J22V22Zw,2668
|
|
@@ -35,7 +35,7 @@ siglab_py/util/retry_util.py,sha256=g-UU6pkPouWZZRZEqP99R2Z0lX5xzckYkzjwqqSDpVQ,
|
|
|
35
35
|
siglab_py/util/simple_math.py,sha256=kVBa-h7sH6IrDJOSxd0LtrLAe0ROMiIEg4fc53XO-IA,7416
|
|
36
36
|
siglab_py/util/slack_notification_util.py,sha256=G27n-adbT3Q6oaHSMvu_Nom794rrda5PprSF-zvmzkM,1912
|
|
37
37
|
siglab_py/util/trading_util.py,sha256=dlIOzoMGnddLSFODcJ61EBH1Aeruq4IT2MsxIdFkV9I,5252
|
|
38
|
-
siglab_py-0.5.
|
|
39
|
-
siglab_py-0.5.
|
|
40
|
-
siglab_py-0.5.
|
|
41
|
-
siglab_py-0.5.
|
|
38
|
+
siglab_py-0.5.53.dist-info/METADATA,sha256=lKO00cx8CDmGRQPYFAPd26uKHAv_smJzD0DWROAw4-Q,829
|
|
39
|
+
siglab_py-0.5.53.dist-info/WHEEL,sha256=lTU6B6eIfYoiQJTZNc-fyaR6BpL6ehTzU3xGYxn2n8k,91
|
|
40
|
+
siglab_py-0.5.53.dist-info/top_level.txt,sha256=AbD4VR9OqmMOGlMJLkAVPGQMtUPIQv0t1BF5xmcLJSk,10
|
|
41
|
+
siglab_py-0.5.53.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|