siglab-py 0.5.1__tar.gz → 0.5.3__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 (42) hide show
  1. {siglab_py-0.5.1 → siglab_py-0.5.3}/PKG-INFO +1 -1
  2. {siglab_py-0.5.1 → siglab_py-0.5.3}/pyproject.toml +1 -1
  3. {siglab_py-0.5.1 → siglab_py-0.5.3}/setup.cfg +1 -1
  4. {siglab_py-0.5.1 → siglab_py-0.5.3}/siglab_py/ordergateway/gateway.py +7 -0
  5. {siglab_py-0.5.1 → siglab_py-0.5.3}/siglab_py/ordergateway/test_ordergateway.py +5 -5
  6. {siglab_py-0.5.1 → siglab_py-0.5.3}/siglab_py/tests/unit/trading_util_tests.py +5 -0
  7. {siglab_py-0.5.1 → siglab_py-0.5.3}/siglab_py/util/trading_util.py +5 -1
  8. {siglab_py-0.5.1 → siglab_py-0.5.3}/siglab_py.egg-info/PKG-INFO +1 -1
  9. {siglab_py-0.5.1 → siglab_py-0.5.3}/siglab_py/__init__.py +0 -0
  10. {siglab_py-0.5.1 → siglab_py-0.5.3}/siglab_py/constants.py +0 -0
  11. {siglab_py-0.5.1 → siglab_py-0.5.3}/siglab_py/exchanges/__init__.py +0 -0
  12. {siglab_py-0.5.1 → siglab_py-0.5.3}/siglab_py/exchanges/any_exchange.py +0 -0
  13. {siglab_py-0.5.1 → siglab_py-0.5.3}/siglab_py/exchanges/futubull.py +0 -0
  14. {siglab_py-0.5.1 → siglab_py-0.5.3}/siglab_py/market_data_providers/__init__.py +0 -0
  15. {siglab_py-0.5.1 → siglab_py-0.5.3}/siglab_py/market_data_providers/aggregated_orderbook_provider.py +0 -0
  16. {siglab_py-0.5.1 → siglab_py-0.5.3}/siglab_py/market_data_providers/candles_provider.py +0 -0
  17. {siglab_py-0.5.1 → siglab_py-0.5.3}/siglab_py/market_data_providers/candles_ta_provider.py +0 -0
  18. {siglab_py-0.5.1 → siglab_py-0.5.3}/siglab_py/market_data_providers/ccxt_candles_ta_to_csv.py +0 -0
  19. {siglab_py-0.5.1 → siglab_py-0.5.3}/siglab_py/market_data_providers/deribit_options_expiry_provider.py +0 -0
  20. {siglab_py-0.5.1 → siglab_py-0.5.3}/siglab_py/market_data_providers/futu_candles_ta_to_csv.py +0 -0
  21. {siglab_py-0.5.1 → siglab_py-0.5.3}/siglab_py/market_data_providers/orderbooks_provider.py +0 -0
  22. {siglab_py-0.5.1 → siglab_py-0.5.3}/siglab_py/market_data_providers/test_provider.py +0 -0
  23. {siglab_py-0.5.1 → siglab_py-0.5.3}/siglab_py/ordergateway/__init__.py +0 -0
  24. {siglab_py-0.5.1 → siglab_py-0.5.3}/siglab_py/ordergateway/client.py +0 -0
  25. {siglab_py-0.5.1 → siglab_py-0.5.3}/siglab_py/ordergateway/encrypt_keys_util.py +0 -0
  26. {siglab_py-0.5.1 → siglab_py-0.5.3}/siglab_py/tests/__init__.py +0 -0
  27. {siglab_py-0.5.1 → siglab_py-0.5.3}/siglab_py/tests/integration/__init__.py +0 -0
  28. {siglab_py-0.5.1 → siglab_py-0.5.3}/siglab_py/tests/integration/market_data_util_tests.py +0 -0
  29. {siglab_py-0.5.1 → siglab_py-0.5.3}/siglab_py/tests/unit/__init__.py +0 -0
  30. {siglab_py-0.5.1 → siglab_py-0.5.3}/siglab_py/tests/unit/analytic_util_tests.py +0 -0
  31. {siglab_py-0.5.1 → siglab_py-0.5.3}/siglab_py/tests/unit/market_data_util_tests.py +0 -0
  32. {siglab_py-0.5.1 → siglab_py-0.5.3}/siglab_py/util/__init__.py +0 -0
  33. {siglab_py-0.5.1 → siglab_py-0.5.3}/siglab_py/util/analytic_util.py +0 -0
  34. {siglab_py-0.5.1 → siglab_py-0.5.3}/siglab_py/util/aws_util.py +0 -0
  35. {siglab_py-0.5.1 → siglab_py-0.5.3}/siglab_py/util/market_data_util.py +0 -0
  36. {siglab_py-0.5.1 → siglab_py-0.5.3}/siglab_py/util/notification_util.py +0 -0
  37. {siglab_py-0.5.1 → siglab_py-0.5.3}/siglab_py/util/retry_util.py +0 -0
  38. {siglab_py-0.5.1 → siglab_py-0.5.3}/siglab_py/util/slack_notification_util.py +0 -0
  39. {siglab_py-0.5.1 → siglab_py-0.5.3}/siglab_py.egg-info/SOURCES.txt +0 -0
  40. {siglab_py-0.5.1 → siglab_py-0.5.3}/siglab_py.egg-info/dependency_links.txt +0 -0
  41. {siglab_py-0.5.1 → siglab_py-0.5.3}/siglab_py.egg-info/requires.txt +0 -0
  42. {siglab_py-0.5.1 → siglab_py-0.5.3}/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.5.1
3
+ Version: 0.5.3
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.5.1"
7
+ version = "0.5.3"
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.5.1
3
+ version = 0.5.3
4
4
  description = Market data fetches, TA calculations and generic order gateway.
5
5
  author = r0bbarh00d
6
6
  author_email = r0bbarh00d@gmail.com
@@ -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/USDC:USDC',
81
+ ticker = 'SUSHI/USDT:USDT',
82
82
  side = 'buy',
83
- amount = 20,
84
- leg_room_bps = -5,
83
+ amount = 10,
84
+ leg_room_bps = 5,
85
85
  reduce_only=False,
86
86
  order_type = 'limit',
87
- slices=1,
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=positions_2,
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):
@@ -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>tp_min_percent
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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: siglab-py
3
- Version: 0.5.1
3
+ Version: 0.5.3
4
4
  Summary: Market data fetches, TA calculations and generic order gateway.
5
5
  Author: r0bbarh00d
6
6
  Author-email: r0bbarh00d <r0bbarh00d@gmail.com>