39875112a0
Python bot (bot/alpaclaudia): alpaca-py client, wheel strategy (CSP + covered calls) plus equity trailing stops, risk gates (cash buffer, cost-basis guard, per-symbol concentration cap), SQLite state log, Typer CLI (tick/loop/status/ report/dump-state), Discord daily report, pytest suite. Next.js 14 dashboard (dashboard/): read-only — reads the bot's SQLite directly and pulls live account/positions/orders from Alpaca. KPIs, equity chart, positions, bot-intents audit table, and orders table. Dark UI with Tailwind. systemd/: user-unit templates for the polling loop and the post-close report timer. docs/STRATEGY.md: wheel mechanics, risk invariants, later candidates. Defaults to BOT_MODE=dry — nothing is submitted to Alpaca until explicitly enabled in .env. ALPACA_ENV=paper by default; flipping to live requires an explicit second guard.
alpaclaudia — systemd units
Install as user units (no root needed):
mkdir -p ~/.config/systemd/user
cp ~/finhacks/systemd/alpaclaudia-*.{service,timer} ~/.config/systemd/user/
systemctl --user daemon-reload
systemctl --user enable --now alpaclaudia-loop.service
systemctl --user enable --now alpaclaudia-report.timer
loginctl enable-linger $USER # so services keep running after logout
Status / logs:
systemctl --user status alpaclaudia-loop
journalctl --user -u alpaclaudia-loop -f
systemctl --user list-timers | grep alpaclaudia
Switching to live mode:
# in ~/finhacks/.env set BOT_MODE=live (ALPACA_ENV stays "paper" for paper acct)
systemctl --user restart alpaclaudia-loop