Known limitations
What strikeabox does not do, or does only partly. If something else bites you, please open an issue.
Product
- The hosted app runs Live on testnet. Its practice board uses Strike mainnet's public prices, but Live orders execute on testnet, with no real funds. Mainnet execution is off unless a deployment sets
STRIKE_NETWORK=mainnetandLIVE_MAINNET_ENABLED=true. Practice credits can never be cashed out. - Calibration is a small sample. Practice multipliers take the higher of a random-walk model and an empirical touch rate from the last 30 minutes of recorded prices. The measured results come from about five hours of Strike mainnet prices recorded on one afternoon (with an earlier, shorter testnet run for comparison), with overlapping samples that are correlated. They describe those hours, not the future, and not a guarantee. See Fairness and calibration.
- The empirical estimate learns from the last 30 minutes only. A change in how the market behaves shows up in the quotes with a delay.
- One price source. Practice depends on Strike's mark-price stream. When it stops, taps stop and undecided boxes are voided. A tick that fails the quality checks (bad price, a timestamp more than 2 s ahead or 10 min behind, a 1.5 % jump, a 5 % mark/index gap) is treated like a gap, so a box that only that tick could have decided is voided and refunded. If Strike's clock drifts more than 2 s from the server's, the market is stale until it recovers.
- Raw ticks are pruned. They are kept for at least 24 hours (7 days by default). Settled boxes keep their own evidence, so receipts and replays still work.
- Three markets. BTC-USD, ETH-USD and SOL-USD. ADA-USD is excluded because its order rules on testnet make live orders impossible.
- Guest accounts are tied to one browser. No email or password recovery: clearing site data loses the account.
Live mode
- Thin testnet liquidity. Testnet books are often too thin for the liquidity gate, so markets are closed for Live entries (for long and short alike, with the reason shown), and entries can end
NOT_FILLED. The gate reads the best bid and ask from a public stream plus a REST snapshot every 5 s, and the resting size from the order-book copy; a best bid and ask older than 10 s, or a stale copy, closes it. - Partial fills are common. The entry's limit is the best opposite price, so only the orders resting at that price can fill it. On a thin book the expected fill is often partial; the box then holds what filled.
- Live mode's price line is short-lived when the networks differ. The execution network's mark prices are kept in memory by each api instance for 15 minutes. After a restart the line starts from the restart, and two instances can show slightly different lines. It is display only: nothing is settled from it.
- Deeper book levels lag a little. Strike's depth stream covers the 20 best levels of each side; the levels below them come from a REST snapshot read every 2 s, which Strike may serve from a cache a few seconds old.
- One live box per market. At most 3 open boxes in total, one per market, and none on a market where your Strike account already holds a position.
- Costs vs box size. Strike fees, the builder fee and the spread are often larger than the move to a box's target, so a target hit can be a net loss.
- Setup required. Live mode needs a registered Strike builder code,
KEY_ENCRYPTION_KEY,LIVE_TRADING_ENABLED=true(andLIVE_MAINNET_ENABLED=trueon mainnet), and, per user, a funded Strike account. Without them the app says why Live mode is unavailable. - Live is tested against a mock. The automated tests run Live mode against the mock Strike. A live box end to end on real Strike needs a registered builder code and a funded wallet, so it is not part of the automated tests.
- Close can fail. If the time-exit close fails after escalating retries, the position stays open on Strike (
CLOSE_FAILED) and the user must close it in the Strike app. strikeabox then places a best-effort reduce-only protective stop on the box's own remaining position, but that is not a substitute for closing it. - The kill switch only blocks new entries.
LIVE_TRADING_ENABLED=falsestops new connections and new entries. Reconciliation, deadline exits, user closes and disconnecting keep running. - No idempotency at Strike for client order ids. strikeabox looks orders up before re-sending, but after a crash a box can sit in
RECONCILINGuntil Strike's state is read back. - Leverage is the account's. strikeabox uses whatever leverage the Strike account has for the market and doesn't change it.
- Market minimums. Presets below a market's minimum order value can't be used; on testnet BTC-USD that minimum is $100 at the time of writing, so $25 and $50 are off there.
- Disconnect with open boxes. After a disconnect, strikeabox can no longer manage positions that are still open, unless the same wallet is connected again.
- Fees are estimates until fills arrive. The plan estimates Strike's trading fee and the builder fee from the current fee schedule and the book; the result shows what Strike actually charged.
Platform and operations
- Rate limits are in memory, per api instance. With several api instances the effective per-user limits are multiplied by the number of instances.
- The worker is required. Without a running worker there are no prices, quotes or settlement. Use
/api/health/workerto monitor it. - Wallet support varies. Connecting depends on your wallet being reachable from the browser you use; on mobile, a wallet's in-app browser is the most reliable. Some hardware-wallet setups can't sign arbitrary messages (relevant for Cardano CIP-30
signData). - Offline means no taps. The app caches only its static shell, so it opens offline, but it never queues taps.