first comit

This commit is contained in:
zastian-dev
2026-02-09 19:20:47 +00:00
commit 79625743bd
24 changed files with 8726 additions and 0 deletions

178
README.md Normal file
View File

@@ -0,0 +1,178 @@
# invest-bot: Tech Giants Trading Bot
## Algorithmic trading system using Alpaca API
`invest-bot` is a sophisticated algorithmic trading bot designed to trade a diversified portfolio of 50 "Tech Giants" stocks. It employs a hybrid strategy combining momentum and mean-reversion principles, leveraging various technical indicators to generate precise trade signals. The bot supports both live paper trading and extensive backtesting with historical data, complete with a real-time web dashboard for monitoring performance.
## Table of Contents
- [Features](#features)
- [Getting Started](#getting-started)
- [Prerequisites](#prerequisites)
- [Installation](#installation)
- [Configuration](#configuration)
- [Usage](#usage)
- [Live Trading](#live-trading)
- [Backtesting](#backtesting)
- [Web Dashboard](#web-dashboard)
- [Strategy Overview](#strategy-overview)
- [Technology Stack](#technology-stack)
- [Contributing](#contributing)
- [License](#license)
- [Acknowledgements](#acknowledgements)
## Features
- **Hybrid Trading Strategy**: Combines momentum and mean-reversion logic for robust signal generation.
- **Multi-Indicator Analysis**: Utilizes a suite of technical indicators including:
- Relative Strength Index (RSI)
- Moving Average Convergence Divergence (MACD)
- Exponential Moving Averages (EMA)
- Average Directional Index (ADX)
- Bollinger Bands
- Custom Momentum Indicators
- **Live Paper Trading**: Execute trades in a simulated environment using the Alpaca API, without risking real capital.
- **Comprehensive Backtesting**: Test the strategy against historical data over custom periods (years, months) and initial capital.
- **Real-time Web Dashboard**: Monitor portfolio performance, account statistics, and open positions through a responsive web interface.
- **Configurable Timeframes**: Run the bot on `Daily` or `Hourly` data bars.
- **Robust Logging**: Detailed logging for both console and file, aiding in monitoring and debugging.
- **Error Handling & Rate Limiting**: Graceful error management and adherence to API rate limits for stable operation.
## Getting Started
Follow these instructions to set up and run the `invest-bot`.
### Prerequisites
- [Rust](https://www.rust-lang.org/tools/install) (latest stable version recommended)
- [Alpaca API Key and Secret Key](https://alpaca.markets/) (for paper trading)
### Installation
1. **Clone the repository:**
```bash
git clone https://github.com/your-username/invest-bot.git
cd invest-bot
```
2. **Build the project:**
```bash
cargo build --release
```
This will compile the optimized release binary in `target/release/invest-bot`.
### Configuration
The bot requires API credentials and can be configured via environment variables. Create a `.env` file in the project root directory:
```
ALPACA_API_KEY=YOUR_ALPACA_API_KEY
ALPACA_SECRET_KEY=YOUR_ALPACA_SECRET_KEY
DASHBOARD_PORT=5000 # Optional: Customize the dashboard port
```
**Note:** Replace `YOUR_ALPACA_API_KEY` and `YOUR_ALPACA_SECRET_KEY` with your actual Alpaca paper trading API keys.
## Usage
### Live Trading
To run the bot in live paper trading mode:
```bash
cargo run --release
# Or, if you have built the release binary:
# ./target/release/invest-bot
```
By default, the bot runs with `Daily` timeframe bars. To specify `Hourly` bars:
```bash
cargo run --release -- --timeframe hourly
```
The bot will continuously analyze the market during trading hours, execute trades, and update the dashboard.
### Backtesting
To backtest the strategy with historical data, use the `--backtest` flag. You can specify the duration (years/months) and initial capital.
- **Backtest for 3 years (default capital):**
```bash
cargo run --release -- --backtest --years 3
```
- **Backtest for 5 years with custom capital:**
```bash
cargo run --release -- --backtest --years 5 --capital 50000
```
- **Combine years and months:**
```bash
cargo run --release -- --backtest --years 1 --months 6
```
- **Hourly timeframe backtest:**
```bash
cargo run --release -- --backtest --years 1 --timeframe hourly
```
Backtest results, including equity curve and trades, will be saved to `backtest_equity_curve.csv` and `backtest_trades.csv` respectively.
### Web Dashboard
When running in live trading mode, a real-time web dashboard is automatically started. Access it in your browser at:
```
http://localhost:5000
```
(or your custom `DASHBOARD_PORT`). The dashboard displays:
- Account summary (portfolio value, cash, buying power)
- Real-time portfolio performance graph
- Current open positions
## Strategy Overview
The `invest-bot` utilizes a dynamic hybrid strategy. It identifies potential trades using a combination of:
- **RSI (Relative Strength Index):** To gauge overbought/oversold conditions and mean-reversion opportunities.
- **MACD (Moving Average Convergence Divergence):** For trend identification and reversals.
- **EMA (Exponential Moving Averages):** To determine short-term and long-term trends.
- **ADX (Average Directional Index):** To measure trend strength.
- **Bollinger Bands:** To identify volatility and potential price breakouts/reversals.
- **Momentum:** Custom indicators to capture price acceleration.
Risk management includes position sizing based on portfolio value and buying power, with integrated stop-loss and take-profit mechanisms.
## Technology Stack
- **Rust**: Primary programming language for performance and safety.
- **Tokio**: Asynchronous runtime for concurrent operations (e.g., API calls, dashboard).
- **Alpaca API**: For market data, account information, and trade execution (paper trading).
- **Axum**: Web framework for building the real-time dashboard.
- **Chart.js**: JavaScript library for interactive chart visualization on the dashboard.
- **Serde**: Rust serialization/deserialization framework for JSON and CSV.
- **Clap**: Command-line argument parser for a user-friendly CLI.
- **Dotenvy**: For managing environment variables.
- **Tracing**: Structured logging framework.
## Contributing
Contributions are welcome! Please feel free to open an issue or submit a pull request.
## License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details (if applicable).
## Acknowledgements
- [Alpaca.markets](https://alpaca.markets/) for their accessible trading API.
- [Rust Community](https://www.rust-lang.org/) for an amazing language and ecosystem.
- [Chart.js](https://www.chartjs.org/) for the powerful charting library.