siglab-py 0.5.1__py3-none-any.whl → 0.5.3__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/ordergateway/gateway.py +7 -0
- siglab_py/ordergateway/test_ordergateway.py +5 -5
- siglab_py/tests/unit/trading_util_tests.py +5 -0
- siglab_py/util/trading_util.py +5 -1
- {siglab_py-0.5.1.dist-info → siglab_py-0.5.3.dist-info}/METADATA +1 -1
- {siglab_py-0.5.1.dist-info → siglab_py-0.5.3.dist-info}/RECORD +8 -8
- {siglab_py-0.5.1.dist-info → siglab_py-0.5.3.dist-info}/WHEEL +0 -0
- {siglab_py-0.5.1.dist-info → siglab_py-0.5.3.dist-info}/top_level.txt +0 -0
|
@@ -31,6 +31,13 @@ from util.notification_util import dispatch_notification
|
|
|
31
31
|
|
|
32
32
|
current_filename = os.path.basename(__file__)
|
|
33
33
|
|
|
34
|
+
'''
|
|
35
|
+
Error: RuntimeError: aiodns needs a SelectorEventLoop on Windows.
|
|
36
|
+
Hack, by far the filthest hack I done in my career: Set SelectorEventLoop on Windows
|
|
37
|
+
'''
|
|
38
|
+
if sys.platform == 'win32':
|
|
39
|
+
asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
|
|
40
|
+
|
|
34
41
|
'''
|
|
35
42
|
Usage:
|
|
36
43
|
set PYTHONPATH=%PYTHONPATH%;D:\dev\siglab\siglab_py
|
|
@@ -78,13 +78,13 @@ if __name__ == '__main__':
|
|
|
78
78
|
|
|
79
79
|
positions_2 : List[DivisiblePosition] = [
|
|
80
80
|
DivisiblePosition(
|
|
81
|
-
ticker = 'SUSHI/
|
|
81
|
+
ticker = 'SUSHI/USDT:USDT',
|
|
82
82
|
side = 'buy',
|
|
83
|
-
amount =
|
|
84
|
-
leg_room_bps =
|
|
83
|
+
amount = 10,
|
|
84
|
+
leg_room_bps = 5,
|
|
85
85
|
reduce_only=False,
|
|
86
86
|
order_type = 'limit',
|
|
87
|
-
slices=
|
|
87
|
+
slices=5,
|
|
88
88
|
wait_fill_threshold_ms=15000
|
|
89
89
|
),
|
|
90
90
|
]
|
|
@@ -106,7 +106,7 @@ if __name__ == '__main__':
|
|
|
106
106
|
|
|
107
107
|
executed_positions : Union[Dict[JSON_SERIALIZABLE_TYPES, JSON_SERIALIZABLE_TYPES], None] = execute_positions(
|
|
108
108
|
redis_client=redis_client,
|
|
109
|
-
positions=
|
|
109
|
+
positions=positions_3,
|
|
110
110
|
ordergateway_pending_orders_topic=ordergateway_pending_orders_topic,
|
|
111
111
|
ordergateway_executions_topic=ordergateway_executions_topic
|
|
112
112
|
)
|
|
@@ -5,6 +5,11 @@ from pathlib import Path
|
|
|
5
5
|
|
|
6
6
|
from util.trading_util import *
|
|
7
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
|
+
'''
|
|
8
13
|
|
|
9
14
|
# @unittest.skip("Skip all integration tests.")
|
|
10
15
|
class TradingUtilTests(unittest.TestCase):
|
siglab_py/util/trading_util.py
CHANGED
|
@@ -49,6 +49,10 @@ What's 'loss_trailing'? 'loss_trailing' is essentially pnl drop from max_unreali
|
|
|
49
49
|
unrealized_pnl_live = $40
|
|
50
50
|
max_unrealized_pnl_live = $100
|
|
51
51
|
loss_trailing = (1 - unrealized_pnl_live/max_unrealized_pnl_live) = (1-40/100) = 0.6 (Or 60%)
|
|
52
|
+
|
|
53
|
+
Have a look at this for a visual explaination how "Gradually tightened stops" works:
|
|
54
|
+
https://github.com/r0bbar/siglab/blob/master/siglab_py/tests/manual/trading_util_tests.ipynb
|
|
55
|
+
https://norman-lm-fung.medium.com/gradually-tightened-trailing-stops-f7854bf1e02b
|
|
52
56
|
'''
|
|
53
57
|
def calc_eff_trailing_sl(
|
|
54
58
|
tp_min_percent : float,
|
|
@@ -60,7 +64,7 @@ def calc_eff_trailing_sl(
|
|
|
60
64
|
slope = (0 - sl_percent_trailing) / (tp_max_percent - tp_min_percent)
|
|
61
65
|
effective_tp_trailing_percent = (
|
|
62
66
|
slope * (pnl_percent_notional - tp_min_percent) + sl_percent_trailing
|
|
63
|
-
if pnl_percent_notional
|
|
67
|
+
if pnl_percent_notional>=tp_min_percent
|
|
64
68
|
else default_effective_tp_trailing_percent
|
|
65
69
|
)
|
|
66
70
|
return effective_tp_trailing_percent
|
|
@@ -15,15 +15,15 @@ siglab_py/market_data_providers/test_provider.py,sha256=wBLCgcWjs7FGZJXWsNyn30lk
|
|
|
15
15
|
siglab_py/ordergateway/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
16
16
|
siglab_py/ordergateway/client.py,sha256=LvtrYirrdFOcKgTkvuqwdEN7r3nurjX320ESnk7tHE0,15095
|
|
17
17
|
siglab_py/ordergateway/encrypt_keys_util.py,sha256=-qi87db8To8Yf1WS1Q_Cp2Ya7ZqgWlRqSHfNXCM7wE4,1339
|
|
18
|
-
siglab_py/ordergateway/gateway.py,sha256=
|
|
19
|
-
siglab_py/ordergateway/test_ordergateway.py,sha256=
|
|
18
|
+
siglab_py/ordergateway/gateway.py,sha256=Z-BQ-Z9gXoNrKQHzRIy9R1mnCybf9QwWhHpqkSI7bBM,43901
|
|
19
|
+
siglab_py/ordergateway/test_ordergateway.py,sha256=4PE2flp_soGcD3DrI7zJOzZndjkb6I5XaDrFNNq4Huo,4009
|
|
20
20
|
siglab_py/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
21
21
|
siglab_py/tests/integration/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
22
22
|
siglab_py/tests/integration/market_data_util_tests.py,sha256=p-RWIJZLyj0lAdfi4QTIeAttCm_e8mEVWFKh4OWuogU,7189
|
|
23
23
|
siglab_py/tests/unit/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
24
24
|
siglab_py/tests/unit/analytic_util_tests.py,sha256=eeusM5zkQR2QyVhT7nqF0mwHVg7vlxwtgv2JnLqwQgY,3852
|
|
25
25
|
siglab_py/tests/unit/market_data_util_tests.py,sha256=A1y83itISmMJdn6wLpfwcr4tGola8wTf1D1xbelMvgw,2026
|
|
26
|
-
siglab_py/tests/unit/trading_util_tests.py,sha256=
|
|
26
|
+
siglab_py/tests/unit/trading_util_tests.py,sha256=hkAEZHT-8Ncbm9sG-H4WRoyryJSTCj9BsWTdDX7e4hU,2970
|
|
27
27
|
siglab_py/util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
28
28
|
siglab_py/util/analytic_util.py,sha256=blFJ1kY_aSJeuzzk28vdB4nhLgmosz0L8IJaJCZy9OM,47272
|
|
29
29
|
siglab_py/util/aws_util.py,sha256=KGmjHrr1rpnnxr33nXHNzTul4tvyyxl9p6gpwNv0Ygc,2557
|
|
@@ -31,8 +31,8 @@ siglab_py/util/market_data_util.py,sha256=mUXg4uaiX3b6_klgJWIEgnUQU4IUd6CwTOqKLi
|
|
|
31
31
|
siglab_py/util/notification_util.py,sha256=vySgHjpHgwFDLW0tHSi_AGh9JBbPc25IUgvWxmjAeT8,2658
|
|
32
32
|
siglab_py/util/retry_util.py,sha256=g-UU6pkPouWZZRZEqP99R2Z0lX5xzckYkzjwqqSDpVQ,922
|
|
33
33
|
siglab_py/util/slack_notification_util.py,sha256=G27n-adbT3Q6oaHSMvu_Nom794rrda5PprSF-zvmzkM,1912
|
|
34
|
-
siglab_py/util/trading_util.py,sha256=
|
|
35
|
-
siglab_py-0.5.
|
|
36
|
-
siglab_py-0.5.
|
|
37
|
-
siglab_py-0.5.
|
|
38
|
-
siglab_py-0.5.
|
|
34
|
+
siglab_py/util/trading_util.py,sha256=rXiBLOJGxerK1Uz1D1GBLedunTobtDCC85d42on4TYg,3321
|
|
35
|
+
siglab_py-0.5.3.dist-info/METADATA,sha256=0yexMdatpl2UTVYRTyD0taYxeTlULA3j3GOZBfdr9jg,979
|
|
36
|
+
siglab_py-0.5.3.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
|
|
37
|
+
siglab_py-0.5.3.dist-info/top_level.txt,sha256=AbD4VR9OqmMOGlMJLkAVPGQMtUPIQv0t1BF5xmcLJSk,10
|
|
38
|
+
siglab_py-0.5.3.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|