Skip to main content

Trading strategies crafting tools

Project description

ptahlmud

Python library for crafting and backtesting trading strategies. Ptahlmud helps you design, test, and evaluate algorithmic trading strategies using historical market data.

Features

This project is still under construction and features may be added or reworked.

  • Signal-based trading: Define entry and exit points with customizable signals
  • Portfolio simulation: Track your strategy's performance over time
  • Risk management: Configure position sizing, take-profit, and stop-loss parameters
  • Backtesting engine: Test strategies against historical market data

Installation

pip install ptahlmud

Quick Start

Here's a simple example of defining trading signals and running a backtest:

from datetime import datetime

from ptahlmud.backtesting.backtest import RiskConfig, process_signals
from ptahlmud.backtesting.portfolio import Portfolio
from ptahlmud.entities.fluctuations import Fluctuations
from ptahlmud.types.signal import Signal, Side, Action

# Define trading signals
signals = [
    Signal(date=datetime(2023, 1, 1), side=Side.LONG, action=Action.ENTER),
    Signal(date=datetime(2023, 1, 15), side=Side.LONG, action=Action.EXIT),
    Signal(date=datetime(2023, 2, 1), side=Side.SHORT, action=Action.ENTER),
    Signal(date=datetime(2023, 2, 15), side=Side.SHORT, action=Action.EXIT),
]

# Configure risk management
risk_config = RiskConfig(
    size=0.1,          # Use 10% of available capital per trade
    take_profit=0.05,  # Take profit at 5% price increase
    stop_loss=0.03,    # Cut losses at 3% price decrease
)

# Initialize portfolio
initial_portfolio = Portfolio(
    starting_date=datetime(2023, 1, 1),
    starting_asset=0,
    starting_currency=10_000,
)

# Load market data (you'll need to implement this for your data source)
fluctuations: Fluctuations = load_your_market_data(...)

# Run the backtest
trades, final_portfolio = process_signals(
    signals=signals,
    risk_config=risk_config,
    fluctuations=fluctuations,
    initial_portfolio=initial_portfolio,
)

# Analyze results
print(f"Number of trades : {len(trades)}")
print(f"Final capital : {final_portfolio.get_available_capital_at(datetime(2023, 3, 1))}")
print(f"Win rate : {sum([1 for trade in trades if trade.total_profit > 0]) / len(trades)}")

Advanced Usage

Creating a Custom Strategy

You can define custom trading strategies by creating signals based on technical indicators or other market conditions:

from ptahlmud.types.signal import Signal, Side, Action

def moving_average_strategy(fluctuations, fast_period: int, slow_period: int) -> list[Signal]:
    """Simple moving average crossover strategy."""
    signals: list[Signal] = []

    # Calculate moving averages (simplified example)
    fast_ma = calculate_moving_average(fluctuations, fast_period)
    slow_ma = calculate_moving_average(fluctuations, slow_period)

    # Generate signals on crossovers
    for index, candle in enumerate(fluctuations.candles):
        # fast ma crossed above slow ma
        if fast_ma[index-1] < slow_ma[index-1] and fast_ma[index] > slow_ma[index]:
            signals.append(Signal(
                date=candle.close_time,
                side=Side.LONG,
                action=Action.ENTER
            ))

        # slow ma crossed bellow slow ma
        if fast_ma[index-1] > slow_ma[index-1] and fast_ma[index] < slow_ma[index]:
            signals.append(Signal(
                date=candle.close_time,
                side=Side.LONG,
                action=Action.EXIT
            ))

    return signals

signals = moving_average_strategy(market_date, fast_period=10, slow_period=30)
trades, final_portfolio = process_signals(
    signals=signals,
    fluctuations=market_date,
    risk_config=risk_config,
    initial_portfolio=initial_portfolio,
)

Development

It is recommended to work in a virtual environment, you can install pyenv with python >= 3.11.

pyenv install 3.12.5
pyenv virtualenv 3.12.5 ptahlmud
pyenv activate ptahlmud
# Clone the repository
git clone https://github.com/yourusername/ptahlmud.git
cd ptahlmud

Setup environment

make setup

Run tests

make test

Run code quality checks

make check

Contributing

Contributions are welcome! You can open an issue, submit a pull-request or simply chat with me. I'm always pleased to discuss design, performance or technical stuff.

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

ptahlmud-0.0.2.tar.gz (14.3 kB view details)

Uploaded Source

Built Distribution

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

ptahlmud-0.0.2-py3-none-any.whl (18.4 kB view details)

Uploaded Python 3

File details

Details for the file ptahlmud-0.0.2.tar.gz.

File metadata

  • Download URL: ptahlmud-0.0.2.tar.gz
  • Upload date:
  • Size: 14.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.3 CPython/3.12.10 Linux/6.11.0-1015-azure

File hashes

Hashes for ptahlmud-0.0.2.tar.gz
Algorithm Hash digest
SHA256 86d732e5465622bc8ec756d3eb212042b37c3d731b14713d951f1eb37050d61e
MD5 5048724f955ba55b54d785292d416770
BLAKE2b-256 f8d183e15f1a011dee6cbd12850f031b7521b04b2890a77dcad3b2e2f1559fa7

See more details on using hashes here.

File details

Details for the file ptahlmud-0.0.2-py3-none-any.whl.

File metadata

  • Download URL: ptahlmud-0.0.2-py3-none-any.whl
  • Upload date:
  • Size: 18.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.3 CPython/3.12.10 Linux/6.11.0-1015-azure

File hashes

Hashes for ptahlmud-0.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 8d45f0ac5fbbed2b5e37a3ecc7f9e9047e28185a8c0a6aeb67000226523cfd94
MD5 95a57d27c3d9ed7cce9ea0c6de04c27f
BLAKE2b-256 0bced053765556b2e02204b609408db6472c316abe8f1227e8b8fe195b1cb90c

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