%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() ``` ![rand_scatter.svg](https://raw.githubusercontent.com/polakowo/vectorbt/master/docs/docs/assets/images/usage_rand_scatter.svg) * 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() ``` ![dmac_portfolio.svg](https://raw.githubusercontent.com/polakowo/vectorbt/master/docs/docs/assets/images/usage_dmac_portfolio.svg) 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 [![Star History Chart](https://api.star-history.com/svg?repos=polakowo/vectorbt&type=Timeline)](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() ``` ![rand_scatter.svg](https://raw.githubusercontent.com/polakowo/vectorbt/master/docs/docs/assets/images/usage_rand_scatter.svg) * 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() ``` ![dmac_portfolio.svg](https://raw.githubusercontent.com/polakowo/vectorbt/master/docs/docs/assets/images/usage_dmac_portfolio.svg) 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 [![Star History Chart](https://api.star-history.com/svg?repos=polakowo/vectorbt&type=Timeline)](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() ``` ![rand_scatter.svg](https://raw.githubusercontent.com/polakowo/vectorbt/master/docs/docs/assets/images/usage_rand_scatter.svg) * 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() ``` ![dmac_portfolio.svg](https://raw.githubusercontent.com/polakowo/vectorbt/master/docs/docs/assets/images/usage_dmac_portfolio.svg) 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 [![Star History Chart](https://api.star-history.com/svg?repos=polakowo/vectorbt&type=Timeline)](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