From b4a645cf01e975494ba2d37a824223070d788e69 Mon Sep 17 00:00:00 2001 From: Justin Oros Date: Thu, 12 Feb 2026 09:42:21 -0700 Subject: [PATCH] refactor: replace position check error with friendly 'No open positions found' message --- alpaca_trader/api.py | 9 ++++++++- alpaca_trader/engine.py | 4 +++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/alpaca_trader/api.py b/alpaca_trader/api.py index 7c58adc..37916b8 100644 --- a/alpaca_trader/api.py +++ b/alpaca_trader/api.py @@ -1,7 +1,14 @@ import time +import logging import backoff import alpaca_trade_api as tradeapi +logging.getLogger('backoff').setLevel(logging.CRITICAL) + + +def _is_position_not_found(e): + return isinstance(e, tradeapi.rest.APIError) and "position does not exist" in str(e) + class AlpacaClient: def __init__(self, api_key_id, api_secret_key, base_url, api_version="v2"): @@ -50,7 +57,7 @@ class AlpacaClient: def close_all_positions(self): return self.api.close_all_positions() - @backoff.on_exception(backoff.expo, (tradeapi.rest.APIError, ConnectionError), max_tries=5, jitter=backoff.full_jitter) + @backoff.on_exception(backoff.expo, (tradeapi.rest.APIError, ConnectionError), max_tries=5, jitter=backoff.full_jitter, giveup=_is_position_not_found) def get_position(self, symbol): return self.api.get_position(symbol) diff --git a/alpaca_trader/engine.py b/alpaca_trader/engine.py index 1dfbb06..61ce300 100644 --- a/alpaca_trader/engine.py +++ b/alpaca_trader/engine.py @@ -1327,6 +1327,7 @@ def main(): max_intraday_drawdown = 0 last_indicator_log = datetime.now(EASTERN) + logger.info("🔎 Checking for existing positions...") try: existing_position = api.get_position(SYMBOL) qty = float(existing_position.qty) @@ -1360,7 +1361,8 @@ def main(): if USE_TRAILING_STOP: position_state.trailing_stop = stop_loss except Exception as e: - debug_print(f"No existing position found or error during recovery: {e}") + logger.info("🔎 No open positions found") + debug_logger.debug(f"Position check exception: {e}") retry_count = 0 max_retries = 3