Features
Portfolio optimization
Construct optimized portfolios with native and integrated optimization libraries
✅ Riskfolio-Lib is another increasingly popular library for portfolio optimization that has been integrated into VBT. Integration was done by automating typical workflows inside Riskfolio-Lib and putting them into a single function, so many portfolio optimization problems can be expressed using a single set of keyword arguments and easily parameterized.
data = vbt.YFData.pull(
["SPY", "TLT", "XLF", "XLE", "XLU", "XLK", "XLB", "XLP", "XLY", "XLI", "XLV"],
start="2020",
end="2023",
missing_index="drop"
)
pfo = vbt.PFO.from_riskfolio(
returns=data.close.vbt.to_returns(),
port_cls="hc",
every="M"
)
pfo.plot().show()Tutorial
Learn more in the Portfolio optimization tutorial.
✅ Portfolio optimization is the process of creating a portfolio of assets that aims to maximize return and minimize risk. Usually, this process is performed periodically and involves generating new weights to rebalance an existing portfolio. As with most things in VBT, the weight generation step is implemented as a callback by the user, while the optimizer calls that callback periodically. The final result is a collection of returned weight allocations that can be analyzed, visualized, and used in actual simulations 🥧
def regime_change_optimize_func(data):
returns = data.returns
total_return = returns.vbt.returns.total()
weights = data.symbol_wrapper.fill_reduced(0)
pos_mask = total_return > 0
if pos_mask.any():
weights[pos_mask] = total_return[pos_mask] / total_return.abs().sum()
neg_mask = total_return < 0
if neg_mask.any():
weights[neg_mask] = total_return[neg_mask] / total_return.abs().sum()
return -1 * weights
data = vbt.YFData.pull(
["SPY", "TLT", "XLF", "XLE", "XLU", "XLK", "XLB", "XLP", "XLY", "XLI", "XLV"],
start="2020",
end="2023",
missing_index="drop"
)
pfo = vbt.PFO.from_optimize_func(
data.symbol_wrapper,
regime_change_optimize_func,
vbt.RepEval("data[index_slice]", context=dict(data=data)),
every="M"
)
pfo.plot().show()Tutorial
Learn more in the Portfolio optimization tutorial.
✅ PyPortfolioOpt is a popular financial portfolio optimization package that includes both classical methods (Markowitz 1952 and Black-Litterman), suggested best practices (such as covariance shrinkage), and many recent developments and novel features, like L2 regularization, shrunk covariance, and hierarchical risk parity.
data = vbt.YFData.pull(
["SPY", "TLT", "XLF", "XLE", "XLU", "XLK", "XLB", "XLP", "XLY", "XLI", "XLV"],
start="2020",
end="2023",
missing_index="drop"
)
pfo = vbt.PFO.from_pypfopt(
returns=data.returns,
optimizer="hrp",
target="optimize",
every="M"
)
pfo.plot().show()Tutorial
Learn more in the Portfolio optimization tutorial.
✅ Universal Portfolios is a package that brings together various Online Portfolio Selection (OLPS) algorithms.
data = vbt.YFData.pull(
["SPY", "TLT", "XLF", "XLE", "XLU", "XLK", "XLB", "XLP", "XLY", "XLI", "XLV"],
start="2020",
end="2023",
missing_index="drop"
)
pfo = vbt.PFO.from_universal_algo(
"MPT",
data.resample("W").close,
window=52,
min_history=4,
mu_estimator='historical',
cov_estimator='empirical',
method='mpt',
q=0
)
pfo.plot().show()Tutorial
Learn more in the Portfolio optimization tutorial.
Copyright © 2021–2026 Oleg Polakow. All rights reserved.
Site content and documentation are provided for using and evaluating VectorBT PRO and for educational purposes. Any other use, including building or supporting competing products or services, requires prior written consent.