Initial commit: Gold Trading Simulator with AI-powered analysis
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
from fastapi import APIRouter, HTTPException, Query
|
||||
from typing import List
|
||||
from app.services.price_simulator import gold_simulator
|
||||
from app.schemas.schemas import PriceData, MarketDataResponse
|
||||
|
||||
router = APIRouter(prefix="/market", tags=["Market Data"])
|
||||
|
||||
|
||||
@router.get("/gold/current", response_model=MarketDataResponse)
|
||||
async def get_current_gold_price():
|
||||
"""Get current gold (XAU/USD) market data - simulated live feed"""
|
||||
try:
|
||||
# Get current simulated price
|
||||
current_price = gold_simulator.get_current_price()
|
||||
|
||||
# Generate recent data for 24h high/low calculation
|
||||
recent_data = gold_simulator.generate_historical_data(interval="60min", points=24)
|
||||
|
||||
if len(recent_data) > 0:
|
||||
# Calculate 24h stats
|
||||
high_24h = max(candle.high for candle in recent_data)
|
||||
low_24h = min(candle.low for candle in recent_data)
|
||||
|
||||
latest = recent_data[-1]
|
||||
previous = recent_data[-2] if len(recent_data) > 1 else latest
|
||||
|
||||
change = latest.close - previous.close
|
||||
change_percent = (change / previous.close) * 100
|
||||
|
||||
return MarketDataResponse(
|
||||
symbol="XAU/USD",
|
||||
price=current_price,
|
||||
change=change,
|
||||
change_percent=change_percent,
|
||||
high_24h=high_24h,
|
||||
low_24h=low_24h,
|
||||
volume=0.0,
|
||||
)
|
||||
else:
|
||||
raise HTTPException(status_code=500, detail="Unable to generate market data")
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=str(e))
|
||||
|
||||
|
||||
@router.get("/gold/history", response_model=List[PriceData])
|
||||
async def get_gold_historical_data(
|
||||
interval: str = Query("daily", description="Time interval: daily, 1min, 5min, 15min, 30min, 60min"),
|
||||
output_size: str = Query("compact", description="compact (100 points) or full (500 points)"),
|
||||
):
|
||||
"""Get historical gold (XAU/USD) price data - simulated"""
|
||||
try:
|
||||
# Determine number of points based on output_size
|
||||
points = 500 if output_size == "full" else 100
|
||||
|
||||
# Generate historical data using simulator
|
||||
data = gold_simulator.generate_historical_data(interval=interval, points=points)
|
||||
|
||||
return data
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=str(e))
|
||||
|
||||
|
||||
@router.get("/gold/live", response_model=PriceData)
|
||||
async def get_live_gold_price(
|
||||
interval: str = Query("1min", description="Time interval for rounding: 1min, 5min, 15min, 30min, 60min")
|
||||
):
|
||||
"""Get latest live gold price tick - simulated real-time feed (no external API calls)"""
|
||||
try:
|
||||
# Use the simulator to generate a live candle
|
||||
live_candle = gold_simulator.get_live_candle(interval=interval)
|
||||
return live_candle
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=str(e))
|
||||
Reference in New Issue
Block a user