# Simulated Live Price Feed - No API Keys Required! 🎉

## Overview

The gold trading simulator now uses a **fully simulated price feed** that requires **NO external API calls** and **NO API keys**! 

### ✅ What Changed

- **Before**: Required Alpha Vantage API key, hit rate limits, slow responses
- **After**: Self-contained simulator with instant responses, no limits, no costs

## Features

### 🎯 Realistic Price Simulation

The `GoldPriceSimulator` class provides:

- **Geometric Brownian Motion**: Realistic random walk price movements
- **Trend Simulation**: Periods of uptrends and downtrends
- **Mean Reversion**: Prices naturally gravitate toward base price
- **Volatility**: Configurable price volatility (default 0.08% per tick)
- **Smooth Continuity**: Prices evolve continuously, not randomly jumping

### 📊 Generated Data

1. **Historical Data**: Generate any amount of historical OHLC candles
   - Daily, hourly, or intraday intervals (1min, 5min, 15min, 30min, 60min)
   - 100 or 500 data points
   - Fully deterministic yet realistic

2. **Live Price Feed**: Real-time simulated price ticks
   - Updates continuously based on simulator state
   - Aligned to selected timeframe intervals
   - Always provides timestamps newer than historical data

3. **Current Price**: Instant spot price
   - Evolves using Brownian motion
   - Includes 24h high/low/change calculations

## How It Works

### Price Evolution

```
Current Price = Previous Price + (Drift + Random Shock + Trend + Mean Reversion)
```

- **Drift**: Slight upward bias (0.001%)
- **Random Shock**: Gaussian noise scaled by volatility
- **Trend**: Periodic directional movement (changes every 50-200 ticks)
- **Mean Reversion**: Pulls price back toward base (prevents runaway prices)

### Bounds

Prices stay within 80-120% of the base price (currently $2,650/oz):
- **Min**: $2,120
- **Max**: $3,180

This prevents unrealistic price explosions while allowing meaningful movements.

## API Endpoints

### 1. Current Price
```bash
GET /api/market/gold/current
```

Returns current spot price with 24h stats - **NO API KEY NEEDED**

Response:
```json
{
  "symbol": "XAU/USD",
  "price": 2658.42,
  "change": 12.50,
  "change_percent": 0.47,
  "high_24h": 2665.80,
  "low_24h": 2640.15,
  "volume": 0.0
}
```

### 2. Historical Data
```bash
GET /api/market/gold/history?interval=5min&output_size=compact
```

Parameters:
- `interval`: `daily`, `1min`, `5min`, `15min`, `30min`, `60min`
- `output_size`: `compact` (100 points) or `full` (500 points)

Returns array of OHLC candles - **INSTANT RESPONSE, NO RATE LIMITS**

### 3. Live Price Feed
```bash
GET /api/market/gold/live?interval=5min
```

Parameters:
- `interval`: Matches your chart timeframe (`1min`, `5min`, etc.)

Returns single live candle with timestamp aligned to interval - **UPDATES EVERY REQUEST**

## Starting the Backend

### Method 1: Using the startup script
```bash
cd backend
./start.sh
```

### Method 2: Manual start
```bash
cd backend
source ../.venv/bin/activate
PYTHONPATH=$(pwd) python -m uvicorn app.main:app --reload --port 8000
```

### Method 3: Docker (if configured)
```bash
docker-compose up backend
```

## Configuration

### Adjusting Base Price

Edit `/backend/app/services/price_simulator.py`:

```python
# Change initial price (default: $2650/oz)
gold_simulator = GoldPriceSimulator(initial_price=2800.0)
```

### Adjusting Volatility

```python
self.volatility = 0.0008  # Default: 0.08% per tick
# Increase for more volatile prices:
self.volatility = 0.0015  # 0.15% per tick
```

### Adjusting Trend Behavior

```python
self.max_trend_duration = 100  # Ticks before trend change
self.trend_strength = 0.0001   # Strength of trends
```

## Frontend Integration

The frontend automatically uses the simulated feed:

1. **Historical data loads** on chart mount
2. **Live updates poll** every 10 seconds (only for intraday timeframes)
3. **Timestamps are validated** to prevent conflicts
4. **No configuration needed** - it just works!

### Live Update Behavior

- **Daily/Weekly views**: Live updates **disabled** (historical data only)
- **Intraday views** (1min-60min): Live updates **enabled** with green badge
- **Timeframe switching**: Seamlessly transitions between modes

## Advantages

### ✅ No External Dependencies
- No API keys to configure
- No rate limits to worry about
- No network latency
- No third-party service downtime

### ✅ Perfect for Development
- Instant responses
- Predictable behavior
- Easy to test
- No costs

### ✅ Realistic Data
- Smooth price movements
- Trending behavior
- Mean reversion
- Proper OHLC candles

### ✅ Production Ready
- Stateful simulator (prices evolve continuously)
- Thread-safe implementation
- Configurable parameters
- Extensible architecture

## Future Enhancements

- [ ] Save/load simulator state for consistent sessions
- [ ] Add major economic events that impact price
- [ ] Implement weekend/holiday price gaps
- [ ] Add correlation with other assets (USD index, S&P 500)
- [ ] Configurable volatility regimes (calm vs volatile periods)
- [ ] News-driven price shocks
- [ ] User-adjustable parameters via API

## Testing

Test all endpoints:

```bash
# Current price
curl "http://localhost:8000/api/market/gold/current"

# Historical data (daily)
curl "http://localhost:8000/api/market/gold/history?interval=daily&output_size=compact"

# Historical data (5min intraday)
curl "http://localhost:8000/api/market/gold/history?interval=5min&output_size=compact"

# Live price feed (1min)
curl "http://localhost:8000/api/market/gold/live?interval=1min"

# Live price feed (5min)
curl "http://localhost:8000/api/market/gold/live?interval=5min"
```

All should return instant responses with realistic gold prices!

## Summary

🎉 **You now have a fully functional simulated live price feed!**

- ✅ No API keys required
- ✅ No rate limits
- ✅ Instant responses
- ✅ Realistic price behavior
- ✅ Works for all timeframes
- ✅ Live updates every 10 seconds
- ✅ Production ready

Just start the backend and frontend - everything works out of the box!
