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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ptahlmud-0.0.3.tar.gz.
File metadata
- Download URL: ptahlmud-0.0.3.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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0f574659403702b7c49204ab77ec33cf0c2d362623ecea197701f0a0e06b9ee9
|
|
| MD5 |
cdab41d12a3e8c82595e9c32ffb31f9a
|
|
| BLAKE2b-256 |
96d04f8514ed1a44ccbaa700100d6a029e0f2b9747f32089fc8168756bb39201
|
File details
Details for the file ptahlmud-0.0.3-py3-none-any.whl.
File metadata
- Download URL: ptahlmud-0.0.3-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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
08d734aa5761f141c086611787c4fe32fbbcca4e8aaebbc27eabb882d7c72cbb
|
|
| MD5 |
3aadf71bfcb116af13c870585a4b046f
|
|
| BLAKE2b-256 |
0f4ffa014df71699735c43e9452061751b6b0e04d4d8aaaf705837bad8158cee
|