roboquant 2.1.2__tar.gz → 2.1.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.
Files changed (139) hide show
  1. {roboquant-2.1.2 → roboquant-2.1.3}/PKG-INFO +16 -16
  2. {roboquant-2.1.2 → roboquant-2.1.3}/README.md +9 -10
  3. {roboquant-2.1.2 → roboquant-2.1.3}/pyproject.toml +3 -2
  4. {roboquant-2.1.2 → roboquant-2.1.3}/roboquant/__init__.py +1 -1
  5. {roboquant-2.1.2 → roboquant-2.1.3}/uv.lock +70 -15
  6. {roboquant-2.1.2 → roboquant-2.1.3}/.github/workflows/verify.yml +0 -0
  7. {roboquant-2.1.2 → roboquant-2.1.3}/.gitignore +0 -0
  8. {roboquant-2.1.2 → roboquant-2.1.3}/.vscode/settings.json +0 -0
  9. {roboquant-2.1.2 → roboquant-2.1.3}/.zed/settings.json +0 -0
  10. {roboquant-2.1.2 → roboquant-2.1.3}/.zed/tasks.json +0 -0
  11. {roboquant-2.1.2 → roboquant-2.1.3}/LICENSE +0 -0
  12. {roboquant-2.1.2 → roboquant-2.1.3}/bin/local_install.sh +0 -0
  13. {roboquant-2.1.2 → roboquant-2.1.3}/bin/publish.sh +0 -0
  14. {roboquant-2.1.2 → roboquant-2.1.3}/bin/verify.sh +0 -0
  15. {roboquant-2.1.2 → roboquant-2.1.3}/docs/DESIGN.md +0 -0
  16. {roboquant-2.1.2 → roboquant-2.1.3}/docs/roboquant_header.png +0 -0
  17. {roboquant-2.1.2 → roboquant-2.1.3}/roboquant/account.py +0 -0
  18. {roboquant-2.1.2 → roboquant-2.1.3}/roboquant/alpaca/__init__.py +0 -0
  19. {roboquant-2.1.2 → roboquant-2.1.3}/roboquant/alpaca/broker.py +0 -0
  20. {roboquant-2.1.2 → roboquant-2.1.3}/roboquant/alpaca/feed.py +0 -0
  21. {roboquant-2.1.2 → roboquant-2.1.3}/roboquant/asset.py +0 -0
  22. {roboquant-2.1.2 → roboquant-2.1.3}/roboquant/brokers/__init__.py +0 -0
  23. {roboquant-2.1.2 → roboquant-2.1.3}/roboquant/brokers/broker.py +0 -0
  24. {roboquant-2.1.2 → roboquant-2.1.3}/roboquant/brokers/cryptobroker.py +0 -0
  25. {roboquant-2.1.2 → roboquant-2.1.3}/roboquant/brokers/simbroker.py +0 -0
  26. {roboquant-2.1.2 → roboquant-2.1.3}/roboquant/event.py +0 -0
  27. {roboquant-2.1.2 → roboquant-2.1.3}/roboquant/feeds/__init__.py +0 -0
  28. {roboquant-2.1.2 → roboquant-2.1.3}/roboquant/feeds/cryptofeed.py +0 -0
  29. {roboquant-2.1.2 → roboquant-2.1.3}/roboquant/feeds/csvfeed.py +0 -0
  30. {roboquant-2.1.2 → roboquant-2.1.3}/roboquant/feeds/feed.py +0 -0
  31. {roboquant-2.1.2 → roboquant-2.1.3}/roboquant/feeds/historic.py +0 -0
  32. {roboquant-2.1.2 → roboquant-2.1.3}/roboquant/feeds/live.py +0 -0
  33. {roboquant-2.1.2 → roboquant-2.1.3}/roboquant/feeds/parquet.py +0 -0
  34. {roboquant-2.1.2 → roboquant-2.1.3}/roboquant/feeds/randomwalk.py +0 -0
  35. {roboquant-2.1.2 → roboquant-2.1.3}/roboquant/feeds/resources/us10.parquet +0 -0
  36. {roboquant-2.1.2 → roboquant-2.1.3}/roboquant/feeds/sql.py +0 -0
  37. {roboquant-2.1.2 → roboquant-2.1.3}/roboquant/feeds/util.py +0 -0
  38. {roboquant-2.1.2 → roboquant-2.1.3}/roboquant/feeds/yahoo.py +0 -0
  39. {roboquant-2.1.2 → roboquant-2.1.3}/roboquant/ibkr/__init__.py +0 -0
  40. {roboquant-2.1.2 → roboquant-2.1.3}/roboquant/ibkr/broker.py +0 -0
  41. {roboquant-2.1.2 → roboquant-2.1.3}/roboquant/ibkr/types.py +0 -0
  42. {roboquant-2.1.2 → roboquant-2.1.3}/roboquant/journals/__init__.py +0 -0
  43. {roboquant-2.1.2 → roboquant-2.1.3}/roboquant/journals/alphabeta.py +0 -0
  44. {roboquant-2.1.2 → roboquant-2.1.3}/roboquant/journals/basicjournal.py +0 -0
  45. {roboquant-2.1.2 → roboquant-2.1.3}/roboquant/journals/feedmetric.py +0 -0
  46. {roboquant-2.1.2 → roboquant-2.1.3}/roboquant/journals/journal.py +0 -0
  47. {roboquant-2.1.2 → roboquant-2.1.3}/roboquant/journals/marketmetric.py +0 -0
  48. {roboquant-2.1.2 → roboquant-2.1.3}/roboquant/journals/metric.py +0 -0
  49. {roboquant-2.1.2 → roboquant-2.1.3}/roboquant/journals/metricsjournal.py +0 -0
  50. {roboquant-2.1.2 → roboquant-2.1.3}/roboquant/journals/pnlmetric.py +0 -0
  51. {roboquant-2.1.2 → roboquant-2.1.3}/roboquant/journals/pricemetric.py +0 -0
  52. {roboquant-2.1.2 → roboquant-2.1.3}/roboquant/journals/runmetric.py +0 -0
  53. {roboquant-2.1.2 → roboquant-2.1.3}/roboquant/journals/scorecard.py +0 -0
  54. {roboquant-2.1.2 → roboquant-2.1.3}/roboquant/journals/tensorboard.py +0 -0
  55. {roboquant-2.1.2 → roboquant-2.1.3}/roboquant/ml/__init__.py +0 -0
  56. {roboquant-2.1.2 → roboquant-2.1.3}/roboquant/ml/features.py +0 -0
  57. {roboquant-2.1.2 → roboquant-2.1.3}/roboquant/ml/rl.py +0 -0
  58. {roboquant-2.1.2 → roboquant-2.1.3}/roboquant/ml/strategies.py +0 -0
  59. {roboquant-2.1.2 → roboquant-2.1.3}/roboquant/monetary.py +0 -0
  60. {roboquant-2.1.2 → roboquant-2.1.3}/roboquant/order.py +0 -0
  61. {roboquant-2.1.2 → roboquant-2.1.3}/roboquant/run.py +0 -0
  62. {roboquant-2.1.2 → roboquant-2.1.3}/roboquant/signal.py +0 -0
  63. {roboquant-2.1.2 → roboquant-2.1.3}/roboquant/strategies/__init__.py +0 -0
  64. {roboquant-2.1.2 → roboquant-2.1.3}/roboquant/strategies/buffer.py +0 -0
  65. {roboquant-2.1.2 → roboquant-2.1.3}/roboquant/strategies/cachedstrategy.py +0 -0
  66. {roboquant-2.1.2 → roboquant-2.1.3}/roboquant/strategies/emacrossover.py +0 -0
  67. {roboquant-2.1.2 → roboquant-2.1.3}/roboquant/strategies/ibsstrategy.py +0 -0
  68. {roboquant-2.1.2 → roboquant-2.1.3}/roboquant/strategies/multistrategy.py +0 -0
  69. {roboquant-2.1.2 → roboquant-2.1.3}/roboquant/strategies/strategy.py +0 -0
  70. {roboquant-2.1.2 → roboquant-2.1.3}/roboquant/strategies/tastrategy.py +0 -0
  71. {roboquant-2.1.2 → roboquant-2.1.3}/roboquant/ta/__init__.py +0 -0
  72. {roboquant-2.1.2 → roboquant-2.1.3}/roboquant/timeframe.py +0 -0
  73. {roboquant-2.1.2 → roboquant-2.1.3}/roboquant/traders/__init__.py +0 -0
  74. {roboquant-2.1.2 → roboquant-2.1.3}/roboquant/traders/flextrader.py +0 -0
  75. {roboquant-2.1.2 → roboquant-2.1.3}/roboquant/traders/trader.py +0 -0
  76. {roboquant-2.1.2 → roboquant-2.1.3}/tests/__init__.py +0 -0
  77. {roboquant-2.1.2 → roboquant-2.1.3}/tests/common.py +0 -0
  78. {roboquant-2.1.2 → roboquant-2.1.3}/tests/data/stooq/5_min/ibm.us.txt +0 -0
  79. {roboquant-2.1.2 → roboquant-2.1.3}/tests/data/stooq/daily/ibm.us.txt +0 -0
  80. {roboquant-2.1.2 → roboquant-2.1.3}/tests/data/yahoo/AAPL.csv +0 -0
  81. {roboquant-2.1.2 → roboquant-2.1.3}/tests/data/yahoo/AMZN.csv +0 -0
  82. {roboquant-2.1.2 → roboquant-2.1.3}/tests/data/yahoo/META.csv +0 -0
  83. {roboquant-2.1.2 → roboquant-2.1.3}/tests/data/yahoo/TSLA.csv +0 -0
  84. {roboquant-2.1.2 → roboquant-2.1.3}/tests/integration/__init__.py +0 -0
  85. {roboquant-2.1.2 → roboquant-2.1.3}/tests/integration/test_alpaca.py +0 -0
  86. {roboquant-2.1.2 → roboquant-2.1.3}/tests/integration/test_ccxt.py +0 -0
  87. {roboquant-2.1.2 → roboquant-2.1.3}/tests/integration/test_ibkr.py +0 -0
  88. {roboquant-2.1.2 → roboquant-2.1.3}/tests/integration/test_yahoo.py +0 -0
  89. {roboquant-2.1.2 → roboquant-2.1.3}/tests/performance/__init__.py +0 -0
  90. {roboquant-2.1.2 → roboquant-2.1.3}/tests/performance/test_bigfeed.py +0 -0
  91. {roboquant-2.1.2 → roboquant-2.1.3}/tests/performance/test_delay.py +0 -0
  92. {roboquant-2.1.2 → roboquant-2.1.3}/tests/performance/test_profiling.py +0 -0
  93. {roboquant-2.1.2 → roboquant-2.1.3}/tests/samples/__init__.py +0 -0
  94. {roboquant-2.1.2 → roboquant-2.1.3}/tests/samples/alpaca_forwardtest_bars.py +0 -0
  95. {roboquant-2.1.2 → roboquant-2.1.3}/tests/samples/alpaca_forwardtest_trades.py +0 -0
  96. {roboquant-2.1.2 → roboquant-2.1.3}/tests/samples/alpaca_live_feed.py +0 -0
  97. {roboquant-2.1.2 → roboquant-2.1.3}/tests/samples/alpaca_papertrade.py +0 -0
  98. {roboquant-2.1.2 → roboquant-2.1.3}/tests/samples/alpaca_record.py +0 -0
  99. {roboquant-2.1.2 → roboquant-2.1.3}/tests/samples/charts.py +0 -0
  100. {roboquant-2.1.2 → roboquant-2.1.3}/tests/samples/chronos_prediction.py +0 -0
  101. {roboquant-2.1.2 → roboquant-2.1.3}/tests/samples/crypto_backtest.py +0 -0
  102. {roboquant-2.1.2 → roboquant-2.1.3}/tests/samples/extra_logging.py +0 -0
  103. {roboquant-2.1.2 → roboquant-2.1.3}/tests/samples/ibkr_close_positions.py +0 -0
  104. {roboquant-2.1.2 → roboquant-2.1.3}/tests/samples/monetary.py +0 -0
  105. {roboquant-2.1.2 → roboquant-2.1.3}/tests/samples/pandas_dataframe.py +0 -0
  106. {roboquant-2.1.2 → roboquant-2.1.3}/tests/samples/parquet_csv.py +0 -0
  107. {roboquant-2.1.2 → roboquant-2.1.3}/tests/samples/parquet_csv_large.py +0 -0
  108. {roboquant-2.1.2 → roboquant-2.1.3}/tests/samples/parquet_yahoo.py +0 -0
  109. {roboquant-2.1.2 → roboquant-2.1.3}/tests/samples/sb3_strategy.py +0 -0
  110. {roboquant-2.1.2 → roboquant-2.1.3}/tests/samples/sb3_strategy_quotes.py +0 -0
  111. {roboquant-2.1.2 → roboquant-2.1.3}/tests/samples/talib_feature.py +0 -0
  112. {roboquant-2.1.2 → roboquant-2.1.3}/tests/samples/talib_strategy.py +0 -0
  113. {roboquant-2.1.2 → roboquant-2.1.3}/tests/samples/tensorboard_metrics.py +0 -0
  114. {roboquant-2.1.2 → roboquant-2.1.3}/tests/samples/torch_lstm.py +0 -0
  115. {roboquant-2.1.2 → roboquant-2.1.3}/tests/samples/torch_transformer.py +0 -0
  116. {roboquant-2.1.2 → roboquant-2.1.3}/tests/samples/yahoo_backtest.py +0 -0
  117. {roboquant-2.1.2 → roboquant-2.1.3}/tests/samples/yahoo_walkforward.py +0 -0
  118. {roboquant-2.1.2 → roboquant-2.1.3}/tests/samples/yahoo_walkforward_multiprocess.py +0 -0
  119. {roboquant-2.1.2 → roboquant-2.1.3}/tests/unit/__init__.py +0 -0
  120. {roboquant-2.1.2 → roboquant-2.1.3}/tests/unit/test_account.py +0 -0
  121. {roboquant-2.1.2 → roboquant-2.1.3}/tests/unit/test_asset.py +0 -0
  122. {roboquant-2.1.2 → roboquant-2.1.3}/tests/unit/test_buffer.py +0 -0
  123. {roboquant-2.1.2 → roboquant-2.1.3}/tests/unit/test_csvfeed.py +0 -0
  124. {roboquant-2.1.2 → roboquant-2.1.3}/tests/unit/test_features.py +0 -0
  125. {roboquant-2.1.2 → roboquant-2.1.3}/tests/unit/test_feedutil.py +0 -0
  126. {roboquant-2.1.2 → roboquant-2.1.3}/tests/unit/test_journal.py +0 -0
  127. {roboquant-2.1.2 → roboquant-2.1.3}/tests/unit/test_monetary.py +0 -0
  128. {roboquant-2.1.2 → roboquant-2.1.3}/tests/unit/test_order.py +0 -0
  129. {roboquant-2.1.2 → roboquant-2.1.3}/tests/unit/test_parquetfeed.py +0 -0
  130. {roboquant-2.1.2 → roboquant-2.1.3}/tests/unit/test_randomwalk.py +0 -0
  131. {roboquant-2.1.2 → roboquant-2.1.3}/tests/unit/test_rnn.py +0 -0
  132. {roboquant-2.1.2 → roboquant-2.1.3}/tests/unit/test_run.py +0 -0
  133. {roboquant-2.1.2 → roboquant-2.1.3}/tests/unit/test_signal.py +0 -0
  134. {roboquant-2.1.2 → roboquant-2.1.3}/tests/unit/test_simbroker.py +0 -0
  135. {roboquant-2.1.2 → roboquant-2.1.3}/tests/unit/test_sqlfeed.py +0 -0
  136. {roboquant-2.1.2 → roboquant-2.1.3}/tests/unit/test_strategy.py +0 -0
  137. {roboquant-2.1.2 → roboquant-2.1.3}/tests/unit/test_tastrategy.py +0 -0
  138. {roboquant-2.1.2 → roboquant-2.1.3}/tests/unit/test_tensorboard.py +0 -0
  139. {roboquant-2.1.2 → roboquant-2.1.3}/tests/unit/test_timeframe.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: roboquant
3
- Version: 2.1.2
3
+ Version: 2.1.3
4
4
  Summary: A fast algorithmic trading platform with support for AI based strategies
5
5
  Project-URL: Homepage, https://roboquant.org
6
6
  Project-URL: Repository, https://github.com/neurallayer/roboquant.py.git
@@ -25,18 +25,19 @@ Requires-Python: <3.15,>=3.12
25
25
  Requires-Dist: numpy>2.0.0
26
26
  Requires-Dist: pyarrow>24.0.0
27
27
  Requires-Dist: requests>2.30.0
28
+ Requires-Dist: ta-lib==0.6.5
28
29
  Requires-Dist: yfinance>1.5.0
30
+ Provides-Extra: ai
31
+ Requires-Dist: sb3-contrib>=2.9.0; extra == 'ai'
32
+ Requires-Dist: stable-baselines3>=2.9.0; extra == 'ai'
33
+ Requires-Dist: tensorboard>=2.21.0; extra == 'ai'
34
+ Requires-Dist: torch>=2.9.0; extra == 'ai'
29
35
  Provides-Extra: alpaca
30
36
  Requires-Dist: alpaca-py>=0.43.5; extra == 'alpaca'
31
37
  Provides-Extra: crypto
32
38
  Requires-Dist: ccxt>=4.5.65; extra == 'crypto'
33
39
  Provides-Extra: ibkr
34
40
  Requires-Dist: ibind[oauth]>=0.1.22; extra == 'ibkr'
35
- Provides-Extra: torch
36
- Requires-Dist: sb3-contrib>=2.9.0; extra == 'torch'
37
- Requires-Dist: stable-baselines3>=2.9.0; extra == 'torch'
38
- Requires-Dist: tensorboard>=2.21.0; extra == 'torch'
39
- Requires-Dist: torch>=2.9.0; extra == 'torch'
40
41
  Description-Content-Type: text/markdown
41
42
 
42
43
 
@@ -67,28 +68,27 @@ print(account)
67
68
 
68
69
  ## Install
69
70
  Roboquant can be installed like most other Python packages, using tools like `uv`, `pip` or `conda`.
70
- Make sure you have Python version 3.11 or higher installed.
71
+ Make sure you have Python version 3.12 or higher installed.
71
72
 
72
73
  ```shell
73
74
  python3 -m pip install --upgrade roboquant
74
75
  ```
75
76
 
76
- The core of roboquant limits the number of dependencies.
77
- But you can install roboquant including one or more of the optional dependencies if you require certain functionality:
77
+ The core of roboquant limits the number of dependencies. But you can install roboquant including one or more of the optional dependencies if you require certain additional functionality:
78
78
 
79
79
  ```shell
80
- # PyTorch based strategies using RNNStrategy
81
- python3 -m pip install --upgrade "roboquant[torch]"
80
+ # AI based strategies using Torch and SB3
81
+ python3 -m pip install --upgrade "roboquant[ai]"
82
82
 
83
- # Integration with Interactive Brokers using IBKRBroker
83
+ # Integration with Interactive Brokers
84
84
  python3 -m pip install --upgrade "roboquant[ibkr]"
85
85
 
86
- # Integration with Alpaca
86
+ # Integration with Alpaca broker
87
87
  python3 -m pip install --upgrade "roboquant[alpaca]"
88
- ```
89
-
90
- Additionally, if you want to use the any of TA-Lib techncial indicators, you'll need to install it first. You can read a more about that on [ta-lib-python GitHub](https://github.com/ta-lib/ta-lib-python)
91
88
 
89
+ # Integration many crypto exchanges via CCXT package
90
+ python3 -m pip install --upgrade "roboquant[crypto]"
91
+ ```
92
92
 
93
93
  ## Building from source
94
94
  Roboquant.py uses `uv` as the main tool for handling package dependencies.
@@ -26,28 +26,27 @@ print(account)
26
26
 
27
27
  ## Install
28
28
  Roboquant can be installed like most other Python packages, using tools like `uv`, `pip` or `conda`.
29
- Make sure you have Python version 3.11 or higher installed.
29
+ Make sure you have Python version 3.12 or higher installed.
30
30
 
31
31
  ```shell
32
32
  python3 -m pip install --upgrade roboquant
33
33
  ```
34
34
 
35
- The core of roboquant limits the number of dependencies.
36
- But you can install roboquant including one or more of the optional dependencies if you require certain functionality:
35
+ The core of roboquant limits the number of dependencies. But you can install roboquant including one or more of the optional dependencies if you require certain additional functionality:
37
36
 
38
37
  ```shell
39
- # PyTorch based strategies using RNNStrategy
40
- python3 -m pip install --upgrade "roboquant[torch]"
38
+ # AI based strategies using Torch and SB3
39
+ python3 -m pip install --upgrade "roboquant[ai]"
41
40
 
42
- # Integration with Interactive Brokers using IBKRBroker
41
+ # Integration with Interactive Brokers
43
42
  python3 -m pip install --upgrade "roboquant[ibkr]"
44
43
 
45
- # Integration with Alpaca
44
+ # Integration with Alpaca broker
46
45
  python3 -m pip install --upgrade "roboquant[alpaca]"
47
- ```
48
-
49
- Additionally, if you want to use the any of TA-Lib techncial indicators, you'll need to install it first. You can read a more about that on [ta-lib-python GitHub](https://github.com/ta-lib/ta-lib-python)
50
46
 
47
+ # Integration many crypto exchanges via CCXT package
48
+ python3 -m pip install --upgrade "roboquant[crypto]"
49
+ ```
51
50
 
52
51
  ## Building from source
53
52
  Roboquant.py uses `uv` as the main tool for handling package dependencies.
@@ -56,10 +56,11 @@ dependencies = [
56
56
  "requests>2.30.0",
57
57
  "yfinance>1.5.0",
58
58
  "pyarrow>24.0.0",
59
+ "ta-lib==0.6.5"
59
60
  ]
60
61
 
61
62
  [project.optional-dependencies]
62
- torch = [
63
+ ai = [
63
64
  "torch>=2.9.0",
64
65
  "tensorboard>=2.21.0",
65
66
  "stable-baselines3>=2.9.0",
@@ -83,4 +84,4 @@ dev = [
83
84
  "ipywidgets>=8.1.6",
84
85
  "chronos-forecasting>=2.3.1",
85
86
  ]
86
- talib = ["ta-lib==0.6.4"]
87
+ talib = ["ta-lib==0.6.5"]
@@ -3,7 +3,7 @@ The `roboquant` package contains the `run` method and a number of shared classes
3
3
  like `Account`, `Asset` and `Event`.
4
4
  """
5
5
 
6
- __version__ = "2.1.2"
6
+ __version__ = "2.1.3"
7
7
 
8
8
  import logging
9
9
 
@@ -249,6 +249,20 @@ wheels = [
249
249
  { url = "https://files.pythonhosted.org/packages/b1/fe/e8c672695b37eecc5cbf43e1d0638d88d66ba3a44c4d321c796f4e59167f/beautifulsoup4-4.12.3-py3-none-any.whl", hash = "sha256:b80878c9f40111313e55da8ba20bdba06d8fa3969fc68304167741bbf9e082ed", size = 147925 },
250
250
  ]
251
251
 
252
+ [[package]]
253
+ name = "build"
254
+ version = "1.5.1"
255
+ source = { registry = "https://pypi.org/simple" }
256
+ dependencies = [
257
+ { name = "colorama", marker = "(os_name == 'nt' and platform_machine != 'aarch64' and sys_platform == 'linux') or (os_name == 'nt' and sys_platform != 'darwin' and sys_platform != 'linux')" },
258
+ { name = "packaging" },
259
+ { name = "pyproject-hooks" },
260
+ ]
261
+ sdist = { url = "https://files.pythonhosted.org/packages/2d/21/6ec54248b4d0d51f12f3ca4aa77a128077d747a5db86cb5a2fcd9aedecbd/build-1.5.1.tar.gz", hash = "sha256:94e17f1db803ab22f46049376c44c8437c52090f0dfdf1adc43df56542d644fb", size = 112439 }
262
+ wheels = [
263
+ { url = "https://files.pythonhosted.org/packages/c7/f7/2c3f99ff9282f1c1ec9f6298f2c03034658a0901eeacb3b3501cb488574c/build-1.5.1-py3-none-any.whl", hash = "sha256:f1a58fe2e5af5b0238a07b9e70207492c79ddebbdb1ad954fc86d62a56be3e0d", size = 31195 },
264
+ ]
265
+
252
266
  [[package]]
253
267
  name = "ccxt"
254
268
  version = "4.5.65"
@@ -1868,6 +1882,15 @@ wheels = [
1868
1882
  { url = "https://files.pythonhosted.org/packages/cf/6c/41c21c6c8af92b9fea313aa47c75de49e2f9a467964ee33eb0135d47eb64/pillow-11.1.0-cp313-cp313t-win_arm64.whl", hash = "sha256:67cd427c68926108778a9005f2a04adbd5e67c442ed21d95389fe1d595458756", size = 2377651 },
1869
1883
  ]
1870
1884
 
1885
+ [[package]]
1886
+ name = "pip"
1887
+ version = "26.1.2"
1888
+ source = { registry = "https://pypi.org/simple" }
1889
+ sdist = { url = "https://files.pythonhosted.org/packages/01/91/47e7d486260f618783899587af63ccf7980fb60245c3e63dd4571c6b57ad/pip-26.1.2.tar.gz", hash = "sha256:f49cd134c61cf2fd75e0ce2676db03e4054504a5a4986d00f8299ae632dc4605", size = 1840799 }
1890
+ wheels = [
1891
+ { url = "https://files.pythonhosted.org/packages/5d/95/6b5cb3461ea5673ba0995989746db58eb18b91b54dbf331e72f569540946/pip-26.1.2-py3-none-any.whl", hash = "sha256:382ff9f685ee3bc25864f820aa50505825f10f5458ffff07e30a6d96e5715cab", size = 1813144 },
1892
+ ]
1893
+
1871
1894
  [[package]]
1872
1895
  name = "platformdirs"
1873
1896
  version = "4.3.6"
@@ -2224,6 +2247,15 @@ wheels = [
2224
2247
  { url = "https://files.pythonhosted.org/packages/1c/a7/c8a2d361bf89c0d9577c934ebb7421b25dc84bf3a8e3ac0a40aed9acc547/pyparsing-3.2.1-py3-none-any.whl", hash = "sha256:506ff4f4386c4cec0590ec19e6302d3aedb992fdc02c761e90416f158dacf8e1", size = 107716 },
2225
2248
  ]
2226
2249
 
2250
+ [[package]]
2251
+ name = "pyproject-hooks"
2252
+ version = "1.2.0"
2253
+ source = { registry = "https://pypi.org/simple" }
2254
+ sdist = { url = "https://files.pythonhosted.org/packages/e7/82/28175b2414effca1cdac8dc99f76d660e7a4fb0ceefa4b4ab8f5f6742925/pyproject_hooks-1.2.0.tar.gz", hash = "sha256:1e859bd5c40fae9448642dd871adf459e5e2084186e8d2c2a79a824c970da1f8", size = 19228 }
2255
+ wheels = [
2256
+ { url = "https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl", hash = "sha256:9e5c6bfa8dcc30091c74b0cf803c81fdd29d94f01992a7707bc97babb1141913", size = 10216 },
2257
+ ]
2258
+
2227
2259
  [[package]]
2228
2260
  name = "pyright"
2229
2261
  version = "1.1.411"
@@ -2423,10 +2455,17 @@ dependencies = [
2423
2455
  { name = "numpy" },
2424
2456
  { name = "pyarrow" },
2425
2457
  { name = "requests" },
2458
+ { name = "ta-lib" },
2426
2459
  { name = "yfinance" },
2427
2460
  ]
2428
2461
 
2429
2462
  [package.optional-dependencies]
2463
+ ai = [
2464
+ { name = "sb3-contrib" },
2465
+ { name = "stable-baselines3" },
2466
+ { name = "tensorboard" },
2467
+ { name = "torch" },
2468
+ ]
2430
2469
  alpaca = [
2431
2470
  { name = "alpaca-py" },
2432
2471
  ]
@@ -2436,12 +2475,6 @@ crypto = [
2436
2475
  ibkr = [
2437
2476
  { name = "ibind", extra = ["oauth"] },
2438
2477
  ]
2439
- torch = [
2440
- { name = "sb3-contrib" },
2441
- { name = "stable-baselines3" },
2442
- { name = "tensorboard" },
2443
- { name = "torch" },
2444
- ]
2445
2478
 
2446
2479
  [package.dev-dependencies]
2447
2480
  dev = [
@@ -2464,13 +2497,14 @@ requires-dist = [
2464
2497
  { name = "numpy", specifier = ">2.0.0" },
2465
2498
  { name = "pyarrow", specifier = ">24.0.0" },
2466
2499
  { name = "requests", specifier = ">2.30.0" },
2467
- { name = "sb3-contrib", marker = "extra == 'torch'", specifier = ">=2.9.0" },
2468
- { name = "stable-baselines3", marker = "extra == 'torch'", specifier = ">=2.9.0" },
2469
- { name = "tensorboard", marker = "extra == 'torch'", specifier = ">=2.21.0" },
2470
- { name = "torch", marker = "extra == 'torch'", specifier = ">=2.9.0" },
2500
+ { name = "sb3-contrib", marker = "extra == 'ai'", specifier = ">=2.9.0" },
2501
+ { name = "stable-baselines3", marker = "extra == 'ai'", specifier = ">=2.9.0" },
2502
+ { name = "ta-lib", specifier = "==0.6.5" },
2503
+ { name = "tensorboard", marker = "extra == 'ai'", specifier = ">=2.21.0" },
2504
+ { name = "torch", marker = "extra == 'ai'", specifier = ">=2.9.0" },
2471
2505
  { name = "yfinance", specifier = ">1.5.0" },
2472
2506
  ]
2473
- provides-extras = ["alpaca", "crypto", "ibkr", "torch"]
2507
+ provides-extras = ["ai", "alpaca", "crypto", "ibkr"]
2474
2508
 
2475
2509
  [package.metadata.requires-dev]
2476
2510
  dev = [
@@ -2481,7 +2515,7 @@ dev = [
2481
2515
  { name = "pyright", specifier = ">=1.1.411" },
2482
2516
  { name = "python-dotenv", specifier = ">=1.1.0" },
2483
2517
  ]
2484
- talib = [{ name = "ta-lib", specifier = "==0.6.4" }]
2518
+ talib = [{ name = "ta-lib", specifier = "==0.6.5" }]
2485
2519
 
2486
2520
  [[package]]
2487
2521
  name = "safetensors"
@@ -2596,13 +2630,34 @@ wheels = [
2596
2630
 
2597
2631
  [[package]]
2598
2632
  name = "ta-lib"
2599
- version = "0.6.4"
2633
+ version = "0.6.5"
2600
2634
  source = { registry = "https://pypi.org/simple" }
2601
2635
  dependencies = [
2636
+ { name = "build" },
2602
2637
  { name = "numpy" },
2603
- { name = "setuptools" },
2638
+ { name = "pip" },
2639
+ ]
2640
+ sdist = { url = "https://files.pythonhosted.org/packages/b6/38/6ab9976d72eb8c7142a153f922b2addb6eb5f136b825298049743a60cd5a/ta_lib-0.6.5.tar.gz", hash = "sha256:bc3100799b51318c1054f5f5b76f4b0a2f1a6d12625200880e81ea8a8773ff75", size = 379185 }
2641
+ wheels = [
2642
+ { url = "https://files.pythonhosted.org/packages/05/8e/e69a0eb3286b05979feed3a4dbd2cf55d2a173cda5674f1982ea883a1c5f/ta_lib-0.6.5-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:fe6f65cc2f013765d287d9059c50c52edf0f117305082981e6ac80de11a19aa2", size = 1066189 },
2643
+ { url = "https://files.pythonhosted.org/packages/01/59/735f6e0b34ad97b9d0fa8ff5a35e6cee4e3776bf68818ee7d7ab90d1c541/ta_lib-0.6.5-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:cf65438c7c4869bfcef6be1a95e1ff212a432201dd4faa0b35a47f2156db8454", size = 979676 },
2644
+ { url = "https://files.pythonhosted.org/packages/b2/6e/9e844e26dfe5569ec81dce948b13377ce1871073b9fcb811294d6b5177c1/ta_lib-0.6.5-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:0d04ec78a33c3d35a32f3aed8d320be404eda2a95ec3d17d3aa8dbf96e311a9f", size = 3936782 },
2645
+ { url = "https://files.pythonhosted.org/packages/06/c3/325be4e35ac718f2149ff1670f903950bd4fffc273557a6d59c7376a95f3/ta_lib-0.6.5-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:585a84b9fb0415dc88abbc09afb4b285d27137f7dab4b6a5c1e255afc1ea5ed0", size = 4058477 },
2646
+ { url = "https://files.pythonhosted.org/packages/8e/8f/feee96b0ecdd4debfe4f0182ed0f3575248297de3f3b34c9335fa46e1714/ta_lib-0.6.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9588a6f05291a14de8f2167018a1150a05fd26f4a298484b0e8476421c156bd0", size = 3556370 },
2647
+ { url = "https://files.pythonhosted.org/packages/2f/b5/9682bc2e79eded4a4c293b66a459e223e70d298fb088aa6378464f21f99e/ta_lib-0.6.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:393583526a37d55c2557688bd9f6cf66c95eee87f24ca58cc1136ef42266e2f8", size = 3681265 },
2648
+ { url = "https://files.pythonhosted.org/packages/75/fe/8d9a555a286cba0c9d0cbb49ce20af2cf64a1eb34b8e5d549bd2d253b1f6/ta_lib-0.6.5-cp312-cp312-win32.whl", hash = "sha256:feb356b6be4fbbebc11eb6b636b41d783575ab8e6c8762963d6c5d5f348b1634", size = 766831 },
2649
+ { url = "https://files.pythonhosted.org/packages/ce/20/e349b435276554bd4facff10a05eb0584d5e6714aadfd1b0b7777d662525/ta_lib-0.6.5-cp312-cp312-win_amd64.whl", hash = "sha256:666c4043511dfa26748215aadba4f297589a87387f56276d35e555a6f74dc802", size = 883440 },
2650
+ { url = "https://files.pythonhosted.org/packages/eb/77/02feec8a83dd12488cb68c42494fcbbbac39f745b0501f8071ef38baacfe/ta_lib-0.6.5-cp312-cp312-win_arm64.whl", hash = "sha256:461a7cbe14f42c2637d94667f4bf55bb55ef92dd1504a2286670769947e28c52", size = 749131 },
2651
+ { url = "https://files.pythonhosted.org/packages/71/d5/1fad28aff4de0ecea599e97fdc91fdfc0f397fabde1b41a6e54cd64ea710/ta_lib-0.6.5-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:b1572653d0ea27d9961f579e929bdcedde928a4c3db44c25f1387e93440b34c2", size = 1065359 },
2652
+ { url = "https://files.pythonhosted.org/packages/7c/d0/85022658ead1458203deb196e3312046646fa7bfa404bbfc19456080f046/ta_lib-0.6.5-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:60ead0fdd7547e0e6cf6db87190bef34e3a039106a9135fea3f3ccb9056e68b1", size = 979947 },
2653
+ { url = "https://files.pythonhosted.org/packages/d4/0f/e8250c1a1ca6fca049297a48d654449e4d85e3198cd664a23711168c03f3/ta_lib-0.6.5-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:40d31e6c1ff9646870affc59d077dd340f4ccef6ae79de4e98625c06fbc702f2", size = 3943714 },
2654
+ { url = "https://files.pythonhosted.org/packages/82/63/476c38b32bf6527d05ca2dfd0922b01b66373cf6f6bbd7a539ba6a0ffd9b/ta_lib-0.6.5-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:ce4b4277448e0622b6a2d0f3b9833eddc5d9ca5eafb026d528ba6dadaea0c8a4", size = 4022662 },
2655
+ { url = "https://files.pythonhosted.org/packages/5e/87/61aa73b65a2d421b197921db0c9a14ba8cb2f4d8645847df7957e5cbe2d9/ta_lib-0.6.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:3f4aff21bafafcf49192d30a8d6c2db6fd1b569065a47577cf42f227cd8dfccb", size = 3544944 },
2656
+ { url = "https://files.pythonhosted.org/packages/1d/ca/6e0459b0356af41c11e1cc133cc526ba01ac43c83446f729d544ae969215/ta_lib-0.6.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fe1159baf26129d7dbb9013e4ff71a73c40b4e089d0db9105011da65e5f52946", size = 3638748 },
2657
+ { url = "https://files.pythonhosted.org/packages/08/fe/4df00c95b7a7c11abebaf79a85540ecdc1f659e4b88cc7238e63222e4f86/ta_lib-0.6.5-cp313-cp313-win32.whl", hash = "sha256:5a40df4f0af832dc41353af9459df90fcada959e229a0509b28f9871de4d887b", size = 766798 },
2658
+ { url = "https://files.pythonhosted.org/packages/3c/a6/851c73dc796426c501371283f63b8a723ee9ce62dedb7281e7efcf9c7f58/ta_lib-0.6.5-cp313-cp313-win_amd64.whl", hash = "sha256:393339212cdc07779d68ad7868a2f380dfbea8e42b3fc77cbfce775142688404", size = 882811 },
2659
+ { url = "https://files.pythonhosted.org/packages/c8/8c/d79a402c06280a67d24672b8ac54daa7ac926a07fe540b344393fc036e9d/ta_lib-0.6.5-cp313-cp313-win_arm64.whl", hash = "sha256:c5b55a1bc8ba8b5e7c6a810ce09f8e5e1011085740b244b6b203e47907f7a1e2", size = 749270 },
2604
2660
  ]
2605
- sdist = { url = "https://files.pythonhosted.org/packages/ba/97/a49816dd468a18ee080cf3a04640772a9f6321790d4049cece2490c4b7ad/ta_lib-0.6.4.tar.gz", hash = "sha256:08f55bc5771a6d1ceb1a2b713aad7b05f04eb0061e980c9113571c532d32e9cb", size = 381774 }
2606
2661
 
2607
2662
  [[package]]
2608
2663
  name = "tensorboard"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes