Skip to main content

Fast minimalist vector-based backtesting for perpetual futures.

Project description

alphavec

CI

Disclaimer

The content provided in this project is for informational purposes only and does not constitute financial advice. This information should not be construed as professional financial advice, and it is recommended to consult with a qualified financial advisor before making any financial decisions.

No liability is accepted for any losses or damages incurred as a result of acting or refraining from action based on the information provided in this project. Use this information at your own risk.

          $$\           $$\                                               
          $$ |          $$ |                                              
 $$$$$$\  $$ | $$$$$$\  $$$$$$$\   $$$$$$\ $$\    $$\  $$$$$$\   $$$$$$$\ 
 \____$$\ $$ |$$  __$$\ $$  __$$\  \____$$\\$$\  $$  |$$  __$$\ $$  _____|
 $$$$$$$ |$$ |$$ /  $$ |$$ |  $$ | $$$$$$$ |\$$\$$  / $$$$$$$$ |$$ /      
$$  __$$ |$$ |$$ |  $$ |$$ |  $$ |$$  __$$ | \$$$  /  $$   ____|$$ |      
\$$$$$$$ |$$ |$$$$$$$  |$$ |  $$ |\$$$$$$$ |  \$  /   \$$$$$$$\ \$$$$$$$\ 
 \_______|\__|$$  ____/ \__|  \__| \_______|   \_/     \_______| \_______|
              $$ |                                                        
              $$ |                                                        
              \__|                                                                                                         

Alphavec is a lightning fast, minimalist, cost-aware vectorized backtest engine inspired by the guys at RobotWealth.

The backtest input is the natural output of a typical quant research process - a time series of portfolio weights. You simply provide a dataframe of weights and a dataframe of close prices and order prices, along with some optional cost parameters and the backtest returns a streamlined performance report with insight into the key metrics.

alphavec has first-class support for simulating perptual futures strategies using a small, fast, verifiable simulation core.

Rationale

Alphavec is an antidote to the various bloated and complex backtest frameworks.

To validate ideas all you really need is...

weights * returns.shift(-1)

The goal was to add just enough extra complexity to this basic formula to support sound development of cost-aware systematic trading strategies.

Install

Requires Python >=3.12

pip install alphavec

  • From source:
    • python3 -m venv .venv
    • ./.venv/bin/pip install -e .
  • For development:
    • ./.venv/bin/pip install -e ".[dev]"

Usage

Considerations

  • Simulates cross‑margin with unlimited leverage and borrowing (no liquidations or margin calls).
  • Orders execute at order_prices plus slippage and fees.
  • Funding applies per period using signed funding_rates and close notional.
  • NaNs in order_prices and close_prices imply the asset is not tradable that period; prices are carried forward for valuation.
  • Positions will always be closed if target weight is zero, regardless of minimum notional filter.
  • NaNs in funding_rates are treated as 0, and funding is always 0 when close_prices is NaN.

Simulation

simulate() runs a cross‑margin perpetual futures backtest from target portfolio weights.

Inputs:

  • weights: pandas DataFrame or Series with a DatetimeIndex. Values are decimal target weights (1.0 = 100% notional). Positive = long, negative = short. Weights may sum above 1 for leverage.
  • close_prices, order_prices, funding_rates (optional): same shape/index/columns as weights.

Returns:

  • returns: period returns as a pandas Series.
  • metrics: key performance metrics as a pandas DataFrame with Value and Note columns.

Example:

import pandas as pd
from alphavec import simulate, tearsheet

weights = pd.DataFrame({"BTC": [1, 1, 1]}, index=pd.date_range("2024-01-01", periods=3, freq="1D"))
close_prices = pd.DataFrame({"BTC": [100, 105, 110]}, index=weights.index)
order_prices = close.shift(1).fillna(close.iloc[0])

returns, metrics= simulate(
    weights=weights,
    close_prices=close_prices,
    order_prices=order_prices,
    funding_rates=funding_rates,
    benchmark_asset="BTC",
    order_notional_min=10,
    fee_pct=0.00025,       # 2.5 bps per trade
    slippage_pct=0.001,  # 10 bps per trade
    init_cash=10_000,
    freq_rule="1D",
    trading_days_year=365,
    risk_free_rate=0.03,
)
html = tearsheet(metrics=metrics, returns=returns, output_path="tearsheet.html")

Tearsheet Example

Tearsheet

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

alphavec-0.1.1.tar.gz (17.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

alphavec-0.1.1-py3-none-any.whl (13.7 kB view details)

Uploaded Python 3

File details

Details for the file alphavec-0.1.1.tar.gz.

File metadata

  • Download URL: alphavec-0.1.1.tar.gz
  • Upload date:
  • Size: 17.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for alphavec-0.1.1.tar.gz
Algorithm Hash digest
SHA256 898fe667d95519c9641ff705360a0c8a82ed5e95deefd0dd41148b86b633b333
MD5 c93c22be761b4aa85618738a3943220c
BLAKE2b-256 766b5fccab3c611af52c7d54dc557fc70e29eaab0be05df57ec95b63de84d9c9

See more details on using hashes here.

Provenance

The following attestation bundles were made for alphavec-0.1.1.tar.gz:

Publisher: python-publish.yml on breaded-xyz/alphavec

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file alphavec-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: alphavec-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 13.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for alphavec-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 f1547c4004ad4271feade61b520f39d77feed5a04d606564109dcba5d2af5d03
MD5 dae7a9e667c4fb381085ef22cd6c0764
BLAKE2b-256 88fdcba2bc694f4971d5aa4c5c6d11be7cad4ddff4669d0339833b71a7a13021

See more details on using hashes here.

Provenance

The following attestation bundles were made for alphavec-0.1.1-py3-none-any.whl:

Publisher: python-publish.yml on breaded-xyz/alphavec

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page