Stabilize scheduler and pause paper run cycle when paper auth invalid to prevent failure floods

This commit is contained in:
2026-03-01 01:48:22 -08:00
parent 33556c583b
commit fee413a852

40
bot.py
View File

@@ -13,6 +13,7 @@ from services import (
place_order, place_order,
market_open, market_open,
positions_snapshot, positions_snapshot,
account_snapshot,
qdrant_similar, qdrant_similar,
qdrant_add_memory, qdrant_add_memory,
trilium_log, trilium_log,
@@ -43,6 +44,12 @@ def curate_cycle():
def run_cycle(): def run_cycle():
db = SessionLocal() db = SessionLocal()
try: try:
acct = account_snapshot()
# If paper credentials are invalid/missing, avoid flooding failed decisions.
if settings.paper_mode and not acct.get('id'):
trilium_log('Bot paused: paper auth invalid', 'Paper mode enabled but Alpaca paper account auth failed. Skipping run_cycle to avoid false failures.')
return
if not market_open() and not (settings.paper_mode and settings.force_paper_trades): if not market_open() and not (settings.paper_mode and settings.force_paper_trades):
return return
spent = _daily_spent(db) spent = _daily_spent(db)
@@ -149,9 +156,36 @@ def run_cycle():
def start_scheduler(): def start_scheduler():
scheduler.add_job(curate_cycle, "interval", minutes=settings.curate_interval_minutes, id="curate_cycle", replace_existing=True) scheduler.add_job(
curate_cycle,
"interval",
minutes=settings.curate_interval_minutes,
id="curate_cycle",
replace_existing=True,
coalesce=True,
max_instances=1,
misfire_grace_time=120,
)
if settings.trade_interval_minutes and settings.trade_interval_minutes > 0: if settings.trade_interval_minutes and settings.trade_interval_minutes > 0:
scheduler.add_job(run_cycle, "interval", minutes=settings.trade_interval_minutes, id="trade_cycle", replace_existing=True) scheduler.add_job(
run_cycle,
"interval",
minutes=settings.trade_interval_minutes,
id="trade_cycle",
replace_existing=True,
coalesce=True,
max_instances=1,
misfire_grace_time=120,
)
else: else:
scheduler.add_job(run_cycle, "interval", hours=settings.trade_interval_hours, id="trade_cycle", replace_existing=True) scheduler.add_job(
run_cycle,
"interval",
hours=settings.trade_interval_hours,
id="trade_cycle",
replace_existing=True,
coalesce=True,
max_instances=1,
misfire_grace_time=120,
)
scheduler.start() scheduler.start()