Strategy overview.
One clear view of every strategy alert you’ve connected.
Your strategies 0
Waiting for first signal
NOTHING ON THE RADAR
Your signal space is ready.
Add your first strategy, then follow the connection guide to send its TradingView alerts here.
From TradingView
to your dashboard.
Each strategy gets its own monitoring alert and private webhook URL. Your existing bot alerts stay separate.
Create a dashboard runner
Choose a name, asset class, symbol, timeframe, and style tag. The dashboard makes a unique webhook credential for it.
Make a separate TradingView alert
On the chart, create a strategy alert for order fills. Use your monitoring alert only; don’t change the alert that sends orders to your bot.
Paste the webhook and message
Copy the runner’s webhook URL and JSON message from its setup panel. Use the supplied strategy market-position field: a bot order field such as side: "buy" describes an order, not whether the strategy is Long, Short, or Flat. TradingView needs a public HTTPS webhook address. Until a webhook route is configured, this URL is local-only and TradingView cannot reach it remotely.
Link and verify the alert
When TradingView account sync is connected, link its exact alert ID here. Send a test signal and confirm that the position and event time update.
Bring active alerts into the dashboard
From Overview, choose Import active alerts. Review the names, symbols, timeframes, asset classes, and optional style tags. Leave all alerts from the TBS Layout unchecked, then confirm the review box and import the selected alerts.
TradingView does not include layout names in the MCP alert list, so the app cannot identify TBS from the account connection. The importer checks each selected alert is still active and saves exact alert IDs locally. It does not change TradingView.
Imported alerts show status immediately. Their Long / Short / Exit / Flat position stays “Not reported” until a webhook sends a signal to the dashboard.
Install the dashboard on iPhone
Install Tailscale from the iPhone App Store and sign in to the same account as this Mac. Turn it on, then open https://tradingviewdashboard.pages.dev in Safari. Choose Share → Add to Home Screen. It opens like an app; no separate dashboard password is needed.
The Cloudflare page is only the app shell. Its data requests go to the Mac over its private Tailscale address, so Tailscale must be on whenever you view the dashboard. If your browser asks to allow local network access for this site, allow it; the Mac still accepts dashboard traffic only from your tailnet. If the browser cannot connect, use Open the private dashboard on the page, then add that private page to your Home Screen. The Mac is not an Exit Node, so other iPhone internet traffic stays direct.
Anyone can load the empty app shell, but only an authorized device on your Tailscale network can reach the Mac database. Keep tailnet membership and device sharing limited to your account.
See when TradingView needs attention
The connection light and this status panel show MCP health and the last successful alert sync. The server checks about every 90 seconds; the dashboard refreshes about every 30 seconds and retries after errors.
On a red or yellow status, open Connection status, review the last sync/error, and choose Sync now. If TradingView authorization expired or was revoked, choose Connect TradingView and approve access again. Existing dashboard runners and webhook URLs stay saved.
On iPhone, add the site to your Home Screen, open it from its icon, then use the bell button to enable push. The Mac sends a notification for each real incoming signal and when TradingView sync goes offline or recovers. Dashboard test signals never send alerts.
Observe an existing alert’s fire log
Open a runner, choose Observe alert log only, then select the exact TradingView strategy alert. The Dashboard checks TradingView’s read-only fire history every five minutes and imports recognizable Buy/Sell, Long/Short, Exit/Flat, and explicit DCA skip messages. This association cannot pause, resume, or delete the TradingView alert. The Dashboard shows the last signal separately from a confirmed market position.
Order action Buy/Sell is not enough to claim the strategy is currently Long/Short. For position state, the alert log must include TradingView’s market position or an explicit position signal. If the log has no event for a blocked DCA month, Pine must emit a separate alert() message such as DCA_SKIPPED; no order fill means no event to read. That message should be included in the TradingView alert’s alert() calls.
TradingView alerts keep a snapshot of the script and its inputs. After changing Pine code or inputs, update/recreate the relevant alert and check that the observed alert still points to the intended strategy. If TradingView no longer lists a linked alert, the Dashboard archives its runner locally with its signal history.
Read-only observation does not require another webhook URL or alter your bot alert. Use the controls alert option only when you intend to pause or delete that exact alert from this interface.
Loading webhook route status…
Code updates keep your saved strategies
Updating this dashboard’s code does not require recreating TradingView alerts or linking them again. Strategy records and signal history are stored in the Mac’s local database; the TradingView OAuth session is stored in macOS Keychain.
If you rotate a runner’s webhook URL, update that runner’s TradingView monitoring alert with the new URL before its next signal. If you delete and recreate an alert in TradingView, link its replacement ID here.
Cloudflare app, Mac data
The public app address is tradingviewdashboard.pages.dev. Cloudflare serves the static interface; it does not store the strategy list or signal history. The app reads the same local SQLite database through the Mac’s private Tailscale Serve route.
Cloudflare’s upload contains only the interface files and the private Mac address. No database, OAuth token, webhook secret, or signal payload is uploaded. A person outside your tailnet can load the shell but cannot read or change the Mac data.
Local Git ignores the database and .env.local; OAuth tokens stay in Keychain and runner webhook credentials are stored as hashes.
Signals aren’t orders. This dashboard records the strategy’s reported long, short, or flat position. It does not connect to an exchange or route trades.