first comit
This commit is contained in:
178
README.md
Normal file
178
README.md
Normal 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.
|
||||
Reference in New Issue
Block a user