This commit is contained in:
@@ -84,6 +84,23 @@ async def get_trades(isin: str = None, days: int = 7):
|
||||
"""
|
||||
|
||||
data = query_questdb(query)
|
||||
|
||||
# Fallback: Wenn analytics_exchange_daily leer ist, berechne direkt aus trades
|
||||
if not data or not data.get('dataset') or len(data.get('dataset', [])) == 0:
|
||||
logger.info(f"analytics_exchange_daily is empty, calculating from trades table")
|
||||
query = f"""
|
||||
select
|
||||
date_trunc('day', timestamp) as date,
|
||||
exchange,
|
||||
count(*) as trade_count,
|
||||
sum(price * quantity) as volume
|
||||
from trades
|
||||
where timestamp >= dateadd('d', -{days}, now())
|
||||
group by date, exchange
|
||||
order by date desc, exchange asc
|
||||
"""
|
||||
data = query_questdb(query)
|
||||
|
||||
return format_questdb_response(data)
|
||||
|
||||
@app.get("/api/metadata")
|
||||
@@ -118,6 +135,27 @@ async def get_summary(days: int = None):
|
||||
"""
|
||||
|
||||
data = query_questdb(query)
|
||||
|
||||
# Fallback: Wenn analytics_daily_summary leer ist, berechne direkt aus trades
|
||||
if not data or not data.get('dataset') or not data['dataset']:
|
||||
logger.info(f"analytics_daily_summary is empty, calculating from trades table")
|
||||
if days:
|
||||
query = f"""
|
||||
select
|
||||
count(*) as total_trades,
|
||||
sum(price * quantity) as total_volume
|
||||
from trades
|
||||
where timestamp >= dateadd('d', -{days}, now())
|
||||
"""
|
||||
else:
|
||||
query = """
|
||||
select
|
||||
count(*) as total_trades,
|
||||
sum(price * quantity) as total_volume
|
||||
from trades
|
||||
"""
|
||||
data = query_questdb(query)
|
||||
|
||||
if data and data.get('dataset') and data['dataset']:
|
||||
total_trades = data['dataset'][0][0] if data['dataset'][0][0] else 0
|
||||
total_volume = data['dataset'][0][1] if data['dataset'][0][1] else 0.0
|
||||
@@ -337,6 +375,27 @@ async def get_moving_average(days: int = 7, exchange: str = None):
|
||||
query += " order by date asc, exchange asc"
|
||||
|
||||
data = query_questdb(query, timeout=5)
|
||||
|
||||
# Fallback: Wenn analytics_exchange_daily leer ist, berechne direkt aus trades
|
||||
if not data or not data.get('dataset') or len(data.get('dataset', [])) == 0:
|
||||
logger.info(f"analytics_exchange_daily is empty, calculating moving average from trades table")
|
||||
# Berechne Moving Average direkt aus trades (vereinfacht, ohne echte MA-Berechnung)
|
||||
query = f"""
|
||||
select
|
||||
date_trunc('day', timestamp) as date,
|
||||
exchange,
|
||||
count(*) as trade_count,
|
||||
sum(price * quantity) as volume,
|
||||
count(*) as ma_count,
|
||||
sum(price * quantity) as ma_volume
|
||||
from trades
|
||||
where timestamp >= dateadd('d', -{days}, now())
|
||||
"""
|
||||
if exchange:
|
||||
query += f" and exchange = '{exchange}'"
|
||||
query += " group by date, exchange order by date asc, exchange asc"
|
||||
data = query_questdb(query, timeout=10)
|
||||
|
||||
return format_questdb_response(data)
|
||||
|
||||
@app.get("/api/statistics/volume-changes")
|
||||
|
||||
Reference in New Issue
Block a user