Security

Your keys. Your machine. Your call.

AES-256-GCM encrypted vault · NFA / CFTC-ready audit trail · weekend-gap aware guards · no broker passwords, no plaintext, no cloud retention.

The vault

Broker API keys live encrypted — per user, per session.

scrypt key derivation against a per-user salt. Same broker secret, different user → different ciphertext → no shared-state attack surface.

CredentialVault.ts

Format: salt:iv:authTag:ciphertext · base64 · colon-separated

derivedKey = scrypt(
  ENCRYPTION_SECRET + ':' + userId,
  salt,
  32
)
iv      = randomBytes(12)
cipher  = createCipheriv('aes-256-gcm', derivedKey, iv)
ct      = cipher.update(plaintext) + cipher.final()
authTag = cipher.getAuthTag()
row     = [salt, iv, authTag, ct].map(b => b.toString('base64')).join(':')
OANDA REST, FXCM REST, IG Markets X-API-KEY, IBKR Client Portal, Alpaca REST — all stored the same way.

Risk guards

Seven guardrails. Every one overridable.

Defaults tuned for 24/5 forex market hours and NFA Compliance Rule 2-43(b) guidelines. Tweak per strategy, per pair.

GuardDefaultEffect
maxDailyLossPct2%Strategy auto-pauses when unrealised + realised loss exceeds 2% of deployed capital.
maxPairExposure30%Per-pair position capped at 30% of total equity. Prevents single-pair blowup.
weekendGapAwareAlwaysAll positions auto-flatten before Friday 5pm ET rollover when weekend-gap risk exceeds threshold.
minOrderEdgePct0.03% post-costOrders rejected if post-commission edge < 3 bps. Configurable per strategy.
orderRateLimit10/secPer broker, per minute. Respects NFA Compliance Rule 2-43(b) order-placement guidelines.
marginSafetyBuffer15%Leveraged positions reserve 15% margin headroom over broker requirement for intraday swings.
maxOpenOrders5 per pairPrevents laddering overflow on exotic pairs.

Compliance

NFA / CFTC-ready from day one.

Every order carries a unique broker-account-tagged ID. Full audit trail exportable for broker or regulator queries.

Order-ID tagged

Every fill traceable to strategy, timestamp, IP, broker account

Cross-broker ledger

Positions from every connected broker merge into one portfolio view

Accountant-friendly exports

CSV formatted for capital-gains and Section 988 forex reporting

Trust is a stack, not a slogan.

Every layer above is in production today. Ask hard questions — we ship the answers in code.