The gap between "here's a great AI-picked portfolio" and "my brokerage account is actually holding it" is where most retail investors fall off. VelaDeck closes that gap for Alpaca users.
The problem: publishing a portfolio isn't the same as trading it
An AI strategy publishes its picks once a month. To actually own the portfolio you have to open your broker, punch in every ticker, size each position, and cross your fingers you didn't fat-finger anything. Miss a rebalance day and your holdings drift away from the model.
Most people skip it entirely. Or they do it manually for two months and then quietly stop.
What VelaDeck does
- **Ingest**: a background job pulls the composition of each supported
- strategy every day. It diffs against yesterday to produce a stream
- of BUY / SELL signals.
- **Plan**: for every user that has assigned USD to a strategy, we
- generate a planned order — sized by the USD notional the user
- picked, capped by an optional monthly limit.
- **Execute**: if you've opted into live trading, VelaDeck posts the
- order to Alpaca via OAuth or API keys. SELL uses your current
- position quantity (so we never over-sell); BUY uses notional
- (fractional shares supported).
Idempotency and safety
Every order gets a deterministic `client_order_id` derived from the signal id. If the executor runs twice on the same signal — say a cron double-fired — Alpaca's dedup mechanism rejects the duplicate and we mark the row as `sent_dedupe` instead of double-buying.
Live trading is off by default, and it's a per-user toggle you have to explicitly flip in Settings. The kill switch (`VELADECK_LIVE_TRADING` env var) also has to be on at the server level. Both need to be true before a single share is bought with real money.
What's next
Every VelaDeck strategy is monthly or quarterly, so the day after a rebalance you'll see new orders appear in your Alpaca account (paper or live) without touching anything. The dashboard shows the planned orders, the executed fills, your real positions, and a backtest of what your allocation blend would have done historically.