From 7c71a047bcb753e8c7bd07f5b4fcae338d579809 Mon Sep 17 00:00:00 2001 From: Bill Date: Tue, 4 Nov 2025 22:49:01 -0500 Subject: [PATCH] fix: update position queries to use new trading_days schema Changes: - Update get_today_init_position_from_db to query trading_days table - Remove obsolete add_no_trade_record_to_db calls from BaseAgent - Simplify _handle_trading_result (trading_day record handles both scenarios) Root Cause: - Code was still querying old positions table after schema migration - The add_no_trade_record_to_db function is obsolete in new schema New Schema Behavior: - trading_day record created at session start (regardless of trading) - trading_day record updated at session end with final results - No separate "no-trade" record needed Impact: - Fixes: "no such table: positions" error in get_today_init_position_from_db - Removes unnecessary database writes for no-trade scenarios - Simplifies codebase by removing obsolete function calls Related: tools/price_tools.py:340-364, agent/base_agent/base_agent.py:661-673 --- agent/base_agent/base_agent.py | 21 +++------------------ tools/price_tools.py | 18 +++++++++--------- 2 files changed, 12 insertions(+), 27 deletions(-) diff --git a/agent/base_agent/base_agent.py b/agent/base_agent/base_agent.py index 6c1eb15..3bcf14f 100644 --- a/agent/base_agent/base_agent.py +++ b/agent/base_agent/base_agent.py @@ -660,8 +660,6 @@ Summary:""" async def _handle_trading_result(self, today_date: str) -> None: """Handle trading results with database writes.""" - from tools.price_tools import add_no_trade_record_to_db - if_trade = get_config_value("IF_TRADE") if if_trade: @@ -669,23 +667,10 @@ Summary:""" print("✅ Trading completed") else: print("📊 No trading, maintaining positions") - - # Get context from runtime config - job_id = get_config_value("JOB_ID") - session_id = self.context_injector.session_id if self.context_injector else None - - if not job_id or not session_id: - raise ValueError("Missing JOB_ID or session_id for no-trade record") - - # Write no-trade record to database - add_no_trade_record_to_db( - today_date, - self.signature, - job_id, - session_id - ) - write_config_value("IF_TRADE", False) + + # Note: In new schema, trading_day record is created at session start + # and updated at session end, so no separate no-trade record needed def register_agent(self) -> None: """Register new agent, create initial positions""" diff --git a/tools/price_tools.py b/tools/price_tools.py index 455f01c..b8f7e53 100644 --- a/tools/price_tools.py +++ b/tools/price_tools.py @@ -337,12 +337,12 @@ def get_today_init_position_from_db( cursor = conn.cursor() try: - # Get most recent position before today + # Get most recent trading day before today cursor.execute(""" - SELECT p.id, p.cash - FROM positions p - WHERE p.job_id = ? AND p.model = ? AND p.date < ? - ORDER BY p.date DESC, p.action_id DESC + SELECT id, ending_cash + FROM trading_days + WHERE job_id = ? AND model = ? AND date < ? + ORDER BY date DESC LIMIT 1 """, (job_id, modelname, today_date)) @@ -353,15 +353,15 @@ def get_today_init_position_from_db( logger.info(f"No previous position found for {modelname}, returning initial cash") return {"CASH": 10000.0} - position_id, cash = row + trading_day_id, cash = row position_dict = {"CASH": cash} - # Get holdings for this position + # Get holdings for this trading day cursor.execute(""" SELECT symbol, quantity FROM holdings - WHERE position_id = ? - """, (position_id,)) + WHERE trading_day_id = ? + """, (trading_day_id,)) for symbol, quantity in cursor.fetchall(): position_dict[symbol] = quantity