siglab-py 0.2.6__tar.gz → 0.2.8__tar.gz

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.

Files changed (40) hide show
  1. {siglab_py-0.2.6 → siglab_py-0.2.8}/PKG-INFO +1 -1
  2. {siglab_py-0.2.6 → siglab_py-0.2.8}/pyproject.toml +1 -1
  3. {siglab_py-0.2.6 → siglab_py-0.2.8}/setup.cfg +1 -1
  4. {siglab_py-0.2.6 → siglab_py-0.2.8}/siglab_py/ordergateway/gateway.py +7 -2
  5. {siglab_py-0.2.6 → siglab_py-0.2.8}/siglab_py/ordergateway/test_ordergateway.py +1 -2
  6. {siglab_py-0.2.6 → siglab_py-0.2.8}/siglab_py/util/slack_notification_util.py +12 -21
  7. {siglab_py-0.2.6 → siglab_py-0.2.8}/siglab_py.egg-info/PKG-INFO +1 -1
  8. {siglab_py-0.2.6 → siglab_py-0.2.8}/siglab_py/__init__.py +0 -0
  9. {siglab_py-0.2.6 → siglab_py-0.2.8}/siglab_py/constants.py +0 -0
  10. {siglab_py-0.2.6 → siglab_py-0.2.8}/siglab_py/exchanges/__init__.py +0 -0
  11. {siglab_py-0.2.6 → siglab_py-0.2.8}/siglab_py/exchanges/any_exchange.py +0 -0
  12. {siglab_py-0.2.6 → siglab_py-0.2.8}/siglab_py/exchanges/futubull.py +0 -0
  13. {siglab_py-0.2.6 → siglab_py-0.2.8}/siglab_py/market_data_providers/__init__.py +0 -0
  14. {siglab_py-0.2.6 → siglab_py-0.2.8}/siglab_py/market_data_providers/aggregated_orderbook_provider.py +0 -0
  15. {siglab_py-0.2.6 → siglab_py-0.2.8}/siglab_py/market_data_providers/candles_provider.py +0 -0
  16. {siglab_py-0.2.6 → siglab_py-0.2.8}/siglab_py/market_data_providers/candles_ta_provider.py +0 -0
  17. {siglab_py-0.2.6 → siglab_py-0.2.8}/siglab_py/market_data_providers/ccxt_candles_ta_to_csv.py +0 -0
  18. {siglab_py-0.2.6 → siglab_py-0.2.8}/siglab_py/market_data_providers/deribit_options_expiry_provider.py +0 -0
  19. {siglab_py-0.2.6 → siglab_py-0.2.8}/siglab_py/market_data_providers/futu_candles_ta_to_csv.py +0 -0
  20. {siglab_py-0.2.6 → siglab_py-0.2.8}/siglab_py/market_data_providers/orderbooks_provider.py +0 -0
  21. {siglab_py-0.2.6 → siglab_py-0.2.8}/siglab_py/market_data_providers/test_provider.py +0 -0
  22. {siglab_py-0.2.6 → siglab_py-0.2.8}/siglab_py/ordergateway/__init__.py +0 -0
  23. {siglab_py-0.2.6 → siglab_py-0.2.8}/siglab_py/ordergateway/client.py +0 -0
  24. {siglab_py-0.2.6 → siglab_py-0.2.8}/siglab_py/ordergateway/encrypt_keys_util.py +0 -0
  25. {siglab_py-0.2.6 → siglab_py-0.2.8}/siglab_py/tests/__init__.py +0 -0
  26. {siglab_py-0.2.6 → siglab_py-0.2.8}/siglab_py/tests/integration/__init__.py +0 -0
  27. {siglab_py-0.2.6 → siglab_py-0.2.8}/siglab_py/tests/integration/market_data_util_tests.py +0 -0
  28. {siglab_py-0.2.6 → siglab_py-0.2.8}/siglab_py/tests/unit/__init__.py +0 -0
  29. {siglab_py-0.2.6 → siglab_py-0.2.8}/siglab_py/tests/unit/analytic_util_tests.py +0 -0
  30. {siglab_py-0.2.6 → siglab_py-0.2.8}/siglab_py/tests/unit/market_data_util_tests.py +0 -0
  31. {siglab_py-0.2.6 → siglab_py-0.2.8}/siglab_py/util/__init__.py +0 -0
  32. {siglab_py-0.2.6 → siglab_py-0.2.8}/siglab_py/util/analytic_util.py +0 -0
  33. {siglab_py-0.2.6 → siglab_py-0.2.8}/siglab_py/util/aws_util.py +0 -0
  34. {siglab_py-0.2.6 → siglab_py-0.2.8}/siglab_py/util/market_data_util.py +0 -0
  35. {siglab_py-0.2.6 → siglab_py-0.2.8}/siglab_py/util/notification_util.py +0 -0
  36. {siglab_py-0.2.6 → siglab_py-0.2.8}/siglab_py/util/retry_util.py +0 -0
  37. {siglab_py-0.2.6 → siglab_py-0.2.8}/siglab_py.egg-info/SOURCES.txt +0 -0
  38. {siglab_py-0.2.6 → siglab_py-0.2.8}/siglab_py.egg-info/dependency_links.txt +0 -0
  39. {siglab_py-0.2.6 → siglab_py-0.2.8}/siglab_py.egg-info/requires.txt +0 -0
  40. {siglab_py-0.2.6 → siglab_py-0.2.8}/siglab_py.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: siglab_py
3
- Version: 0.2.6
3
+ Version: 0.2.8
4
4
  Summary: Market data fetches, TA calculations and generic order gateway.
5
5
  Author: r0bbarh00d
6
6
  Author-email: r0bbarh00d <r0bbarh00d@gmail.com>
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "siglab_py"
7
- version = "0.2.6"
7
+ version = "0.2.8"
8
8
  description = "Market data fetches, TA calculations and generic order gateway."
9
9
  authors = [{name = "r0bbarh00d", email = "r0bbarh00d@gmail.com"}]
10
10
  license = {text = "MIT"}
@@ -1,6 +1,6 @@
1
1
  [metadata]
2
2
  name = siglab_py
3
- version = 0.2.6
3
+ version = 0.2.8
4
4
  description = Market data fetches, TA calculations and generic order gateway.
5
5
  author = r0bbarh00d
6
6
  author_email = r0bbarh00d@gmail.com
@@ -38,6 +38,9 @@ Usage:
38
38
  --slack_info_url, --slack_critical_url and --slack_alert_url are if you want gateway to dispatch Slack notification on events.
39
39
  How to get Slack webhook urls? https://medium.com/@natalia_assad/how-send-a-table-to-slack-using-python-d1a20b08abe0
40
40
 
41
+ Another example:
42
+ python gateway.py --gateway_id hyperliquid_01 --default_type linear --rate_limit_ms 100 --slack_info_url=https://hooks.slack.com/services/xxx --slack_critial_url=https://hooks.slack.com/services/yyy --slack_alert_url=https://hooks.slack.com/services/zzz
43
+
41
44
  This script is pypy compatible:
42
45
  pypy gateway.py --gateway_id bybit_01 --default_type linear --rate_limit_ms 100
43
46
 
@@ -733,6 +736,8 @@ async def execute_one_position(
733
736
  log(f"Executions:")
734
737
  log(f"{json.dumps(position.get_executions(), indent=4)}")
735
738
 
739
+ notification_util.dispatch_notification(title=f"{param['gateway_id']} execute_one_position {position.ticker} {position.side} {position.amount}", message=position.get_executions(), footer=param['notification']['footer'], params=notification_params, log_level=LogLevel.CRITICAL)
740
+
736
741
  except Exception as position_execution_err:
737
742
  position.done = False
738
743
  position.execution_err = f"Execution failed: {position_execution_err} {str(sys.exc_info()[0])} {str(sys.exc_info()[1])} {traceback.format_exc()}"
@@ -875,8 +880,8 @@ async def main():
875
880
  # Once exchange instantiated, try fetch_balance to confirm connectivity and test credentials.
876
881
  balances = await exchange.fetch_balance() # type: ignore
877
882
  log(f"{param['gateway_id']}: account balances {balances}")
878
- notification_util.dispatch_notification(title=f"{param['gateway_id']} started", message=balances, footer=param['notification']['footer'], params=notification_params)
883
+ notification_util.dispatch_notification(title=f"{param['gateway_id']} started", message=balances, footer=param['notification']['footer'], params=notification_params, log_level=LogLevel.CRITICAL)
879
884
 
880
- await work(param=param, exchange=exchange, redis_client=redis_client, notification_params=notification_params, log_level=LogLevel.INFO)
885
+ await work(param=param, exchange=exchange, redis_client=redis_client, notification_params=notification_params)
881
886
 
882
887
  asyncio.run(main())
@@ -6,7 +6,6 @@ from typing import Any, Dict, List, Union
6
6
  import logging
7
7
  import json
8
8
  from redis import StrictRedis
9
- from sympy import false
10
9
 
11
10
  from ordergateway.client import DivisiblePosition, execute_positions
12
11
  from constants import JSON_SERIALIZABLE_TYPES
@@ -96,7 +95,7 @@ if __name__ == '__main__':
96
95
  side = 'sell',
97
96
  amount = 0.00100,
98
97
  leg_room_bps = 5,
99
- reduce_only=False,
98
+ reduce_only=True,
100
99
  order_type = 'limit',
101
100
  slices=1,
102
101
  wait_fill_threshold_ms=60000,
@@ -19,9 +19,9 @@ def slack_dispatch_notification(
19
19
 
20
20
  if log_level==LogLevel.INFO or log_level==LogLevel.DEBUG:
21
21
  webhook_url = slack_params['info']['webhook_url']
22
- elif log_level==LogLevel.ERROR or log_level==LogLevel.CRITICAL:
22
+ elif log_level==LogLevel.CRITICAL:
23
23
  webhook_url = slack_params['critical']['webhook_url']
24
- elif log_level==LogLevel.ERROR or log_level==LogLevel.CRITICAL:
24
+ elif log_level==LogLevel.ERROR:
25
25
  webhook_url = slack_params['alert']['webhook_url']
26
26
  else:
27
27
  webhook_url = slack_params['info']['webhook_url']
@@ -29,36 +29,27 @@ def slack_dispatch_notification(
29
29
  if not webhook_url:
30
30
  return
31
31
 
32
- slack_data = {
33
- "username": "NotificationBot",
32
+ data = {
33
+ "username": "x",
34
34
  "type": "section",
35
35
  "blocks": [
36
36
  {
37
37
  "type": "header",
38
- "text": {
39
- "type": "plain_text",
40
- "text": f"{title}"
41
- }
38
+ "text": { "type": "plain_text", "text": f"{title}" }
42
39
  },
43
40
  {
44
41
  "type": "section",
45
- "text": {
46
- "type": "mrkdwn",
47
- "text": message
48
- }
42
+ "text": { "type": "mrkdwn", "text": message }
49
43
  },
50
44
  {
51
45
  "type": "section",
52
- "text": {
53
- "type": "plain_text",
54
- "text": footer
55
- }
46
+ "text": { "type": "plain_text", "text": footer }
56
47
  }
57
48
  ]
58
49
  }
59
50
 
60
- byte_length = str(sys.getsizeof(slack_data, 2000))
61
- headers = {'Content-Type': "application/json", 'Content-Length': byte_length}
62
- response = requests.post(webhook_url, data=json.dumps(slack_data), headers=headers)
63
- if response.status_code != 200:
64
- raise Exception(response.status_code, response.text)
51
+ byte_size = str(sys.getsizeof(data, 2000))
52
+ req_headers = { 'Content-Length': byte_size, 'Content-Type': "application/json"}
53
+ rsp = requests.post(webhook_url, headers=req_headers, data=json.dumps(data))
54
+ if rsp.status_code != 200:
55
+ raise Exception(rsp.status_code, rsp.text)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: siglab-py
3
- Version: 0.2.6
3
+ Version: 0.2.8
4
4
  Summary: Market data fetches, TA calculations and generic order gateway.
5
5
  Author: r0bbarh00d
6
6
  Author-email: r0bbarh00d <r0bbarh00d@gmail.com>