Skip to main content

Official Python client for the Backtest360 backtesting API

Project description

backtest360-client

PyPI version CI Python versions License: MIT

Official Python client for the Backtest360 backtesting API.

Backtest your trading strategy from every angle, in minutes.

import yfinance as yf
from backtest360 import Client, Strategy

df = yf.download("BTC-USD", period="1y", interval="1d",
                 auto_adjust=False, multi_level_index=False, progress=False)
df.columns = df.columns.str.lower()

result = Client(api_key="b360_live_...").backtest(Strategy.rsi_threshold_long(), df)
print(result.stats["Sharpe"])
result.equity.plot(title="Equity curve")

Install

pip install --pre backtest360-client   # while on alpha

Requires Python 3.9+. The only runtime dependencies are httpx and pandas.

Get an API key

Sign up at backtest360.com/dashboard and copy your key. Store it in the BACKTEST360_API_KEY environment variable or pass it directly:

client = Client(api_key="b360_live_...")
# or: export BACKTEST360_API_KEY=b360_live_...
client = Client()

Features

  • Hand-written wrapper over the public REST API — no generated code, no schema sync
  • Built-in strategy templates (Strategy.rsi_threshold_long(), Strategy.ma_crossover(), …)
  • Grouped-knob classes: Execution, Costs, Risk, Sizing — set only what you need
  • Pandas-native — pass a DataFrame, get a DataFrame back (result.equity, result.returns)
  • Raw-API escape hatch for full control (client.backtest_raw({...}))
  • Strict type hints + py.typed — first-class IDE and mypy support
  • MIT licensed

Common patterns

Custom strategy

from backtest360 import Client, Strategy, Execution, Costs, Risk, Sizing

strat = Strategy(
    name="rsi_mean_reversion",
    long_entry="rsi < 30",
    long_exit="rsi > 70",
    indicators=[Strategy.indicator("rsi", period=14)],
)

result = Client(api_key="b360_live_...").backtest(
    strat, df,
    benchmark=spy_df,
    execution=Execution(entry="open", exit="close", signal_frequency="daily"),
    costs=Costs(slippage_bps=2.5, fee_pct=0.001),
    risk=Risk(stop="trailing_atr", value=2.5, atr_period=14, max_drawdown=0.25),
    sizing=Sizing(weight=1.0, vol_target=0.15, leverage_limit=2.0),
)

print(result.stats["Sharpe"], result.stats["Max Drawdown"])
for t in result.trades[:5]:
    print(t["entry_date"], t["direction"], t["return_net"])

Indicator library (names, params, output columns): https://api.backtest360.com/docs#tag/Reference/operation/list_indicators_api_indicators_get

Strategy templates (full list): https://api.backtest360.com/docs#tag/Reference/operation/list_strategies_api_strategies_get

Raw API escape hatch

For users who want exact control with the API docs open:

resp = Client(api_key="...").backtest_raw({
    "strategy":    {"condition_tree": {...}, "indicators": [...]},
    "data_source": {"ohlcv": {...}},
    "execution":   {"signal_frequency": "daily"},
})

Error handling

from backtest360 import Backtest360Error

try:
    result = client.backtest(strategy, df)
except Backtest360Error as e:
    if e.status == 401:
        print("Invalid or expired API key — renew at backtest360.com/dashboard")
    elif e.status == 429:
        print("Rate limited — retry after a moment")
    elif e.status == 422:
        print("Strategy validation failed:", e.body)
    else:
        raise   # unexpected — let it propagate

Versioning

MAJOR.MINOR.PATCH. Pre-1.0 (0.x.y): the API may move between minor versions. Pre-release suffixes: aN (alpha), bN (beta), rcN (release candidate). See CHANGELOG.md for the release history.


Full documentation

Full documentation → https://backtest360.github.io/backtest360-client/

Engine API reference → https://api.backtest360.com/docs

Contributing / issues

Bug reports and feature requests welcome — open an issue on GitHub or email developers@backtest360.com.

License

MIT — see LICENSE.

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

backtest360_client-0.1.0a1.tar.gz (26.7 kB view details)

Uploaded Source

Built Distribution

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

backtest360_client-0.1.0a1-py3-none-any.whl (13.3 kB view details)

Uploaded Python 3

File details

Details for the file backtest360_client-0.1.0a1.tar.gz.

File metadata

  • Download URL: backtest360_client-0.1.0a1.tar.gz
  • Upload date:
  • Size: 26.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for backtest360_client-0.1.0a1.tar.gz
Algorithm Hash digest
SHA256 a628b2519ca08859a8d03da8218168b37ea05362d1a1153cac1d309d2daab94b
MD5 f9b46b49248edc328e3c45cfd486ba3e
BLAKE2b-256 8b91e8f74e82dc87a846ce81bb253c133a20af755d2df1757445c38829bd5818

See more details on using hashes here.

Provenance

The following attestation bundles were made for backtest360_client-0.1.0a1.tar.gz:

Publisher: release.yml on Backtest360/backtest360-client

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

File details

Details for the file backtest360_client-0.1.0a1-py3-none-any.whl.

File metadata

File hashes

Hashes for backtest360_client-0.1.0a1-py3-none-any.whl
Algorithm Hash digest
SHA256 bd2bd5791bdebb0b9b7eeb6faa233ae9581b86ebaaf7ec122dfea51a72c06d5e
MD5 126d5811fd7f49fdda5f9ad06d67a151
BLAKE2b-256 8f0a72ac94583f482d37eda6a7f74bce5da7592749f41647db22d6c44f4443cc

See more details on using hashes here.

Provenance

The following attestation bundles were made for backtest360_client-0.1.0a1-py3-none-any.whl:

Publisher: release.yml on Backtest360/backtest360-client

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