diff options
| -rw-r--r-- | .gitignore | 1 | ||||
| -rw-r--r-- | python-vectorbt.spec | 757 | ||||
| -rw-r--r-- | sources | 1 | 
3 files changed, 759 insertions, 0 deletions
| @@ -0,0 +1 @@ +/vectorbt-0.25.1.tar.gz diff --git a/python-vectorbt.spec b/python-vectorbt.spec new file mode 100644 index 0000000..3827531 --- /dev/null +++ b/python-vectorbt.spec @@ -0,0 +1,757 @@ +%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 +<div align="center"> +	<a href="https://vectorbt.pro/" alt="https://vectorbt.pro/"> +        <img src="docs/docs/assets/logo/header-pro.svg" /> +    </a> +</div> +<div align="center"> +	<a href="https://vectorbt.dev/" alt="https://vectorbt.dev/"> +        <img src="docs/docs/assets/logo/header.svg" /> +    </a> +</div> +<br> +<p align="center"> +    <a href="https://pypi.org/project/vectorbt" alt="Python Versions"> +        <img src="https://img.shields.io/pypi/pyversions/vectorbt.svg?logo=python&logoColor=white" /></a> +    <a href="https://github.com/polakowo/vectorbt/blob/master/LICENSE.md" alt="License"> +        <img src="https://img.shields.io/badge/license-Fair%20Code-yellow" /></a> +    <a href="https://pypi.org/project/vectorbt" alt="PyPi"> +        <img src="https://img.shields.io/pypi/v/vectorbt?color=blueviolet" /></a> +    <a href="https://codecov.io/gh/polakowo/vectorbt" alt="codecov"> +        <img src="https://codecov.io/gh/polakowo/vectorbt/branch/master/graph/badge.svg?token=YTLNAI7PS3" /></a> +    <a href="https://vectorbt.dev/" alt="Website"> +        <img src="https://img.shields.io/website?url=https://vectorbt.dev/" /></a> +    <a href="https://pepy.tech/project/vectorbt" alt="Downloads"> +        <img src="https://pepy.tech/badge/vectorbt" /></a> +    <a href="https://mybinder.org/v2/gh/polakowo/vectorbt/HEAD?urlpath=lab" alt="Binder"> +        <img src="https://img.shields.io/badge/launch-binder-d6604a" /></a> +    <a href="https://gitter.im/vectorbt/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge" alt="Join the chat at https://gitter.im/vectorbt/community"> +        <img src="https://badges.gitter.im/vectorbt.svg" /></a> +</p> + +## :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() +``` + +<img width="650" src="https://raw.githubusercontent.com/polakowo/vectorbt/master/docs/docs/assets/images/usage_dmac_heatmap.gif"> + +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] +``` + +<img width="750" src="https://raw.githubusercontent.com/polakowo/vectorbt/master/docs/docs/assets/images/usage_bbands.gif"> + +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 +<div align="center"> +	<a href="https://vectorbt.pro/" alt="https://vectorbt.pro/"> +        <img src="docs/docs/assets/logo/header-pro.svg" /> +    </a> +</div> +<div align="center"> +	<a href="https://vectorbt.dev/" alt="https://vectorbt.dev/"> +        <img src="docs/docs/assets/logo/header.svg" /> +    </a> +</div> +<br> +<p align="center"> +    <a href="https://pypi.org/project/vectorbt" alt="Python Versions"> +        <img src="https://img.shields.io/pypi/pyversions/vectorbt.svg?logo=python&logoColor=white" /></a> +    <a href="https://github.com/polakowo/vectorbt/blob/master/LICENSE.md" alt="License"> +        <img src="https://img.shields.io/badge/license-Fair%20Code-yellow" /></a> +    <a href="https://pypi.org/project/vectorbt" alt="PyPi"> +        <img src="https://img.shields.io/pypi/v/vectorbt?color=blueviolet" /></a> +    <a href="https://codecov.io/gh/polakowo/vectorbt" alt="codecov"> +        <img src="https://codecov.io/gh/polakowo/vectorbt/branch/master/graph/badge.svg?token=YTLNAI7PS3" /></a> +    <a href="https://vectorbt.dev/" alt="Website"> +        <img src="https://img.shields.io/website?url=https://vectorbt.dev/" /></a> +    <a href="https://pepy.tech/project/vectorbt" alt="Downloads"> +        <img src="https://pepy.tech/badge/vectorbt" /></a> +    <a href="https://mybinder.org/v2/gh/polakowo/vectorbt/HEAD?urlpath=lab" alt="Binder"> +        <img src="https://img.shields.io/badge/launch-binder-d6604a" /></a> +    <a href="https://gitter.im/vectorbt/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge" alt="Join the chat at https://gitter.im/vectorbt/community"> +        <img src="https://badges.gitter.im/vectorbt.svg" /></a> +</p> + +## :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() +``` + +<img width="650" src="https://raw.githubusercontent.com/polakowo/vectorbt/master/docs/docs/assets/images/usage_dmac_heatmap.gif"> + +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] +``` + +<img width="750" src="https://raw.githubusercontent.com/polakowo/vectorbt/master/docs/docs/assets/images/usage_bbands.gif"> + +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 +<div align="center"> +	<a href="https://vectorbt.pro/" alt="https://vectorbt.pro/"> +        <img src="docs/docs/assets/logo/header-pro.svg" /> +    </a> +</div> +<div align="center"> +	<a href="https://vectorbt.dev/" alt="https://vectorbt.dev/"> +        <img src="docs/docs/assets/logo/header.svg" /> +    </a> +</div> +<br> +<p align="center"> +    <a href="https://pypi.org/project/vectorbt" alt="Python Versions"> +        <img src="https://img.shields.io/pypi/pyversions/vectorbt.svg?logo=python&logoColor=white" /></a> +    <a href="https://github.com/polakowo/vectorbt/blob/master/LICENSE.md" alt="License"> +        <img src="https://img.shields.io/badge/license-Fair%20Code-yellow" /></a> +    <a href="https://pypi.org/project/vectorbt" alt="PyPi"> +        <img src="https://img.shields.io/pypi/v/vectorbt?color=blueviolet" /></a> +    <a href="https://codecov.io/gh/polakowo/vectorbt" alt="codecov"> +        <img src="https://codecov.io/gh/polakowo/vectorbt/branch/master/graph/badge.svg?token=YTLNAI7PS3" /></a> +    <a href="https://vectorbt.dev/" alt="Website"> +        <img src="https://img.shields.io/website?url=https://vectorbt.dev/" /></a> +    <a href="https://pepy.tech/project/vectorbt" alt="Downloads"> +        <img src="https://pepy.tech/badge/vectorbt" /></a> +    <a href="https://mybinder.org/v2/gh/polakowo/vectorbt/HEAD?urlpath=lab" alt="Binder"> +        <img src="https://img.shields.io/badge/launch-binder-d6604a" /></a> +    <a href="https://gitter.im/vectorbt/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge" alt="Join the chat at https://gitter.im/vectorbt/community"> +        <img src="https://badges.gitter.im/vectorbt.svg" /></a> +</p> + +## :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() +``` + +<img width="650" src="https://raw.githubusercontent.com/polakowo/vectorbt/master/docs/docs/assets/images/usage_dmac_heatmap.gif"> + +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] +``` + +<img width="750" src="https://raw.githubusercontent.com/polakowo/vectorbt/master/docs/docs/assets/images/usage_bbands.gif"> + +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 <Python_Bot@openeuler.org> - 0.25.1-1 +- Package Spec generated @@ -0,0 +1 @@ +43b5e7194e23d0d20b257af7a164df51  vectorbt-0.25.1.tar.gz | 
