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,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
|