| <img src="https://raw.githubusercontent.com/suchak1/hyperdrive/master/img/nasa_5mb_cropped.gif" width="250" /> | **_hyperdrive_**: an algorithmic trading library |
| -------------------------------------------------------------------------------------------------------------- | ------------------------------------------------ |
<!-- max width 600 -->
   [](https://pepy.tech/project/hyperdrive) 
<!-- all green https://static.pepy.tech/personalized-badge/hyperdrive?period=total&units=international_system&left_color=brightgreen&right_color=brightgreen&left_text=Downloads -->
<!-- all black https://static.pepy.tech/personalized-badge/hyperdrive?period=total&units=international_system&left_color=black&right_color=black&left_text=Downloads-->
<!-- too bright https://static.pepy.tech/personalized-badge/hyperdrive?period=total&units=international_system&left_color=grey&right_color=yellow&left_text=Downloads -->
<!-- green left, gray right https://static.pepy.tech/personalized-badge/hyperdrive?period=total&units=international_system&left_color=brightgreen&right_color=gray&left_text=Downloads-->
<!-- black and indigo https://static.pepy.tech/personalized-badge/hyperdrive?period=total&units=international_system&left_color=black&right_color=indigo&left_text=Downloads -->
**_hyperdrive_** is an algorithmic trading library that powers quant research firm [<img src="https://raw.githubusercontent.com/suchak1/hyperdrive/master/img/forcepush.png" width="16" /> **FORCEPU.SH**](https://forcepu.sh).
Unlike other backtesting libraries, _`hyperdrive`_ specializes in data collection and quantitative research.
In the examples below, we explore how to:
1. store market data
2. create trading strategies
3. test strategies against historical data (backtesting)
4. execute orders.
## Getting Started
### Prerequisites
You will need Python 3.8+
### Installation
To install the necessary packages, run
```
pythom -m pip install hyperdrive -U
```
## Examples
Most secrets must be passed as environment variables. Future updates will allow secrets to be passed directly into class object (see example on order execution).
<!-- ### 1. Getting data
Pre-requisites:
- an IEXCloud or Polygon API key
- an AWS account and an S3 bucket
Environment Variables:
- `IEXCLOUD` or `POLYGON`
- `AWS_ACCESS_KEY_ID`
- `AWS_SECRET_ACCESS_KEY`
- `AWS_DEFAULT_REGION`
- `S3_BUCKET`
```
from hyperdrive import DataSource
from DataSource import IEXCloud
# Your IEXCloud API token must be an environment variable (accessible in os.environ['IEXCLOUD'])
iex = IEXCloud()
df = iex.get_ohlc(symbol='TSLA', timeframe='7d')
print(df)
```
Output:
```
Time Open High Low Close Vol
2863 2021-11-10 1010.41 1078.1000 987.31 1067.95 42802722
2864 2021-11-11 1102.77 1104.9700 1054.68 1063.51 22396568
2865 2021-11-12 1047.50 1054.5000 1019.20 1033.42 25573148
2866 2021-11-15 1017.63 1031.9800 978.60 1013.39 34775649
2867 2021-11-16 1003.31 1057.1999 1002.18 1054.73 26542359
```
Although this function won't save data to the S3 bucket, hyperdrive checks the S3 bucket with key `data/ohlc/iexcloud/TSLA.csv` to see if any cached data exists to correct for inconsistencies in values and column names. -->
### 1. Storing data
Pre-requisites:
- an IEXCloud or Polygon API key
- an AWS account and an S3 bucket
Environment Variables:
- `IEXCLOUD` or `POLYGON`
- `AWS_ACCESS_KEY_ID`
- `AWS_SECRET_ACCESS_KEY`
- `AWS_DEFAULT_REGION`
- `S3_BUCKET`
```
from hyperdrive import DataSource
from DataSource import IEXCloud, MarketData
# IEXCloud API token loaded as an environment variable (os.environ['IEXCLOUD'])
symbol = 'TSLA'
timeframe = '7d'
md = MarketData()
iex = IEXCloud()
iex.save_ohlc(symbol=symbol, timeframe=timeframe)
df = md.get_ohlc(symbol=symbol, timeframe=timeframe)
print(df)
```
Output:
```
Time Open High Low Close Vol
2863 2021-11-10 1010.41 1078.1000 987.31 1067.95 42802722
2864 2021-11-11 1102.77 1104.9700 1054.68 1063.51 22396568
2865 2021-11-12 1047.50 1054.5000 1019.20 1033.42 25573148
2866 2021-11-15 1017.63 1031.9800 978.60 1013.39 34775649
2867 2021-11-16 1003.31 1057.1999 1002.18 1054.73 26542359
```
### 2. Creating a model
Much of this code is still closed-source, but you can take a look at the [`Historian` class in the `History` module](https://github.com/suchak1/hyperdrive/blob/master/hyperdrive/History.py) for some ideas.
### 3. Backtesting a strategy
We use [_vectorbt_](https://vectorbt.dev/) to backtest strategies.
```
from hyperdrive import History, DataSource, Constants as C
from History import Historian
from DataSource import MarketData
hist = Historian()
md = MarketData()
symbol = 'TSLA'
timeframe = '1y'
df = md.get_ohlc(symbol=symbol, timeframe=timeframe)
holding = hist.buy_and_hold(df[C.CLOSE])
signals = hist.get_optimal_signals(df[C.CLOSE])
my_strat = hist.create_portfolio(df[C.CLOSE], signals)
metrics = [
'Total Return [%]', 'Benchmark Return [%]',
'Max Drawdown [%]', 'Max Drawdown Duration',
'Total Trades', 'Win Rate [%]', 'Avg Winning Trade [%]',
'Avg Losing Trade [%]', 'Profit Factor',
'Expectancy', 'Sharpe Ratio', 'Calmar Ratio',
'Omega Ratio', 'Sortino Ratio'
]
holding_stats = holding.stats()[metrics]
my_strat_stats = my_strat.stats()[metrics]
print(f'Buy and Hold Strat\n{"-"*42}')
print(holding_stats)
print(f'My Strategy\n{"-"*42}')
print(my_strat_stats)
# holding.plot()
my_strat.plot()
```
Output:
```
Buy and Hold Strat
------------------------------------------
Total Return [%] 138.837436
Benchmark Return [%] 138.837436
Max Drawdown [%] 36.246589
Max Drawdown Duration 186 days 00:00:00
Total Trades 1
Win Rate [%] NaN
Avg Winning Trade [%] NaN
Avg Losing Trade [%] NaN
Profit Factor NaN
Expectancy NaN
Sharpe Ratio 2.206485
Calmar Ratio 6.977133
Omega Ratio 1.381816
Sortino Ratio 3.623509
Name: Close, dtype: object
My Strategy
------------------------------------------
Total Return [%] 364.275727
Benchmark Return [%] 138.837436
Max Drawdown [%] 35.49422
Max Drawdown Duration 122 days 00:00:00
Total Trades 6
Win Rate [%] 80.0
Avg Winning Trade [%] 52.235227
Avg Losing Trade [%] -3.933059
Profit Factor 45.00258
Expectancy 692.157004
Sharpe Ratio 4.078172
Calmar Ratio 23.220732
Omega Ratio 2.098986
Sortino Ratio 7.727806
Name: Close, dtype: object
```
<img src="https://raw.githubusercontent.com/suchak1/hyperdrive/master/img/my_strat.png">
### 4. Executing an order
Pre-requisites:
- a Binance.US API key
Environment Variables:
- `BINANCE`
```
from pprint import pprint
from hyperdrive import Exchange
from Exchange import Binance
# Binance API token loaded as an environment variable (os.environ['BINANCE'])
bn = Binance()
# use 45% of your USD account balance to buy BTC
order = bn.order('BTC', 'USD', 'BUY', 0.45)
pprint(order)
```
Output:
```
{'clientOrderId': '3cfyrJOSXqq6Zl1RJdeRRC',
'cummulativeQuoteQty': 46.8315,
'executedQty': 0.000757,
'fills': [{'commission': '0.0500',
'commissionAsset': 'USD',
'price': '61864.6400',
'qty': '0.00075700',
'tradeId': 25803914}],
'orderId': 714855908,
'orderListId': -1,
'origQty': 0.000757,
'price': 0.0,
'side': 'SELL',
'status': 'FILLED',
'symbol': 'BTCUSD',
'timeInForce': 'GTC',
'transactTime': 1637030680121,
'type': 'MARKET'}
```
## Use
Use the scripts provided in the [`scripts/`](https://github.com/suchak1/hyperdrive/tree/master/scripts) directory as a reference since they are actually used in production daily.
Available data collection functions:
- [x] [](https://github.com/suchak1/hyperdrive/actions?query=workflow%3ASymbols) (from Robinhood)
- [x] [](https://github.com/suchak1/hyperdrive/actions?query=workflow%3AOHLC) (from IEXCloud and Polygon)
- [x] [](https://github.com/suchak1/hyperdrive/actions?query=workflow%3AIntraday) (from IEXCloud and Polygon)
- [x] [](https://github.com/suchak1/hyperdrive/actions?query=workflow%3ADividends) (from IEXCloud and Polygon)
- [x] [](https://github.com/suchak1/hyperdrive/actions?query=workflow%3ASplits) (from IEXCloud and Polygon)
- [x] [/badge.svg>)](https://github.com/suchak1/hyperdrive/actions?query=workflow%3A%22Social+Sentiment+%281%29%22) (from StockTwits)
- [x] [](https://github.com/suchak1/hyperdrive/actions?query=workflow%3AUnemployment) (from the Bureau of Labor Statistics)
---
<!-- extra -->
<!-- 3. auto update model monthly -->
<!-- abstract away undersample fx from preprocess fx, and buy and sell from order fx, make oracle class -->
<!-- 4. automate saving model and preprocessors (every 2 weeks ) -->
<!-- 5. add live results on website / model vs buying and holding like alphahub - use dash or plotly? use pca visualization, tsne for higher dimensions, roc curve, etc-->
```
```
Raw data
{
"_id": null,
"home_page": "https://github.com/suchak1/hyperdrive",
"name": "hyperdrive",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.7",
"maintainer_email": "",
"keywords": "",
"author": "Krish Suchak",
"author_email": "suchak.krish@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/80/82/5d55f050114b2444d318b9ec1a640a701335bb389f1b293287fc6d4fa868/hyperdrive-1.10.11.tar.gz",
"platform": null,
"description": "| <img src=\"https://raw.githubusercontent.com/suchak1/hyperdrive/master/img/nasa_5mb_cropped.gif\" width=\"250\" /> | **_hyperdrive_**: an algorithmic trading library |\n| -------------------------------------------------------------------------------------------------------------- | ------------------------------------------------ |\n\n<!-- max width 600 -->\n\n   [](https://pepy.tech/project/hyperdrive) \n\n<!-- all green https://static.pepy.tech/personalized-badge/hyperdrive?period=total&units=international_system&left_color=brightgreen&right_color=brightgreen&left_text=Downloads -->\n<!-- all black https://static.pepy.tech/personalized-badge/hyperdrive?period=total&units=international_system&left_color=black&right_color=black&left_text=Downloads-->\n<!-- too bright https://static.pepy.tech/personalized-badge/hyperdrive?period=total&units=international_system&left_color=grey&right_color=yellow&left_text=Downloads -->\n<!-- green left, gray right https://static.pepy.tech/personalized-badge/hyperdrive?period=total&units=international_system&left_color=brightgreen&right_color=gray&left_text=Downloads-->\n<!-- black and indigo https://static.pepy.tech/personalized-badge/hyperdrive?period=total&units=international_system&left_color=black&right_color=indigo&left_text=Downloads -->\n\n**_hyperdrive_** is an algorithmic trading library that powers quant research firm [<img src=\"https://raw.githubusercontent.com/suchak1/hyperdrive/master/img/forcepush.png\" width=\"16\" /> **FORCEPU.SH**](https://forcepu.sh).\n\nUnlike other backtesting libraries, _`hyperdrive`_ specializes in data collection and quantitative research.\n\nIn the examples below, we explore how to:\n\n1. store market data\n2. create trading strategies\n3. test strategies against historical data (backtesting)\n4. execute orders.\n\n## Getting Started\n\n### Prerequisites\n\nYou will need Python 3.8+\n\n### Installation\n\nTo install the necessary packages, run\n\n```\npythom -m pip install hyperdrive -U\n```\n\n## Examples\n\nMost secrets must be passed as environment variables. Future updates will allow secrets to be passed directly into class object (see example on order execution).\n\n<!-- ### 1. Getting data\n\nPre-requisites:\n\n- an IEXCloud or Polygon API key\n- an AWS account and an S3 bucket\n\nEnvironment Variables:\n\n- `IEXCLOUD` or `POLYGON`\n- `AWS_ACCESS_KEY_ID`\n- `AWS_SECRET_ACCESS_KEY`\n- `AWS_DEFAULT_REGION`\n- `S3_BUCKET`\n\n```\nfrom hyperdrive import DataSource\nfrom DataSource import IEXCloud\n\n# Your IEXCloud API token must be an environment variable (accessible in os.environ['IEXCLOUD'])\n\niex = IEXCloud()\ndf = iex.get_ohlc(symbol='TSLA', timeframe='7d')\nprint(df)\n```\n\nOutput:\n\n```\n Time Open High Low Close Vol\n2863 2021-11-10 1010.41 1078.1000 987.31 1067.95 42802722\n2864 2021-11-11 1102.77 1104.9700 1054.68 1063.51 22396568\n2865 2021-11-12 1047.50 1054.5000 1019.20 1033.42 25573148\n2866 2021-11-15 1017.63 1031.9800 978.60 1013.39 34775649\n2867 2021-11-16 1003.31 1057.1999 1002.18 1054.73 26542359\n```\n\nAlthough this function won't save data to the S3 bucket, hyperdrive checks the S3 bucket with key `data/ohlc/iexcloud/TSLA.csv` to see if any cached data exists to correct for inconsistencies in values and column names. -->\n\n### 1. Storing data\n\nPre-requisites:\n\n- an IEXCloud or Polygon API key\n- an AWS account and an S3 bucket\n\nEnvironment Variables:\n\n- `IEXCLOUD` or `POLYGON`\n- `AWS_ACCESS_KEY_ID`\n- `AWS_SECRET_ACCESS_KEY`\n- `AWS_DEFAULT_REGION`\n- `S3_BUCKET`\n\n```\nfrom hyperdrive import DataSource\nfrom DataSource import IEXCloud, MarketData\n\n# IEXCloud API token loaded as an environment variable (os.environ['IEXCLOUD'])\n\nsymbol = 'TSLA'\ntimeframe = '7d'\n\nmd = MarketData()\niex = IEXCloud()\n\niex.save_ohlc(symbol=symbol, timeframe=timeframe)\ndf = md.get_ohlc(symbol=symbol, timeframe=timeframe)\n\nprint(df)\n```\n\nOutput:\n\n```\n Time Open High Low Close Vol\n2863 2021-11-10 1010.41 1078.1000 987.31 1067.95 42802722\n2864 2021-11-11 1102.77 1104.9700 1054.68 1063.51 22396568\n2865 2021-11-12 1047.50 1054.5000 1019.20 1033.42 25573148\n2866 2021-11-15 1017.63 1031.9800 978.60 1013.39 34775649\n2867 2021-11-16 1003.31 1057.1999 1002.18 1054.73 26542359\n```\n\n### 2. Creating a model\n\nMuch of this code is still closed-source, but you can take a look at the [`Historian` class in the `History` module](https://github.com/suchak1/hyperdrive/blob/master/hyperdrive/History.py) for some ideas.\n\n### 3. Backtesting a strategy\n\nWe use [_vectorbt_](https://vectorbt.dev/) to backtest strategies.\n\n```\nfrom hyperdrive import History, DataSource, Constants as C\nfrom History import Historian\nfrom DataSource import MarketData\n\nhist = Historian()\nmd = MarketData()\n\nsymbol = 'TSLA'\ntimeframe = '1y'\n\ndf = md.get_ohlc(symbol=symbol, timeframe=timeframe)\n\nholding = hist.buy_and_hold(df[C.CLOSE])\nsignals = hist.get_optimal_signals(df[C.CLOSE])\nmy_strat = hist.create_portfolio(df[C.CLOSE], signals)\n\nmetrics = [\n 'Total Return [%]', 'Benchmark Return [%]',\n 'Max Drawdown [%]', 'Max Drawdown Duration',\n 'Total Trades', 'Win Rate [%]', 'Avg Winning Trade [%]',\n 'Avg Losing Trade [%]', 'Profit Factor',\n 'Expectancy', 'Sharpe Ratio', 'Calmar Ratio',\n 'Omega Ratio', 'Sortino Ratio'\n]\n\nholding_stats = holding.stats()[metrics]\nmy_strat_stats = my_strat.stats()[metrics]\n\nprint(f'Buy and Hold Strat\\n{\"-\"*42}')\nprint(holding_stats)\n\nprint(f'My Strategy\\n{\"-\"*42}')\nprint(my_strat_stats)\n\n# holding.plot()\nmy_strat.plot()\n```\n\nOutput:\n\n```\nBuy and Hold Strat\n------------------------------------------\nTotal Return [%] 138.837436\nBenchmark Return [%] 138.837436\nMax Drawdown [%] 36.246589\nMax Drawdown Duration 186 days 00:00:00\nTotal Trades 1\nWin Rate [%] NaN\nAvg Winning Trade [%] NaN\nAvg Losing Trade [%] NaN\nProfit Factor NaN\nExpectancy NaN\nSharpe Ratio 2.206485\nCalmar Ratio 6.977133\nOmega Ratio 1.381816\nSortino Ratio 3.623509\nName: Close, dtype: object\n\nMy Strategy\n------------------------------------------\nTotal Return [%] 364.275727\nBenchmark Return [%] 138.837436\nMax Drawdown [%] 35.49422\nMax Drawdown Duration 122 days 00:00:00\nTotal Trades 6\nWin Rate [%] 80.0\nAvg Winning Trade [%] 52.235227\nAvg Losing Trade [%] -3.933059\nProfit Factor 45.00258\nExpectancy 692.157004\nSharpe Ratio 4.078172\nCalmar Ratio 23.220732\nOmega Ratio 2.098986\nSortino Ratio 7.727806\nName: Close, dtype: object\n```\n\n<img src=\"https://raw.githubusercontent.com/suchak1/hyperdrive/master/img/my_strat.png\">\n\n### 4. Executing an order\n\nPre-requisites:\n\n- a Binance.US API key\n\nEnvironment Variables:\n\n- `BINANCE`\n\n```\nfrom pprint import pprint\nfrom hyperdrive import Exchange\nfrom Exchange import Binance\n\n# Binance API token loaded as an environment variable (os.environ['BINANCE'])\n\nbn = Binance()\n\n# use 45% of your USD account balance to buy BTC\norder = bn.order('BTC', 'USD', 'BUY', 0.45)\n\npprint(order)\n```\n\nOutput:\n\n```\n{'clientOrderId': '3cfyrJOSXqq6Zl1RJdeRRC',\n 'cummulativeQuoteQty': 46.8315,\n 'executedQty': 0.000757,\n 'fills': [{'commission': '0.0500',\n 'commissionAsset': 'USD',\n 'price': '61864.6400',\n 'qty': '0.00075700',\n 'tradeId': 25803914}],\n 'orderId': 714855908,\n 'orderListId': -1,\n 'origQty': 0.000757,\n 'price': 0.0,\n 'side': 'SELL',\n 'status': 'FILLED',\n 'symbol': 'BTCUSD',\n 'timeInForce': 'GTC',\n 'transactTime': 1637030680121,\n 'type': 'MARKET'}\n```\n\n## Use\n\nUse the scripts provided in the [`scripts/`](https://github.com/suchak1/hyperdrive/tree/master/scripts) directory as a reference since they are actually used in production daily.\n\nAvailable data collection functions:\n\n- [x] [](https://github.com/suchak1/hyperdrive/actions?query=workflow%3ASymbols) (from Robinhood)\n- [x] [](https://github.com/suchak1/hyperdrive/actions?query=workflow%3AOHLC) (from IEXCloud and Polygon)\n- [x] [](https://github.com/suchak1/hyperdrive/actions?query=workflow%3AIntraday) (from IEXCloud and Polygon)\n- [x] [](https://github.com/suchak1/hyperdrive/actions?query=workflow%3ADividends) (from IEXCloud and Polygon)\n- [x] [](https://github.com/suchak1/hyperdrive/actions?query=workflow%3ASplits) (from IEXCloud and Polygon)\n- [x] [/badge.svg>)](https://github.com/suchak1/hyperdrive/actions?query=workflow%3A%22Social+Sentiment+%281%29%22) (from StockTwits)\n- [x] [](https://github.com/suchak1/hyperdrive/actions?query=workflow%3AUnemployment) (from the Bureau of Labor Statistics)\n\n---\n\n<!-- extra -->\n<!-- 3. auto update model monthly -->\n<!-- abstract away undersample fx from preprocess fx, and buy and sell from order fx, make oracle class -->\n<!-- 4. automate saving model and preprocessors (every 2 weeks ) -->\n<!-- 5. add live results on website / model vs buying and holding like alphahub - use dash or plotly? use pca visualization, tsne for higher dimensions, roc curve, etc-->\n\n```\n\n```\n\n\n",
"bugtrack_url": null,
"license": "",
"summary": "An algorithmic trading platform",
"version": "1.10.11",
"project_urls": {
"Bug Reports": "https://github.com/suchak1/hyperdrive/issues",
"Homepage": "https://github.com/suchak1/hyperdrive",
"Source": "https://github.com/suchak1/hyperdrive"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "72b3a13e7e4a730c9dc4303a491f773b40109a988dd295cad366101328f93864",
"md5": "7a5d70bee2430142ed1bd92dbd52ebec",
"sha256": "9cc7f7bd750b4d30e5b2ab4c04707c74856af2e40728879958bd4e95d9173b73"
},
"downloads": -1,
"filename": "hyperdrive-1.10.11-py3-none-any.whl",
"has_sig": false,
"md5_digest": "7a5d70bee2430142ed1bd92dbd52ebec",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7",
"size": 30507,
"upload_time": "2023-07-08T05:24:32",
"upload_time_iso_8601": "2023-07-08T05:24:32.828382Z",
"url": "https://files.pythonhosted.org/packages/72/b3/a13e7e4a730c9dc4303a491f773b40109a988dd295cad366101328f93864/hyperdrive-1.10.11-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "80825d55f050114b2444d318b9ec1a640a701335bb389f1b293287fc6d4fa868",
"md5": "f299ea4c2ea3674d8e7c6bcc4d19c765",
"sha256": "b23e4ca8a190503107ba2b83fb94dbb123bf159211164675efd1cb4d52abb5b7"
},
"downloads": -1,
"filename": "hyperdrive-1.10.11.tar.gz",
"has_sig": false,
"md5_digest": "f299ea4c2ea3674d8e7c6bcc4d19c765",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7",
"size": 41130,
"upload_time": "2023-07-08T05:24:34",
"upload_time_iso_8601": "2023-07-08T05:24:34.381936Z",
"url": "https://files.pythonhosted.org/packages/80/82/5d55f050114b2444d318b9ec1a640a701335bb389f1b293287fc6d4fa868/hyperdrive-1.10.11.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-07-08 05:24:34",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "suchak1",
"github_project": "hyperdrive",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [
{
"name": "python-dotenv",
"specs": [
[
"==",
"1.0.0"
]
]
},
{
"name": "pandas",
"specs": [
[
"==",
"1.5.3"
]
]
},
{
"name": "robin-stocks",
"specs": [
[
"==",
"3.0.4"
]
]
},
{
"name": "boto3",
"specs": [
[
"==",
"1.26.165"
]
]
},
{
"name": "polygon-api-client",
"specs": [
[
"==",
"1.10.1"
]
]
},
{
"name": "pytz",
"specs": [
[
"==",
"2023.3"
]
]
},
{
"name": "vectorbt",
"specs": [
[
"==",
"0.25.4"
]
]
},
{
"name": "scipy",
"specs": [
[
"==",
"1.11.1"
]
]
},
{
"name": "scikit-learn",
"specs": [
[
"==",
"0.24.2"
]
]
},
{
"name": "auto-sklearn",
"specs": [
[
"==",
"0.15.0"
]
]
},
{
"name": "cryptography",
"specs": [
[
"==",
"41.0.1"
]
]
},
{
"name": "ta",
"specs": [
[
"==",
"0.10.2"
]
]
},
{
"name": "python-binance",
"specs": [
[
"==",
"1.0.17"
]
]
},
{
"name": "imbalanced-learn",
"specs": [
[
"==",
"0.8.1"
]
]
},
{
"name": "icosphere",
"specs": [
[
"==",
"0.1.3"
]
]
},
{
"name": "pynisher",
"specs": [
[
"==",
"0.6.4"
]
]
},
{
"name": "numpy",
"specs": [
[
"==",
"1.23.5"
]
]
},
{
"name": "selenium",
"specs": []
}
],
"lcname": "hyperdrive"
}