%global _empty_manifest_terminate_build 0
Name: python-vectorbt
Version: 0.25.1
Release: 1
Summary: Python library for backtesting and analyzing trading strategies at scale
License: Apache 2.0 with Commons Clause
URL: https://github.com/polakowo/vectorbt
Source0: https://mirrors.nju.edu.cn/pypi/web/packages/2f/21/50e494335a5c39ce14578ec77ff00b7b732ab1d312655f67ec80f24b35e6/vectorbt-0.25.1.tar.gz
BuildArch: noarch
Requires: python3-numpy
Requires: python3-pandas
Requires: python3-scipy
Requires: python3-matplotlib
Requires: python3-plotly
Requires: python3-ipywidgets
Requires: python3-dill
Requires: python3-tqdm
Requires: python3-dateparser
Requires: python3-imageio
Requires: python3-scikit-learn
Requires: python3-schedule
Requires: python3-requests
Requires: python3-pytz
Requires: python3-mypy-extensions
Requires: python3-numba
Requires: python3-typing-extensions
Requires: python3-numba
Requires: python3-pytest
Requires: python3-pytest-cov
Requires: python3-codecov
Requires: python3-yfinance
Requires: python3-binance
Requires: python3-ccxt
Requires: python3-alpaca-trade-api
Requires: python3-ray
Requires: python3-ta
Requires: python3-pandas-ta
Requires: python3-TA-Lib
Requires: python3-telegram-bot
Requires: python3-quantstats
%description
## :sparkles: Usage
vectorbt allows you to easily backtest strategies with a couple of lines of Python code.
* Here is how much profit we would have made if we invested $100 into Bitcoin in 2014:
```python
import vectorbt as vbt
price = vbt.YFData.download('BTC-USD').get('Close')
pf = vbt.Portfolio.from_holding(price, init_cash=100)
pf.total_profit()
```
```plaintext
8961.008555963961
```
* Buy whenever 10-day SMA crosses above 50-day SMA and sell when opposite:
```python
fast_ma = vbt.MA.run(price, 10)
slow_ma = vbt.MA.run(price, 50)
entries = fast_ma.ma_crossed_above(slow_ma)
exits = fast_ma.ma_crossed_below(slow_ma)
pf = vbt.Portfolio.from_signals(price, entries, exits, init_cash=100)
pf.total_profit()
```
```plaintext
16423.251963801864
```
* Generate 1,000 strategies with random signals and test them on BTC and ETH:
```python
import numpy as np
symbols = ["BTC-USD", "ETH-USD"]
price = vbt.YFData.download(symbols, missing_index='drop').get('Close')
n = np.random.randint(10, 101, size=1000).tolist()
pf = vbt.Portfolio.from_random_signals(price, n=n, init_cash=100, seed=42)
mean_expectancy = pf.trades.expectancy().groupby(['randnx_n', 'symbol']).mean()
fig = mean_expectancy.unstack().vbt.scatterplot(xaxis_title='randnx_n', yaxis_title='mean_expectancy')
fig.show()
```

* For fans of hyperparameter optimization: here is a snippet for testing 10,000 window combinations of a
dual SMA crossover strategy on BTC, USD, and LTC:
```python
symbols = ["BTC-USD", "ETH-USD", "LTC-USD"]
price = vbt.YFData.download(symbols, missing_index='drop').get('Close')
windows = np.arange(2, 101)
fast_ma, slow_ma = vbt.MA.run_combs(price, window=windows, r=2, short_names=['fast', 'slow'])
entries = fast_ma.ma_crossed_above(slow_ma)
exits = fast_ma.ma_crossed_below(slow_ma)
pf_kwargs = dict(size=np.inf, fees=0.001, freq='1D')
pf = vbt.Portfolio.from_signals(price, entries, exits, **pf_kwargs)
fig = pf.total_return().vbt.heatmap(
x_level='fast_window', y_level='slow_window', slider_level='symbol', symmetric=True,
trace_kwargs=dict(colorbar=dict(title='Total return', tickformat='%')))
fig.show()
```
Digging into each strategy configuration is as simple as indexing with pandas:
```python
pf[(10, 20, 'ETH-USD')].stats()
```
```plaintext
Start 2015-08-07 00:00:00+00:00
End 2021-08-01 00:00:00+00:00
Period 2183 days 00:00:00
Start Value 100.0
End Value 620402.791485
Total Return [%] 620302.791485
Benchmark Return [%] 92987.961948
Max Gross Exposure [%] 100.0
Total Fees Paid 10991.676981
Max Drawdown [%] 70.734951
Max Drawdown Duration 760 days 00:00:00
Total Trades 54
Total Closed Trades 53
Total Open Trades 1
Open Trade PnL 67287.940601
Win Rate [%] 52.830189
Best Trade [%] 1075.803607
Worst Trade [%] -29.593414
Avg Winning Trade [%] 95.695343
Avg Losing Trade [%] -11.890246
Avg Winning Trade Duration 35 days 23:08:34.285714286
Avg Losing Trade Duration 8 days 00:00:00
Profit Factor 2.651143
Expectancy 10434.24247
Sharpe Ratio 2.041211
Calmar Ratio 4.6747
Omega Ratio 1.547013
Sortino Ratio 3.519894
Name: (10, 20, ETH-USD), dtype: object
```
The same for plotting:
```python
pf[(10, 20, 'ETH-USD')].plot().show()
```

It's not all about backtesting - vectorbt can be used to facilitate financial data analysis and visualization.
* Let's generate a GIF that animates the %B and bandwidth of Bollinger Bands for different symbols:
```python
symbols = ["BTC-USD", "ETH-USD", "ADA-USD"]
price = vbt.YFData.download(symbols, period='6mo', missing_index='drop').get('Close')
bbands = vbt.BBANDS.run(price)
def plot(index, bbands):
bbands = bbands.loc[index]
fig = vbt.make_subplots(
rows=2, cols=1, shared_xaxes=True, vertical_spacing=0.15,
subplot_titles=('%B', 'Bandwidth'))
fig.update_layout(template='vbt_dark', showlegend=False, width=750, height=400)
bbands.percent_b.vbt.ts_heatmap(
trace_kwargs=dict(zmin=0, zmid=0.5, zmax=1, colorscale='Spectral', colorbar=dict(
y=(fig.layout.yaxis.domain[0] + fig.layout.yaxis.domain[1]) / 2, len=0.5
)), add_trace_kwargs=dict(row=1, col=1), fig=fig)
bbands.bandwidth.vbt.ts_heatmap(
trace_kwargs=dict(colorbar=dict(
y=(fig.layout.yaxis2.domain[0] + fig.layout.yaxis2.domain[1]) / 2, len=0.5
)), add_trace_kwargs=dict(row=2, col=1), fig=fig)
return fig
vbt.save_animation('bbands.gif', bbands.wrapper.index, plot, bbands, delta=90, step=3, fps=3)
```
```plaintext
100%|██████████| 31/31 [00:21<00:00, 1.21it/s]
```
And this is just the tip of the iceberg of what's possible. Check out the [website](https://vectorbt.dev/) to learn more.
## Installation
```sh
pip install -U vectorbt
```
To also install optional dependencies:
```sh
pip install -U "vectorbt[full]"
```
## License
This work is [fair-code](http://faircode.io/) distributed under [Apache 2.0 with Commons Clause](https://github.com/polakowo/vectorbt/blob/master/LICENSE.md) license.
The source code is open and everyone (individuals and organizations) can use it for free.
However, it is not allowed to sell products and services that are mostly just this software.
If you have any questions about this or want to apply for a license exception, please [contact the author](mailto:olegpolakow@gmail.com).
Installing optional dependencies may be subject to a more restrictive license.
## Star History
[](https://star-history.com/#polakowo/vectorbt&Timeline)
## Disclaimer
This software is for educational purposes only. Do not risk money which you are afraid to lose.
USE THE SOFTWARE AT YOUR OWN RISK. THE AUTHORS AND ALL AFFILIATES ASSUME NO RESPONSIBILITY FOR YOUR TRADING RESULTS.
%package -n python3-vectorbt
Summary: Python library for backtesting and analyzing trading strategies at scale
Provides: python-vectorbt
BuildRequires: python3-devel
BuildRequires: python3-setuptools
BuildRequires: python3-pip
%description -n python3-vectorbt
## :sparkles: Usage
vectorbt allows you to easily backtest strategies with a couple of lines of Python code.
* Here is how much profit we would have made if we invested $100 into Bitcoin in 2014:
```python
import vectorbt as vbt
price = vbt.YFData.download('BTC-USD').get('Close')
pf = vbt.Portfolio.from_holding(price, init_cash=100)
pf.total_profit()
```
```plaintext
8961.008555963961
```
* Buy whenever 10-day SMA crosses above 50-day SMA and sell when opposite:
```python
fast_ma = vbt.MA.run(price, 10)
slow_ma = vbt.MA.run(price, 50)
entries = fast_ma.ma_crossed_above(slow_ma)
exits = fast_ma.ma_crossed_below(slow_ma)
pf = vbt.Portfolio.from_signals(price, entries, exits, init_cash=100)
pf.total_profit()
```
```plaintext
16423.251963801864
```
* Generate 1,000 strategies with random signals and test them on BTC and ETH:
```python
import numpy as np
symbols = ["BTC-USD", "ETH-USD"]
price = vbt.YFData.download(symbols, missing_index='drop').get('Close')
n = np.random.randint(10, 101, size=1000).tolist()
pf = vbt.Portfolio.from_random_signals(price, n=n, init_cash=100, seed=42)
mean_expectancy = pf.trades.expectancy().groupby(['randnx_n', 'symbol']).mean()
fig = mean_expectancy.unstack().vbt.scatterplot(xaxis_title='randnx_n', yaxis_title='mean_expectancy')
fig.show()
```

* For fans of hyperparameter optimization: here is a snippet for testing 10,000 window combinations of a
dual SMA crossover strategy on BTC, USD, and LTC:
```python
symbols = ["BTC-USD", "ETH-USD", "LTC-USD"]
price = vbt.YFData.download(symbols, missing_index='drop').get('Close')
windows = np.arange(2, 101)
fast_ma, slow_ma = vbt.MA.run_combs(price, window=windows, r=2, short_names=['fast', 'slow'])
entries = fast_ma.ma_crossed_above(slow_ma)
exits = fast_ma.ma_crossed_below(slow_ma)
pf_kwargs = dict(size=np.inf, fees=0.001, freq='1D')
pf = vbt.Portfolio.from_signals(price, entries, exits, **pf_kwargs)
fig = pf.total_return().vbt.heatmap(
x_level='fast_window', y_level='slow_window', slider_level='symbol', symmetric=True,
trace_kwargs=dict(colorbar=dict(title='Total return', tickformat='%')))
fig.show()
```
Digging into each strategy configuration is as simple as indexing with pandas:
```python
pf[(10, 20, 'ETH-USD')].stats()
```
```plaintext
Start 2015-08-07 00:00:00+00:00
End 2021-08-01 00:00:00+00:00
Period 2183 days 00:00:00
Start Value 100.0
End Value 620402.791485
Total Return [%] 620302.791485
Benchmark Return [%] 92987.961948
Max Gross Exposure [%] 100.0
Total Fees Paid 10991.676981
Max Drawdown [%] 70.734951
Max Drawdown Duration 760 days 00:00:00
Total Trades 54
Total Closed Trades 53
Total Open Trades 1
Open Trade PnL 67287.940601
Win Rate [%] 52.830189
Best Trade [%] 1075.803607
Worst Trade [%] -29.593414
Avg Winning Trade [%] 95.695343
Avg Losing Trade [%] -11.890246
Avg Winning Trade Duration 35 days 23:08:34.285714286
Avg Losing Trade Duration 8 days 00:00:00
Profit Factor 2.651143
Expectancy 10434.24247
Sharpe Ratio 2.041211
Calmar Ratio 4.6747
Omega Ratio 1.547013
Sortino Ratio 3.519894
Name: (10, 20, ETH-USD), dtype: object
```
The same for plotting:
```python
pf[(10, 20, 'ETH-USD')].plot().show()
```

It's not all about backtesting - vectorbt can be used to facilitate financial data analysis and visualization.
* Let's generate a GIF that animates the %B and bandwidth of Bollinger Bands for different symbols:
```python
symbols = ["BTC-USD", "ETH-USD", "ADA-USD"]
price = vbt.YFData.download(symbols, period='6mo', missing_index='drop').get('Close')
bbands = vbt.BBANDS.run(price)
def plot(index, bbands):
bbands = bbands.loc[index]
fig = vbt.make_subplots(
rows=2, cols=1, shared_xaxes=True, vertical_spacing=0.15,
subplot_titles=('%B', 'Bandwidth'))
fig.update_layout(template='vbt_dark', showlegend=False, width=750, height=400)
bbands.percent_b.vbt.ts_heatmap(
trace_kwargs=dict(zmin=0, zmid=0.5, zmax=1, colorscale='Spectral', colorbar=dict(
y=(fig.layout.yaxis.domain[0] + fig.layout.yaxis.domain[1]) / 2, len=0.5
)), add_trace_kwargs=dict(row=1, col=1), fig=fig)
bbands.bandwidth.vbt.ts_heatmap(
trace_kwargs=dict(colorbar=dict(
y=(fig.layout.yaxis2.domain[0] + fig.layout.yaxis2.domain[1]) / 2, len=0.5
)), add_trace_kwargs=dict(row=2, col=1), fig=fig)
return fig
vbt.save_animation('bbands.gif', bbands.wrapper.index, plot, bbands, delta=90, step=3, fps=3)
```
```plaintext
100%|██████████| 31/31 [00:21<00:00, 1.21it/s]
```
And this is just the tip of the iceberg of what's possible. Check out the [website](https://vectorbt.dev/) to learn more.
## Installation
```sh
pip install -U vectorbt
```
To also install optional dependencies:
```sh
pip install -U "vectorbt[full]"
```
## License
This work is [fair-code](http://faircode.io/) distributed under [Apache 2.0 with Commons Clause](https://github.com/polakowo/vectorbt/blob/master/LICENSE.md) license.
The source code is open and everyone (individuals and organizations) can use it for free.
However, it is not allowed to sell products and services that are mostly just this software.
If you have any questions about this or want to apply for a license exception, please [contact the author](mailto:olegpolakow@gmail.com).
Installing optional dependencies may be subject to a more restrictive license.
## Star History
[](https://star-history.com/#polakowo/vectorbt&Timeline)
## Disclaimer
This software is for educational purposes only. Do not risk money which you are afraid to lose.
USE THE SOFTWARE AT YOUR OWN RISK. THE AUTHORS AND ALL AFFILIATES ASSUME NO RESPONSIBILITY FOR YOUR TRADING RESULTS.
%package help
Summary: Development documents and examples for vectorbt
Provides: python3-vectorbt-doc
%description help
## :sparkles: Usage
vectorbt allows you to easily backtest strategies with a couple of lines of Python code.
* Here is how much profit we would have made if we invested $100 into Bitcoin in 2014:
```python
import vectorbt as vbt
price = vbt.YFData.download('BTC-USD').get('Close')
pf = vbt.Portfolio.from_holding(price, init_cash=100)
pf.total_profit()
```
```plaintext
8961.008555963961
```
* Buy whenever 10-day SMA crosses above 50-day SMA and sell when opposite:
```python
fast_ma = vbt.MA.run(price, 10)
slow_ma = vbt.MA.run(price, 50)
entries = fast_ma.ma_crossed_above(slow_ma)
exits = fast_ma.ma_crossed_below(slow_ma)
pf = vbt.Portfolio.from_signals(price, entries, exits, init_cash=100)
pf.total_profit()
```
```plaintext
16423.251963801864
```
* Generate 1,000 strategies with random signals and test them on BTC and ETH:
```python
import numpy as np
symbols = ["BTC-USD", "ETH-USD"]
price = vbt.YFData.download(symbols, missing_index='drop').get('Close')
n = np.random.randint(10, 101, size=1000).tolist()
pf = vbt.Portfolio.from_random_signals(price, n=n, init_cash=100, seed=42)
mean_expectancy = pf.trades.expectancy().groupby(['randnx_n', 'symbol']).mean()
fig = mean_expectancy.unstack().vbt.scatterplot(xaxis_title='randnx_n', yaxis_title='mean_expectancy')
fig.show()
```

* For fans of hyperparameter optimization: here is a snippet for testing 10,000 window combinations of a
dual SMA crossover strategy on BTC, USD, and LTC:
```python
symbols = ["BTC-USD", "ETH-USD", "LTC-USD"]
price = vbt.YFData.download(symbols, missing_index='drop').get('Close')
windows = np.arange(2, 101)
fast_ma, slow_ma = vbt.MA.run_combs(price, window=windows, r=2, short_names=['fast', 'slow'])
entries = fast_ma.ma_crossed_above(slow_ma)
exits = fast_ma.ma_crossed_below(slow_ma)
pf_kwargs = dict(size=np.inf, fees=0.001, freq='1D')
pf = vbt.Portfolio.from_signals(price, entries, exits, **pf_kwargs)
fig = pf.total_return().vbt.heatmap(
x_level='fast_window', y_level='slow_window', slider_level='symbol', symmetric=True,
trace_kwargs=dict(colorbar=dict(title='Total return', tickformat='%')))
fig.show()
```
Digging into each strategy configuration is as simple as indexing with pandas:
```python
pf[(10, 20, 'ETH-USD')].stats()
```
```plaintext
Start 2015-08-07 00:00:00+00:00
End 2021-08-01 00:00:00+00:00
Period 2183 days 00:00:00
Start Value 100.0
End Value 620402.791485
Total Return [%] 620302.791485
Benchmark Return [%] 92987.961948
Max Gross Exposure [%] 100.0
Total Fees Paid 10991.676981
Max Drawdown [%] 70.734951
Max Drawdown Duration 760 days 00:00:00
Total Trades 54
Total Closed Trades 53
Total Open Trades 1
Open Trade PnL 67287.940601
Win Rate [%] 52.830189
Best Trade [%] 1075.803607
Worst Trade [%] -29.593414
Avg Winning Trade [%] 95.695343
Avg Losing Trade [%] -11.890246
Avg Winning Trade Duration 35 days 23:08:34.285714286
Avg Losing Trade Duration 8 days 00:00:00
Profit Factor 2.651143
Expectancy 10434.24247
Sharpe Ratio 2.041211
Calmar Ratio 4.6747
Omega Ratio 1.547013
Sortino Ratio 3.519894
Name: (10, 20, ETH-USD), dtype: object
```
The same for plotting:
```python
pf[(10, 20, 'ETH-USD')].plot().show()
```

It's not all about backtesting - vectorbt can be used to facilitate financial data analysis and visualization.
* Let's generate a GIF that animates the %B and bandwidth of Bollinger Bands for different symbols:
```python
symbols = ["BTC-USD", "ETH-USD", "ADA-USD"]
price = vbt.YFData.download(symbols, period='6mo', missing_index='drop').get('Close')
bbands = vbt.BBANDS.run(price)
def plot(index, bbands):
bbands = bbands.loc[index]
fig = vbt.make_subplots(
rows=2, cols=1, shared_xaxes=True, vertical_spacing=0.15,
subplot_titles=('%B', 'Bandwidth'))
fig.update_layout(template='vbt_dark', showlegend=False, width=750, height=400)
bbands.percent_b.vbt.ts_heatmap(
trace_kwargs=dict(zmin=0, zmid=0.5, zmax=1, colorscale='Spectral', colorbar=dict(
y=(fig.layout.yaxis.domain[0] + fig.layout.yaxis.domain[1]) / 2, len=0.5
)), add_trace_kwargs=dict(row=1, col=1), fig=fig)
bbands.bandwidth.vbt.ts_heatmap(
trace_kwargs=dict(colorbar=dict(
y=(fig.layout.yaxis2.domain[0] + fig.layout.yaxis2.domain[1]) / 2, len=0.5
)), add_trace_kwargs=dict(row=2, col=1), fig=fig)
return fig
vbt.save_animation('bbands.gif', bbands.wrapper.index, plot, bbands, delta=90, step=3, fps=3)
```
```plaintext
100%|██████████| 31/31 [00:21<00:00, 1.21it/s]
```
And this is just the tip of the iceberg of what's possible. Check out the [website](https://vectorbt.dev/) to learn more.
## Installation
```sh
pip install -U vectorbt
```
To also install optional dependencies:
```sh
pip install -U "vectorbt[full]"
```
## License
This work is [fair-code](http://faircode.io/) distributed under [Apache 2.0 with Commons Clause](https://github.com/polakowo/vectorbt/blob/master/LICENSE.md) license.
The source code is open and everyone (individuals and organizations) can use it for free.
However, it is not allowed to sell products and services that are mostly just this software.
If you have any questions about this or want to apply for a license exception, please [contact the author](mailto:olegpolakow@gmail.com).
Installing optional dependencies may be subject to a more restrictive license.
## Star History
[](https://star-history.com/#polakowo/vectorbt&Timeline)
## Disclaimer
This software is for educational purposes only. Do not risk money which you are afraid to lose.
USE THE SOFTWARE AT YOUR OWN RISK. THE AUTHORS AND ALL AFFILIATES ASSUME NO RESPONSIBILITY FOR YOUR TRADING RESULTS.
%prep
%autosetup -n vectorbt-0.25.1
%build
%py3_build
%install
%py3_install
install -d -m755 %{buildroot}/%{_pkgdocdir}
if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi
if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi
if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi
if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi
pushd %{buildroot}
if [ -d usr/lib ]; then
find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst
fi
if [ -d usr/lib64 ]; then
find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst
fi
if [ -d usr/bin ]; then
find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst
fi
if [ -d usr/sbin ]; then
find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst
fi
touch doclist.lst
if [ -d usr/share/man ]; then
find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst
fi
popd
mv %{buildroot}/filelist.lst .
mv %{buildroot}/doclist.lst .
%files -n python3-vectorbt -f filelist.lst
%dir %{python3_sitelib}/*
%files help -f doclist.lst
%{_docdir}/*
%changelog
* Fri May 05 2023 Python_Bot - 0.25.1-1
- Package Spec generated