2025-06-05 08:48:33 +02:00

162 lines
4.8 KiB
Markdown

# MATLAB to Python Trading Algorithm Conversions
This directory contains Python implementations of various algorithmic trading strategies and utility functions originally written in MATLAB.
## Overview
The converted files include:
### Utility Functions
- `backshift.py` - Shift data backward in time
- `fwdshift.py` - Shift data forward in time
- `movingAvg.py` - Calculate moving averages
- `movingStd.py` - Calculate moving standard deviations
- `smartmean.py` - Mean calculation ignoring NaN/Inf values
- `smartstd.py` - Standard deviation ignoring NaN/Inf values
- `smartsum.py` - Sum calculation ignoring NaN/Inf values
- `smartMovingStd.py` - Moving standard deviation ignoring NaN/Inf values
- `calculateReturns.py` - Calculate returns from price series
- `calculateMaxDD.py` - Calculate maximum drawdown and duration
### Data Loading
- `data_loader.py` - Load converted CSV/JSON data files
- `convert_mat_files.py` - Convert .mat files to CSV/JSON format
### Trading Strategies
- `TU_mom.py` - Treasury futures momentum strategy
- `TU_mom_hypothesisTest.py` - Hypothesis testing for TU momentum strategy
- `kentdaniel.py` - Long-short equity momentum strategy
- `gapFutures_FSTX.py` - Gap trading strategy for futures
- `pead.py` - Post-earnings announcement drift strategy
## Installation
1. Install required dependencies:
```bash
pip install -r requirements.txt
```
2. Add the parent directory to your Python path or install as a package:
```python
import sys
sys.path.append('/path/to/algo_trading_book')
```
## Usage
### Using Utility Functions
```python
import numpy as np
from converted_code import backshift, smartmean, calculateReturns
# Example: Calculate returns
prices = np.array([100, 102, 101, 103, 105])
returns = calculateReturns(prices, 1)
print(returns)
# Example: Backshift data
shifted_prices = backshift(1, prices)
print(shifted_prices)
# Example: Smart mean (ignoring NaN)
data_with_nan = np.array([1, 2, np.nan, 4, 5])
mean_val = smartmean(data_with_nan)
print(mean_val)
```
### Loading Real Market Data
```python
from converted_code.data_loader import load_futures_data, load_stock_data, load_earnings_data
# Load Treasury futures data
tu_data = load_futures_data('TU', '20120813')
print(f"Loaded {len(tu_data['tday'])} days of TU data")
# Load stock data
stock_data = load_stock_data('20120424')
print(f"Stock data shape: {stock_data['cl'].shape}")
# Load earnings announcements
earnings = load_earnings_data()
print(f"Earnings data shape: {earnings['earnann'].shape}")
```
### Running Trading Strategies
```python
# Run TU momentum strategy
from converted_code.TU_mom import main as tu_mom_main
tu_mom_main()
# Run Kent Daniel momentum strategy
from converted_code.kentdaniel import main as kent_daniel_main
kent_daniel_main()
# Run PEAD strategy
from converted_code.pead import main as pead_main
pead_main()
```
## Important Notes
### Data Requirements
The implementations now support both **real market data** (from converted .mat files) and **synthetic data** for demonstration.
#### Real Data (Converted from .mat files)
- Located in `converted_code/data/` directory
- Includes futures, stocks, ETFs, and earnings data
- Automatically loaded by trading strategies
- CSV format for time series, JSON for metadata
#### Data Format
- **Prices**: 2D numpy arrays (time x assets)
- **Returns**: Same format as prices
- **Dates**: 1D array of date integers (YYYYMMDD format)
- **OHLC Data**: Separate arrays for Open, High, Low, Close
#### Available Datasets
- **Futures**: TU (Treasury), CL (Crude Oil), VX (VIX), HG (Copper), etc.
- **Stocks**: OHLC data for 500+ stocks
- **ETFs**: Exchange-traded fund data
- **Earnings**: Earnings announcement calendar
- **Interest Rates**: AUD and CAD interest rate data
### Converting Additional .mat Files
```python
# Run the conversion script to convert new .mat files
python convert_mat_files.py
```
## Performance Considerations
1. **Vectorization**: The code uses numpy vectorization for efficiency
2. **Memory Usage**: Large datasets may require chunked processing
3. **NaN Handling**: Smart functions handle NaN/Inf values gracefully
## Differences from MATLAB
1. **Indexing**: Python uses 0-based indexing vs MATLAB's 1-based
2. **Array Operations**: Uses numpy instead of MATLAB's matrix operations
3. **Function Names**: Some functions renamed for Python conventions
4. **Error Handling**: Added proper error handling and type checking
## Testing
Each strategy file can be run independently:
```bash
python converted_code/TU_mom.py
python converted_code/kentdaniel.py
python converted_code/pead.py
```
## Contributing
When adding new conversions:
1. Follow the existing code structure
2. Add proper docstrings
3. Include error handling
4. Use synthetic data for examples
5. Update this README
## License
This code is converted from the original MATLAB implementations for educational and research purposes.