Access PIN Required

Enter your PIN to continue

{{ pin.error }}

PurpleKiteSilverRain

Portfolio

{{ activeExecutions.length }}
SANDBOX MODE Orders are simulated
{{ sandboxPortfolio.totalValue | currency }}

Select a Portfolio

Click the menu icon to choose a portfolio

Or start trading in sandbox mode

{{ selectedKey.name }}

{{ selectedKey.apiKey | maskKey }}

Error

{{ error }}

Loading portfolio data...

Total Value

{{ portfolioValue | currency }}

Assets

{{ getAssetCount() }}

Portfolio

{{ portfolio.name || 'Default' }}

Account Balances

{{ account.currency.slice(0, 2) }}

{{ account.currency }}

{{ account.name }}

-
Price

{{ account.price | currency }}

-

Value

{{ account.valueUsd | currency }}

-

Available

{{ account.available_balance.value | formatCrypto:account.currency }}

Hold

{{ account.hold.value | formatCrypto:account.currency }}

Active Executions ({{ activeExecutions.length }} running)

{{ exec.side }} {{ exec.productId }} {{ exec.portfolioName }}
{{ exec.pacingMode || 'starting' }}
{{ exec.progressPct | number:0 }}% filled ${{ exec.filledNotional | number:0 }} {{ (exec.marketImpact * 100) | number:2 }}% impact {{ (exec.elapsedMs / 1000) | number:0 }}s

Click for details

No active executions

Recent:

! {{ exec.side }} {{ exec.filledQty | formatCrypto }} {{ exec.productId.split('-')[0] }} @ {{ exec.avgPrice | currency }} (partial)

Orders ({{ getFilteredOpenOrders().length }} open)

Warning: Failed to load orders from: {{ err.keyName }}{{ !$last ? ', ' : '' }}

Current portfolio only
Side
Product
Status
Showing {{ getFilteredOpenOrders().length }} of {{ getBaseOpenOrdersCount() }} open orders Showing {{ getFilteredHistoryOrders().length }} of {{ getBaseHistoryOrdersCount() }} history orders

Loading orders...

No orders match your filters

No open orders

{{ order.product_id }} {{ order.side }}
Size

{{ order | orderSize }}

Price

{{ (order | orderPrice) | currency }}

Market

-

Type

{{ order | orderType }}

Created

{{ order.created_time | timeAgo }}

No orders match your filters

No orders in the last 30 days

{{ order.product_id }} {{ order.side }}
{{ order.status | orderStatus }}
Size

{{ order | orderSize }}

Price

{{ (order | orderPrice) | currency }}

Market

-

Type

{{ order | orderType }}

Created

{{ order.created_time | timeAgo }}

No account data available

Add API Key

Upload the JSON key file from Coinbase (contains name & privateKey)

or enter manually

Your private key is stored locally in your browser and never sent to our servers.

{{ testResult.message }}

Settings

Simulate trades with virtual portfolio

Cannot change while executions are active

Fill probabilities (must total 100%)

{{ wsSettings.sandboxFullFill }}%
{{ wsSettings.sandboxPartialFill }}%
{{ wsSettings.sandboxNoFill }}%
{{ wsSettings.sandboxError }}%
{{ wsSettings.sandboxLatencyMin }}ms - {{ wsSettings.sandboxLatencyMax }}ms
to ms

WebSocket Settings

{{ wsSettings.uiRefreshRate }}ms
100ms 2000ms
{{ wsSettings.dbWriteRate }}ms
500ms 5000ms
{{ wsSettings.orderbookDepth }} levels

Display Settings

Hide assets worth less than ${{ wsSettings.microBalanceThreshold }}

Connection Status
{{ wsStatus }}

Cancel Order?

Are you sure you want to cancel this order?

Product {{ orderToCancel.product_id }}
Side {{ orderToCancel.side }}
Size {{ orderToCancel | orderSize }}

Cancel All Open Orders?

Are you sure you want to cancel {{ getFilteredOpenOrders().length }} open order{{ getFilteredOpenOrders().length !== 1 ? 's' : '' }}? This action cannot be undone.

{{ tradeModal.currency.slice(0, 2) }}

{{ tradeModal.currency }} New Trade

{{ tradeModal.productId }} Select a trading pair

Sandbox
{{ tradeModal.price | currency }} per {{ tradeModal.currency }}

{{ tradeModal.priceError }}

Available to spend {{ tradeModal.quoteBalance | number:2 }} {{ tradeModal.quoteCurrency }}
Available Balance {{ tradeModal.balance | formatCrypto:tradeModal.currency }} {{ tradeModal.currency }}
Estimated Value {{ tradeModal.value | currency }}

You'll receive USDC stablecoin ({{ tradeModal.currency }}-USDC pair) You'll receive USD fiat ({{ tradeModal.currency }}-USD pair)

Current Price
{{ tradeModal.price | currency }} / {{ tradeModal.currency }}
{{ tradeModal.quoteCurrency || 'USD' }}
{{ tradeModal.currency }}

Trade Summary

You Pay {{ tradeModal.spendAmount | number:2 }} {{ tradeModal.quoteCurrency || 'USD' }}
Best Ask Price {{ tradeModal.price | currency }}
You Receive (est.) {{ (tradeModal.spendAmount / tradeModal.price) | number:8 }} {{ tradeModal.currency }}
You Sell {{ tradeModal.amount | number:8 }} {{ tradeModal.currency }}
Best Bid Price {{ tradeModal.price | currency }}
Trading Pair {{ tradeModal.productId }}
You Receive (est.) {{ (tradeModal.amount * tradeModal.price) | number:2 }} {{ tradeModal.receiveIn || tradeModal.quoteCurrency }}
Orderbook Analysis
Est. Avg Fill Price {{ tradeModal.estimatedFillPrice | currency }}
Est. Slippage {{ tradeModal.estimatedSlippage | number:3 }}%
Max Slippage {{ tradeModal.maxSlippage | number:1 }}%
Excellent - minimal slippage Within max slippage Exceeds max slippage!
{{ tradeModal.liquidityWarning }}
Execution Plan
Strategy {{ tradeModal.executionPlan.strategy }}
Order Book Analysis
Visible Depth
{{ tradeModal.executionPlan.bookDepthLevels }} levels
Total Liquidity
{{ tradeModal.executionPlan.bookNotional | currency }}
Within Slippage
{{ tradeModal.executionPlan.liquidityWithinSlippage | number:4 }} {{ tradeModal.executionPlan.currency }}
Fillable
{{ tradeModal.executionPlan.fillPct | number:1 }}%
Execution Estimates
Pacing Mode
{{ tradeModal.executionPlan.pacingMode | uppercase }}
Liquidity Ratio
{{ (tradeModal.executionPlan.liquidityRatio * 100) | number:0 }}%
Sweeps
~{{ tradeModal.executionPlan.estimatedSweeps }}
Orders
~{{ tradeModal.executionPlan.estimatedOrders }}
Est. Time
~{{ tradeModal.executionPlan.estimatedTimeSec }}s
Fast execution - good liquidity available 2s delays between sweeps - moderate liquidity 5s delays between sweeps - thin order book
Price Strategy (Undercut/Overcut)
{{ level.label }}
{{ level.price | currency }} ({{ level.note }})
Book Levels to Sweep
L{{ detail.level }} {{ detail.price | currency }} {{ detail.size | number:4 }} {{ detail.notional | currency }}
Adaptive Liquidity Sweep: Orders sized to match book depth with automatic pacing. Undercuts bids by ${{ tradeModal.executionPlan.undercutAmount | number:2 }}. Overcuts asks by ${{ tradeModal.executionPlan.undercutAmount | number:2 }}. Pauses when market impact exceeds 0.5% to prevent price tanking.

Orderbook data not available - slippage estimate unavailable

Execution Settings

Maximum price deviation allowed

%

Max time to complete trade

sec

Click arrow to start and close (continue with other trades)

{{ tradeModal.side === 'BUY' ? 'Buying' : 'Selling' }} {{ tradeModal.currency }}

Liquidity Sweep • Adaptive Pacing

{{ tradeModal.pacingMode || 'starting' }} {{ tradeModal.pauseReason }}
{{ tradeModal.progressPct | number:0 }}%

Filled

{{ tradeModal.filledQty | formatCrypto }}

of {{ tradeModal.amount | formatCrypto }} {{ tradeModal.currency }}

Avg Price

{{ tradeModal.avgPrice | currency }}

Time

{{ tradeModal.elapsedSec }}s

of {{ tradeModal.deadline }}s max

Sweeps / Orders

{{ tradeModal.sweepCount || 0 }} / {{ tradeModal.ordersPlaced }}

Market Impact
{{ (tradeModal.marketImpact * 100) | number:2 }}%
Start: ${{ tradeModal.startPrice | number:2 }} Next sweep in {{ (tradeModal.nextSweepIn / 1000) | number:1 }}s Ready to sweep
Fill Rate {{ ((tradeModal.filledQty * tradeModal.avgPrice) / tradeModal.elapsedSec) | currency }}/sec
Est. Time Remaining ~{{ ((100 - tradeModal.progressPct) / tradeModal.progressPct * tradeModal.elapsedSec) | number:0 }}s Calculating...
Total Notional Filled {{ tradeModal.filledQty * tradeModal.avgPrice | currency }}
Activity Log {{ tradeModal.activityLog.length || 0 }} entries
Waiting for activity...
{{ (entry.elapsed / 1000) | number:1 }}s {{ entry.message }}
+{{ entry.details.filledSize }} @ {{ entry.details.fillPrice }} = ${{ entry.details.filledValue }}
{{ entry.details.size }} @ ${{ entry.details.price }} (${{ entry.details.notional }})
{{ entry.details.error }}

{{ executionResult.status === 'completed' ? (executionResult.filledPct >= 95 ? 'Trade Complete' : 'Trade Partially Filled') : 'Trade Cancelled' }}

Filled {{ executionResult.filledQty | formatCrypto }} {{ executionResult.currency }}
Avg Price {{ executionResult.avgPrice | currency }}
Total Value {{ executionResult.filledNotional | currency }}
Unfilled {{ executionResult.unfilledQty | formatCrypto }} {{ executionResult.currency }}
Duration {{ executionResult.elapsedSec }}s
Sweeps / Orders {{ executionResult.sweepCount || '-' }} / {{ executionResult.ordersPlaced }}
Fill Rate {{ (executionResult.filledNotional / executionResult.elapsedSec) | currency }}/sec
Market Impact {{ (executionResult.marketImpact * 100) | number:2 }}%

{{ toast.title }}

{{ toast.message }}