fix: Correct trade summary calculations for buy and sell directions

This commit is contained in:
Bobby (aider) 2025-02-13 08:29:01 -08:00
parent e60f18e41a
commit bc064fc011

View File

@ -300,8 +300,15 @@ def get_position_summary(ticker: str) -> dict:
query = f"""
SELECT
position_id,
sum(shares) as total_shares,
sum(shares * entry_price) / sum(shares) as avg_entry_price,
sum(CASE WHEN direction = 'buy' THEN shares
WHEN direction = 'sell' THEN -shares
ELSE 0 END) as total_shares,
sum(CASE WHEN direction = 'buy' THEN shares * entry_price
WHEN direction = 'sell' THEN -shares * entry_price
ELSE 0 END) /
abs(sum(CASE WHEN direction = 'buy' THEN shares
WHEN direction = 'sell' THEN -shares
ELSE 0 END)) as avg_entry_price,
min(entry_date) as first_entry,
max(entry_date) as last_entry,
count() as num_orders,
@ -312,6 +319,7 @@ def get_position_summary(ticker: str) -> dict:
WHERE ticker = '{ticker}'
AND exit_price IS NULL
GROUP BY position_id
HAVING total_shares > 0
ORDER BY first_entry DESC
"""
result = client.query(query).result_rows
@ -447,8 +455,15 @@ def get_open_trades_summary() -> dict:
query = """
SELECT
ticker,
sum(shares) as total_shares,
sum(shares * entry_price) / sum(shares) as avg_entry_price,
sum(CASE WHEN direction = 'buy' THEN shares
WHEN direction = 'sell' THEN -shares
ELSE 0 END) as total_shares,
sum(CASE WHEN direction = 'buy' THEN shares * entry_price
WHEN direction = 'sell' THEN -shares * entry_price
ELSE 0 END) /
abs(sum(CASE WHEN direction = 'buy' THEN shares
WHEN direction = 'sell' THEN -shares
ELSE 0 END)) as avg_entry_price,
min(entry_date) as first_entry,
max(entry_date) as last_entry,
count() as num_orders,
@ -456,6 +471,7 @@ def get_open_trades_summary() -> dict:
FROM stock_db.trades
WHERE exit_price IS NULL
GROUP BY ticker
HAVING total_shares > 0
ORDER BY ticker ASC
"""
result = client.query(query).result_rows