Skip to main content

Store your backtests in a Blockchain

Project description

pybacktestchain-vol-cash

pybacktestchain-vol-cash is a Python package designed for financial backtesting with blockchain tracking, cash and implied volatility data, and a user-friendly interface. Store your backtests in a Blockchain, test your volatility strategies and cash strategies. There is a Dash for userfriendly interface to backtest your best strategies !

Installation

$ pip install pybacktestchain-vol-cash

Package Structure

Main Directory: src/pybacktestchain_vol_cash

  • data_module.py: Contains functions for handling data, cash and volatility. This includes data loading, preprocessing. This part defines our main strategies defined: FirstTwoMoments, Momentum (long 1m call 105% on either SPX or SX5E, delta hedging in limits of the current cash level (capacity of going short shares down to -100%)) and ShortSkew (shorting a put 1m 95% strike on either SPX or SX5E, delta hedging in limits of the current cash level (capacity of going short shares down to -100%)).

  • broker.py: Implements execution logic for backtesting. Extends the core functionality to simulate trading: sell, buy functions, but also rebalancing, defining the portfolio valuation and defining the short selling limits.

  • blockchain.py: Handles the blockchain logic to track and store backtesting results, ensuring transparency and immutability.

Dash Application: Backtest_app

  • app.py: The entry point for launching the Dash application. Provides an interface for users to interact with the backtesting framework, visualize results, and customize settings. It'll be launched on user's local port.

Flask Application: Flask_app

  • utils.py: Launches through nohup.out the Flask server locally on port 5000. This allow the code to work. Additionnally, sets up an ngrok tunnel for external access to the implied volatility surface made outside of the package.

  • nohup.out: Captures logs and ensures that the Flask application can run persistently in the background.

Core Logic and Backtesting

Using the Main Package

The src/pybacktestchain_vol_cash directory contains the core modules:

data_module.py: Import this module to preprocess data or retrieve analysis-ready datasets.

broker.py: Simulates trading by connecting to data streams and executing strategies.

blockchain.py: Tracks the backtesting results, ensuring all data is recorded on a blockchain.

Example usage - which could be easily be reproduced by running app.py from Backtest_app.

from src.pybacktestchain_vol_cash.data_module import FirstTwoMoments,ShortSkew,Momentum
from src.pybacktestchain_vol_cash.broker import Backtest, StopLoss
from src.pybacktestchain_vol_cash.blockchain import load_blockchain
from datetime import datetime


# Set verbosity for logging
verbose = False  # Set to True to enable logging, or False to suppress it

backtest = Backtest(
    initial_date=datetime(2024, 6, 10),
    final_date=datetime(2024, 12, 20),
    strategy_type= "cash",
    information_class=FirstTwoMoments,#
    risk_model=StopLoss,
    name_blockchain='backtest',
    verbose=verbose
)
backtest.run_backtest()

block_chain = load_blockchain('backtest')
print(str(block_chain))
# check if the blockchain is valid
print(block_chain.is_valid())


# For the vol strategy Momentum: 

initial_date = datetime(2024, 10, 1)
final_date = datetime(2025, 1, 10)
strategy_type = "vol"
indices = ["^STOXX50E","^GSPC"]  # Focus only on SX5E
risk_model_class = StopLoss
name_blockchain = 'momentum'##

verbose = True

# Initialize the Backtest object with the Momentul information class
backtest = Backtest(
    initial_date=initial_date,
    final_date=final_date,
    strategy_type=strategy_type,
    information_class=lambda **kwargs: Momentum(
        **{
            "indices": indices,           
            "strategy_type": strategy_type,
            **kwargs                      
        }
    ),
    risk_model=risk_model_class,
    name_blockchain=name_blockchain,

    verbose=verbose
)

# Run the backtest
backtest.run_backtest()

# Load and validate the blockchain
block_chain = load_blockchain(name_blockchain)
print(str(block_chain))

# Check if the blockchain is valid
print("Is blockchain valid?", block_chain.is_valid())

Usage - Key Features

Blockchain Integration: Immutable tracking of backtest results.

Volatility strategies are now accessible: Implied volatility strategy such as Short Skew on Indices through the Dash interface or directly via code.

User-Friendly Interfaces: The Dash interface is accessible in the Backtest_app directory. Simplifies interaction with backtesting tools.

Flask + ngrok: Allows external API access for implied volatility data - constatly updated.

Modular Design: Extensible modules for data handling, trading logic, and result tracking.

Contributing

Interested in contributing? Check out the contributing guidelines. Please note that this project is released with a Code of Conduct. By contributing to this project, you agree to abide by its terms.

License

pybacktestchain was created by Juan F. Imbet. It is licensed under the terms of the MIT license. The current code is created by Dusica Bajalica, from the 'pybacktestchain'.

Credits

pybacktestchain-vol-cash was created with cookiecutter and the py-pkgs-cookiecutter template.

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

pybacktestchain_vol_cash-0.0.4.tar.gz (26.4 kB view details)

Uploaded Source

Built Distribution

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

pybacktestchain_vol_cash-0.0.4-py3-none-any.whl (26.4 kB view details)

Uploaded Python 3

File details

Details for the file pybacktestchain_vol_cash-0.0.4.tar.gz.

File metadata

  • Download URL: pybacktestchain_vol_cash-0.0.4.tar.gz
  • Upload date:
  • Size: 26.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.4.0 CPython/3.9.7 Darwin/22.6.0

File hashes

Hashes for pybacktestchain_vol_cash-0.0.4.tar.gz
Algorithm Hash digest
SHA256 2157e0856bc36f983630b55eb36ff13480c7f853fd7b7a0bfa6af68102812df8
MD5 2a4b89ff7e7da372d6d52de48df63b22
BLAKE2b-256 7def866bc0a8f70f3a74add0008b2310921f6bcb2029b6a81d1a39d7175377e8

See more details on using hashes here.

File details

Details for the file pybacktestchain_vol_cash-0.0.4-py3-none-any.whl.

File metadata

File hashes

Hashes for pybacktestchain_vol_cash-0.0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 78bb93be9ce56182d4a8fc93b9b4bf047767e2c681a41197ec210178535a6f13
MD5 eadc9c1d3597965cc7a05c31909033e6
BLAKE2b-256 c718fd467a92350c5693c0b694a27dd2fe8d7d0ae1d2aae3bff1130ae571821f

See more details on using hashes here.

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