siglab-py 0.1.30__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.
Files changed (45) hide show
  1. siglab_py/algo/__init__.py +0 -0
  2. siglab_py/algo/macdrsi_crosses_15m_tc_strategy.py +107 -0
  3. siglab_py/algo/strategy_base.py +122 -0
  4. siglab_py/algo/strategy_executor.py +1308 -0
  5. siglab_py/algo/tp_algo.py +529 -0
  6. siglab_py/backtests/__init__.py +0 -0
  7. siglab_py/backtests/backtest_core.py +2405 -0
  8. siglab_py/backtests/coinflip_15m_crypto.py +432 -0
  9. siglab_py/backtests/fibonacci_d_mv_crypto.py +541 -0
  10. siglab_py/backtests/macdrsi_crosses_15m_tc_crypto.py +473 -0
  11. siglab_py/constants.py +26 -1
  12. siglab_py/exchanges/binance.py +38 -0
  13. siglab_py/exchanges/deribit.py +83 -0
  14. siglab_py/exchanges/futubull.py +12 -2
  15. siglab_py/market_data_providers/candles_provider.py +11 -10
  16. siglab_py/market_data_providers/candles_ta_provider.py +5 -5
  17. siglab_py/market_data_providers/ccxt_candles_ta_to_csv.py +4 -4
  18. siglab_py/market_data_providers/futu_candles_ta_to_csv.py +7 -2
  19. siglab_py/market_data_providers/google_monitor.py +320 -0
  20. siglab_py/market_data_providers/orderbooks_provider.py +15 -12
  21. siglab_py/market_data_providers/tg_monitor.py +428 -0
  22. siglab_py/market_data_providers/{test_provider.py → trigger_provider.py} +9 -8
  23. siglab_py/ordergateway/client.py +172 -41
  24. siglab_py/ordergateway/encrypt_keys_util.py +1 -1
  25. siglab_py/ordergateway/gateway.py +456 -347
  26. siglab_py/ordergateway/test_ordergateway.py +8 -7
  27. siglab_py/tests/integration/market_data_util_tests.py +75 -2
  28. siglab_py/tests/unit/analytic_util_tests.py +47 -12
  29. siglab_py/tests/unit/market_data_util_tests.py +45 -1
  30. siglab_py/tests/unit/simple_math_tests.py +252 -0
  31. siglab_py/tests/unit/trading_util_tests.py +65 -0
  32. siglab_py/util/analytic_util.py +476 -67
  33. siglab_py/util/datetime_util.py +39 -0
  34. siglab_py/util/market_data_util.py +528 -98
  35. siglab_py/util/module_util.py +40 -0
  36. siglab_py/util/notification_util.py +78 -0
  37. siglab_py/util/retry_util.py +16 -3
  38. siglab_py/util/simple_math.py +262 -0
  39. siglab_py/util/slack_notification_util.py +59 -0
  40. siglab_py/util/trading_util.py +118 -0
  41. {siglab_py-0.1.30.dist-info → siglab_py-0.6.33.dist-info}/METADATA +5 -9
  42. siglab_py-0.6.33.dist-info/RECORD +56 -0
  43. {siglab_py-0.1.30.dist-info → siglab_py-0.6.33.dist-info}/WHEEL +1 -1
  44. siglab_py-0.1.30.dist-info/RECORD +0 -34
  45. {siglab_py-0.1.30.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
+ }