EETC Utils Library
Project description
EETC Utils
A Python library providing reusable utilities for financial analysis and algorithmic trading. Built by East Empire Trading Company for quantitative finance and trading strategy development.
Features
Finance Utilities
- Quantitative Finance Functions: Kelly Criterion, DCF valuation, volatility forecasting
- GARCH Models: Advanced volatility analysis using ARCH library integration
- OHLC Data Manipulation: Tools for working with time-series price data
API Clients
- EETC Data Hub Client: Fetch price data, fundamentals, macroeconomic indicators, and order history
- EETC Notifications Client: Send trade updates and notifications to Telegram channels
Strategy Framework
- Live Trading: Abstract base classes for implementing live/paper trading strategies
- Execution Engine: Production-ready engine for running trading strategies
- Backtesting Framework: Complete backtesting suite with broker simulation, performance metrics, and result persistence
Installation
pip install eetc-utils
Quick Start
Finance Utilities
from src.eetc_utils.finance import (
optimal_leverage_kelly_criterion,
dcf_valuation,
forecast_volatility_garch
)
# Calculate optimal leverage using Kelly Criterion
leverage = optimal_leverage_kelly_criterion(
win_rate=0.55,
avg_win=0.02,
avg_loss=0.01
)
# DCF valuation
intrinsic_value = dcf_valuation(
free_cash_flows=[100, 110, 121],
discount_rate=0.10,
terminal_growth_rate=0.03
)
# Forecast volatility using GARCH
volatility = forecast_volatility_garch(returns_series, horizon=5)
EETC Data Hub Client
from src.eetc_utils.clients.eetc_data import EETCDataClient
import os
# Initialize client (requires EETC_API_KEY environment variable)
client = EETCDataClient(api_key=os.getenv("EETC_API_KEY"))
# Fetch price data
price_data = client.get_price_data(symbol="AAPL", start_date="2024-01-01")
# Get fundamentals
fundamentals = client.get_fundamentals(symbol="AAPL")
# Fetch macroeconomic indicators
macro_data = client.get_macro_indicators(indicator="GDP", country="US")
EETC Notifications Manager Client
from src.eetc_utils.clients.eetc_notifications import EETCNotificationsClient
import os
# Initialize client (requires EETC_API_KEY environment variable)
client = EETCNotificationsClient(api_key=os.getenv("EETC_API_KEY"))
# Send trade update via Telegram
client.send_trade_update_to_telegram(msg="Shorted TSLA x100 at 1312.69.")
Backtesting Framework
from src.eetc_utils.strategy.backtesting.strategy import Strategy
from src.eetc_utils.strategy.backtesting.engine import BacktestEngine
import pandas as pd
class MyStrategy(Strategy):
def on_start(self, context):
self.position = 0
def on_data(self, bar, context):
# Simple moving average crossover
if len(self.data) < 20:
return
sma_short = self.data['close'].tail(5).mean()
sma_long = self.data['close'].tail(20).mean()
if sma_short > sma_long and self.position == 0:
context['place_order']('buy', quantity=100)
self.position = 100
elif sma_short < sma_long and self.position > 0:
context['place_order']('sell', quantity=100)
self.position = 0
def on_stop(self, context):
pass
# Load historical data
data = pd.read_csv("AAPL_historical.csv")
# Run backtest
engine = BacktestEngine(
strategy=MyStrategy(),
data=data,
symbol="AAPL",
initial_capital=100000,
commission=0.001
)
results = engine.run()
print(f"Total Return: {results['total_return']:.2%}")
print(f"Sharpe Ratio: {results['sharpe_ratio']:.2f}")
print(f"Max Drawdown: {results['max_drawdown']:.2%}")
Documentation
Module Structure
src/eetc_utils/
├── finance.py # Quantitative finance utilities
├── clients/
│ ├── eetc_data.py # EETC Data Hub API client
│ └── eetc_notifications.py # Notifications client
└── strategy/
├── strategy.py # Live trading strategy base class
├── engine.py # Live trading execution engine
└── backtesting/
├── strategy.py # Backtesting strategy base class
├── engine.py # Backtesting engine
├── broker_sim.py # Broker simulator
└── metrics.py # Performance metrics
Key Classes
Finance Module (finance.py)
optimal_leverage_kelly_criterion(): Calculate optimal position sizingdcf_valuation(): Discounted cash flow valuationforecast_volatility_garch(): GARCH-based volatility forecasting- Various OHLC data manipulation utilities
API Clients
- EETCDataClient: HTTP client for fetching market data and fundamentals
- EETCNotificationsClient: Send trading notifications via Telegram
Strategy Framework
- Live Trading:
Strategy(ABC) for implementing live strategies - Backtesting: Simplified
Strategyclass withon_start(),on_data(),on_stop()lifecycle - Engines: Orchestrate strategy execution (live or backtest)
- BrokerSim: Simulate order execution with configurable slippage and commission
- Metrics: Calculate Sharpe ratio, max drawdown, and other performance statistics
Development
Prerequisites
- Python 3.12+
- Poetry (for dependency management)
Setup
# Install system dependencies
sudo apt-get install build-essential
# Install Python dependencies
make update_and_install_python_requirements
Code Formatting
make reformat_code # Uses black for consistent code style
Testing
# Run all tests
python -m pytest tests/
# Run specific test file
python -m pytest tests/test_financials.py
# Run with coverage
python -m pytest tests/ --cov=src/eetc_utils
Publishing to PyPI
-
Update version in
pyproject.toml:- Increment
versionfield in[tool.poetry]section - Update dependencies in
[tool.poetry.dependencies]if needed
- Increment
-
Build the package:
python -m build
-
Test on PyPI Test:
make publish_package_on_pypi_test -
Publish to production PyPI:
make publish_package_on_pypi
Configuration
Environment Variables
EETC_API_KEY: API key for EETC Data Hub client (required for data access)
Contributing
Contributions are welcome! Please ensure:
- Code follows the project's style guide (enforced by
black) - All tests pass before submitting PR
- New features include appropriate tests
- Documentation is updated for API changes
License
This project is licensed under the MIT License - see the LICENSE file for details.
Authors
- East Empire Trading Company - eastempiretradingcompany2019@gmail.com
- Stefan Delic - einfach.jung1@gmail.com
- Milos Dovedan - dovedanmilosh@gmail.com
Links
- Homepage: https://github.com/east-empire-trading-company/eetc-utils
- PyPI: https://pypi.org/project/eetc-utils/
- Bug Tracker: https://github.com/east-empire-trading-company/eetc-utils/issues
Support
For questions, issues, or feature requests, please open an issue on GitHub.
Project details
Release history Release notifications | RSS feed
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 eetc_utils-1.1.0.tar.gz.
File metadata
- Download URL: eetc_utils-1.1.0.tar.gz
- Upload date:
- Size: 15.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.2.1 CPython/3.12.3 Linux/6.8.0-87-generic
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
485000c2131b63701e1eb863baeb5826d6ff09f5692638747afef6ae2c6045eb
|
|
| MD5 |
ec705d417dada6721e3b84170794433e
|
|
| BLAKE2b-256 |
da4f9dda179183355989cf33ba39fac5be64e5908ccf746db29518fdb096aced
|
File details
Details for the file eetc_utils-1.1.0-py3-none-any.whl.
File metadata
- Download URL: eetc_utils-1.1.0-py3-none-any.whl
- Upload date:
- Size: 17.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.2.1 CPython/3.12.3 Linux/6.8.0-87-generic
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c51de1b41818f90423b1cda0955d830288fa6a6c1e12e48bf1f935a6a3e5f4c7
|
|
| MD5 |
0bd1c30d9f0da950d2ed966055dba49c
|
|
| BLAKE2b-256 |
3e671e48ded141ff9fd39e1776b304861361cf6358abd94e471d3696417062cd
|