siglab-py 0.1.19__py3-none-any.whl → 0.6.33__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.
- siglab_py/algo/__init__.py +0 -0
- siglab_py/algo/macdrsi_crosses_15m_tc_strategy.py +107 -0
- siglab_py/algo/strategy_base.py +122 -0
- siglab_py/algo/strategy_executor.py +1308 -0
- siglab_py/algo/tp_algo.py +529 -0
- siglab_py/backtests/__init__.py +0 -0
- siglab_py/backtests/backtest_core.py +2405 -0
- siglab_py/backtests/coinflip_15m_crypto.py +432 -0
- siglab_py/backtests/fibonacci_d_mv_crypto.py +541 -0
- siglab_py/backtests/macdrsi_crosses_15m_tc_crypto.py +473 -0
- siglab_py/constants.py +26 -1
- siglab_py/exchanges/binance.py +38 -0
- siglab_py/exchanges/deribit.py +83 -0
- siglab_py/exchanges/futubull.py +33 -3
- siglab_py/market_data_providers/candles_provider.py +11 -10
- siglab_py/market_data_providers/candles_ta_provider.py +5 -5
- siglab_py/market_data_providers/ccxt_candles_ta_to_csv.py +238 -0
- siglab_py/market_data_providers/futu_candles_ta_to_csv.py +224 -0
- siglab_py/market_data_providers/google_monitor.py +320 -0
- siglab_py/market_data_providers/orderbooks_provider.py +15 -12
- siglab_py/market_data_providers/tg_monitor.py +428 -0
- siglab_py/market_data_providers/{test_provider.py → trigger_provider.py} +9 -8
- siglab_py/ordergateway/client.py +172 -41
- siglab_py/ordergateway/encrypt_keys_util.py +1 -1
- siglab_py/ordergateway/gateway.py +456 -344
- siglab_py/ordergateway/test_ordergateway.py +8 -7
- siglab_py/tests/integration/market_data_util_tests.py +80 -6
- siglab_py/tests/unit/analytic_util_tests.py +67 -4
- siglab_py/tests/unit/market_data_util_tests.py +96 -0
- siglab_py/tests/unit/simple_math_tests.py +252 -0
- siglab_py/tests/unit/trading_util_tests.py +65 -0
- siglab_py/util/analytic_util.py +484 -66
- siglab_py/util/datetime_util.py +39 -0
- siglab_py/util/market_data_util.py +564 -74
- siglab_py/util/module_util.py +40 -0
- siglab_py/util/notification_util.py +78 -0
- siglab_py/util/retry_util.py +16 -3
- siglab_py/util/simple_math.py +262 -0
- siglab_py/util/slack_notification_util.py +59 -0
- siglab_py/util/trading_util.py +118 -0
- {siglab_py-0.1.19.dist-info → siglab_py-0.6.33.dist-info}/METADATA +5 -13
- siglab_py-0.6.33.dist-info/RECORD +56 -0
- {siglab_py-0.1.19.dist-info → siglab_py-0.6.33.dist-info}/WHEEL +1 -1
- siglab_py-0.1.19.dist-info/RECORD +0 -31
- {siglab_py-0.1.19.dist-info → siglab_py-0.6.33.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
from datetime import datetime, timedelta
|
|
2
|
+
from typing import Dict
|
|
3
|
+
|
|
4
|
+
def parse_trading_window(
|
|
5
|
+
today : datetime,
|
|
6
|
+
window : Dict[str, str]
|
|
7
|
+
) :
|
|
8
|
+
window_start : str = window['start']
|
|
9
|
+
window_end : str = window['end']
|
|
10
|
+
|
|
11
|
+
DayOfWeekMap : Dict[str, int] = {
|
|
12
|
+
'Mon' : 0,
|
|
13
|
+
'Tue' : 1,
|
|
14
|
+
'Wed' : 2,
|
|
15
|
+
'Thur' : 3,
|
|
16
|
+
'Fri' : 4,
|
|
17
|
+
'Sat' : 5,
|
|
18
|
+
'Sun' : 6
|
|
19
|
+
}
|
|
20
|
+
today_dayofweek = today.weekday()
|
|
21
|
+
|
|
22
|
+
window_start_dayofweek : int = DayOfWeekMap[window_start.split('_')[0]]
|
|
23
|
+
window_start_hr : int = int(window_start.split('_')[-1].split(':')[0])
|
|
24
|
+
window_start_min : int = int(window_start.split('_')[-1].split(':')[1])
|
|
25
|
+
dt_window_start = today + timedelta(days=(window_start_dayofweek-today_dayofweek))
|
|
26
|
+
dt_window_start = dt_window_start.replace(hour=window_start_hr, minute=window_start_min)
|
|
27
|
+
|
|
28
|
+
window_end_dayofweek : int = DayOfWeekMap[window_end.split('_')[0]]
|
|
29
|
+
window_end_hr : int = int(window_end.split('_')[-1].split(':')[0])
|
|
30
|
+
window_end_min : int = int(window_end.split('_')[-1].split(':')[1])
|
|
31
|
+
dt_window_end = today + timedelta(days=(window_end_dayofweek-today_dayofweek))
|
|
32
|
+
dt_window_end = dt_window_end.replace(hour=window_end_hr, minute=window_end_min)
|
|
33
|
+
|
|
34
|
+
return {
|
|
35
|
+
'today' : today,
|
|
36
|
+
'start' : dt_window_start,
|
|
37
|
+
'end' : dt_window_end,
|
|
38
|
+
'in_window' : (today<=dt_window_end) and (today>=dt_window_start)
|
|
39
|
+
}
|