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.
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 +33 -3
  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 +238 -0
  18. siglab_py/market_data_providers/futu_candles_ta_to_csv.py +224 -0
  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 -344
  26. siglab_py/ordergateway/test_ordergateway.py +8 -7
  27. siglab_py/tests/integration/market_data_util_tests.py +80 -6
  28. siglab_py/tests/unit/analytic_util_tests.py +67 -4
  29. siglab_py/tests/unit/market_data_util_tests.py +96 -0
  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 +484 -66
  33. siglab_py/util/datetime_util.py +39 -0
  34. siglab_py/util/market_data_util.py +564 -74
  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.19.dist-info → siglab_py-0.6.33.dist-info}/METADATA +5 -13
  42. siglab_py-0.6.33.dist-info/RECORD +56 -0
  43. {siglab_py-0.1.19.dist-info → siglab_py-0.6.33.dist-info}/WHEEL +1 -1
  44. siglab_py-0.1.19.dist-info/RECORD +0 -31
  45. {siglab_py-0.1.19.dist-info → siglab_py-0.6.33.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,65 @@
1
+ import unittest
2
+ from datetime import datetime, timedelta
3
+ from typing import Union
4
+ from pathlib import Path
5
+
6
+ from util.trading_util import *
7
+
8
+ '''
9
+ Have a look at this for a visual explaination how "Gradually tightened stops" works:
10
+ https://github.com/r0bbar/siglab/blob/master/siglab_py/tests/manual/trading_util_tests.ipynb
11
+ https://norman-lm-fung.medium.com/gradually-tightened-trailing-stops-f7854bf1e02b
12
+ '''
13
+
14
+ # @unittest.skip("Skip all integration tests.")
15
+ class TradingUtilTests(unittest.TestCase):
16
+ def test_calc_eff_trailing_sl_case1(self):
17
+ tp_min_percent : float = 1.5
18
+ tp_max_percent : float = 2.5
19
+ sl_percent_trailing : float = 50 # Trailing stop loss in percent
20
+ default_effective_tp_trailing_percent : float = 50
21
+
22
+ pnl_percent_notional : float = 0.5 # Trade's current pnl in percent.
23
+
24
+ effective_tp_trailing_percent = calc_eff_trailing_sl(
25
+ tp_min_percent = tp_min_percent,
26
+ tp_max_percent = tp_max_percent,
27
+ sl_percent_trailing = sl_percent_trailing,
28
+ pnl_percent_notional = pnl_percent_notional,
29
+ default_effective_tp_trailing_percent = default_effective_tp_trailing_percent
30
+ )
31
+ assert(effective_tp_trailing_percent==50) # Generous trailing SL when trading starting out and pnl small.
32
+
33
+ def test_calc_eff_trailing_sl_case2(self):
34
+ tp_min_percent : float = 1.5
35
+ tp_max_percent : float = 2.5
36
+ sl_percent_trailing : float = 50 # Trailing stop loss in percent
37
+ default_effective_tp_trailing_percent : float = 50
38
+
39
+ pnl_percent_notional : float = 2 # Trade's current pnl in percent.
40
+
41
+ effective_tp_trailing_percent = calc_eff_trailing_sl(
42
+ tp_min_percent = tp_min_percent,
43
+ tp_max_percent = tp_max_percent,
44
+ sl_percent_trailing = sl_percent_trailing,
45
+ pnl_percent_notional = pnl_percent_notional,
46
+ default_effective_tp_trailing_percent = default_effective_tp_trailing_percent
47
+ )
48
+ assert(effective_tp_trailing_percent==25) # Intermediate trailing SL
49
+
50
+ def test_calc_eff_trailing_sl_case3(self):
51
+ tp_min_percent : float = 1.5
52
+ tp_max_percent : float = 2.5
53
+ sl_percent_trailing : float = 50 # Trailing stop loss in percent
54
+ default_effective_tp_trailing_percent : float = 50
55
+
56
+ pnl_percent_notional : float = 2.5 # Trade's current pnl in percent.
57
+
58
+ effective_tp_trailing_percent = calc_eff_trailing_sl(
59
+ tp_min_percent = tp_min_percent,
60
+ tp_max_percent = tp_max_percent,
61
+ sl_percent_trailing = sl_percent_trailing,
62
+ pnl_percent_notional = pnl_percent_notional,
63
+ default_effective_tp_trailing_percent = default_effective_tp_trailing_percent
64
+ )
65
+ assert(effective_tp_trailing_percent==0) # Most tight trailing SL