
Four deliverables, four different failure modes
Alerts, backtests, dashboards and keys fail in different ways. Alerts miss or duplicate signals. Backtests produce numbers nobody can reproduce. Dashboards disagree with the exchange about the same metric. Keys carry the wrong permissions or sit under the wrong owner. A contract that only says 'build a quant tool' gives you nothing to check against, so write inputs, outputs and failure behavior for each block separately. This article covers software delivery only. It is not investment advice and says nothing about returns.
Alerts: triggers, deduplication, and an alert for when alerts break
Specify the data source, evaluation interval, cooldown and deduplication rule for every trigger. Ten copies of one signal in a minute is a defect, and so is a missed signal. If the channel is a Telegram bot, email or team chat, ask how rate limits are handled: queued, not silently dropped. Also require a heartbeat. When the feed disconnects or the process crashes, the system should say so, otherwise silence looks like 'no signal'. For acceptance, replay historical data and compare the number of triggers with what you expected.
Backtests: reproducibility comes before credibility
An equity curve alone is not a deliverable. Ask for the data source and adjustment method, fee and slippage assumptions, how fill prices are chosen, and confirmation that look-ahead bias was excluded. The same code, data and parameters must give identical results, and the report should ship with the parameter file and a data version. Separate in-sample from out-of-sample periods so you are not shown only the best-fitting window. Latency, liquidity and costs make live results differ, so the report should state what was simplified. Screenshots without runnable code and configuration cannot be verified.
Dashboards: fix metric definitions before the interface
The hard part is definition. Is return measured on cost or on net asset value? Is drawdown intraday or close-to-close? Do open orders count as positions? Write these down. Each panel should show its refresh time, and stale data should look stale. Decide whether the dashboard is read-only or can act. Read-only is low risk. Once it can place or cancel orders, you need authentication, an audit log and confirmation steps. The database or sheet permissions should belong to you, and the developer should not keep a standing back door after handover.
Key ownership: who creates, holds and can revoke
Keys should be created by you inside your own exchange account, and the developer should never need your main login. Grant the narrowest scope: read-only for backtests and dashboards, trading permission only if automated orders are required, and no withdrawal permission. Bind keys to the server's IP address where the exchange allows it. A Telegram bot token should come from BotFather under your own account. Servers, domains and repositories should also sit under your name. If the deliverable includes an Android app, state who owns the developer account used to publish it. Inject secrets through environment variables or a secret manager, never commit them, and agree a rotation plan.
Handover and when to stop
A full handover normally includes runnable source or a deployment package, configuration notes, deploy and rollback steps, test records and a key inventory. Whether you receive source code and under what license belongs in the contract, not in a later negotiation. Accept in two stages: first run with read-only keys and simulated data, then enable a small live scope. Pause or change vendors if they ask for withdrawal rights or main-account credentials, refuse to share backtest data and parameters, promise fixed returns, or keep all servers and accounts under their own name without a migration path. Those are control problems, not technical details.