Skip to content

Latest commit

 

History

History
151 lines (116 loc) · 5.7 KB

File metadata and controls

151 lines (116 loc) · 5.7 KB

SignalQuorum

An Electron desktop app that aggregates multiple TradingView webhook signals and only forwards a trade to TradersPost when a configurable quorum of conditions agree.

How It Works

TradingView Alerts (N separate alerts)
    │
    │  POST https://yourname.ngrok-free.dev/signal
    │       { "name": "rsi", "trade": "long" }
    ▼
ngrok (stable free domain) → localhost:3777
    │
    ▼
SignalQuorum (Express server inside Electron)
    │  Update condition → Evaluate quorum
    │  If threshold met → POST to TradersPost
    ▼
TradersPost Webhook

Each TradingView alert sends a signal identifying a condition name and a direction (long, short, or exit). SignalQuorum tracks all conditions and when enough of them agree — say 4 out of 5 are long — it fires a buy order to TradersPost. If the quorum breaks, it does nothing (no automatic exit signal).

Features

  • Auto-registering conditions — no pre-configuration needed. Send a signal with any name and it appears in the dashboard.
  • Configurable threshold — set how many conditions must agree before a trade fires.
  • Three editable payloads — customize the exact JSON sent to TradersPost for buy, sell, and exit actions. Add fields like sentiment, orderType, quantity, etc.
  • ngrok integration — built-in tunnel with support for free static domains. Set your TradingView webhook URL once.
  • Signal templates — one-click copy of JSON templates for long/short/exit to paste into TradingView alert messages.
  • Activity log — tracks every incoming signal, quorum evaluation, and outgoing trade.
  • Persistent state — conditions, settings, and payloads survive app restarts.
  • TradersPost brand theme — dark UI with TradersPost's color system.

Quick Start

npm install
npm start

Setup

  1. ngrok — Create a free account at ngrok.com, copy your authtoken, and optionally claim a free static domain. Paste both into Settings.
  2. TradersPost — Copy your webhook URL from your TradersPost strategy and paste it into Settings.
  3. Ticker — Click the ticker display to change it (default: SPY).
  4. Threshold — Set how many conditions must agree (default: 3).

TradingView Alerts

For each indicator/condition, create a TradingView alert with:

  • Webhook URL: the URL shown at the top of SignalQuorum (e.g., https://yourname.ngrok-free.dev/signal)
  • Message: use the template buttons to copy the JSON, then change the name:
{
  "name": "rsi",
  "trade": "long"
}

Valid trade values: long, short, exit

TradersPost Payloads

The Payloads section shows three editable JSON editors — one each for buy, sell, and exit. The base payload is:

{
  "ticker": "SPY",
  "action": "buy"
}

You can add any TradersPost-supported fields directly in the editor:

{
  "ticker": "SPY",
  "action": "buy",
  "sentiment": "bullish",
  "orderType": "market"
}

Custom fields persist across restarts and are merged into the payload when a trade fires.

Tech Stack

  • Electron — desktop window
  • Express — local HTTP server (port 3777)
  • @ngrok/ngrok — tunnel for public webhook URL
  • electron-store — persistent settings/state
  • Plain HTML/CSS/JS — no framework, no build step

File Structure

signal-quorum/
├── package.json
├── main.js              # Electron + Express + ngrok + quorum logic
├── preload.js           # Secure IPC bridge
└── renderer/
    ├── index.html       # Dashboard layout
    ├── styles.css       # TradersPost-branded dark theme
    └── app.js           # UI logic

API

POST /signal

{ "name": "rsi", "trade": "long" }
  • name (string, required) — condition identifier
  • trade (string, required) — "long", "short", or "exit"

Returns: { "success": true, "conditions": 5 }

GET /health

Returns: { "status": "ok", "conditions": 5, "confluenceResult": "long" }


The Prompt

Below is a cleaned-up version of the prompt used to create this project with Claude Code:

Create a small Electron desktop app called SignalQuorum that receives webhook signals from TradingView on my local computer and monitors them for consensus.

Signal reception: Each signal is a POST request with a JSON body like {"name": "rsi", "trade": "long"} where trade can be long, short, or exit. Conditions should auto-register when the first signal arrives — no pre-configuration needed, just how many there are.

Quorum logic: I need to set a threshold so that if X out of Y conditions agree (e.g., 4 out of 5 are long), the app fires a trade. If the quorum breaks, do nothing — don't send an exit signal.

TradersPost integration: When the quorum is met, forward the trade as a webhook to TradersPost. I need to be able to see and edit the exact JSON payload that gets sent for each action (buy, sell, exit) — three editors side by side.

Tunneling: Use ngrok (free tier with static domain support) so I can set TradingView webhook URLs once and never change them.

UI requirements:

  • Plain HTML/CSS/JS, no framework, no build step
  • Dark theme using TradersPost brand colors
  • Signal template copy buttons (Copy Long / Copy Short / Copy Exit) for easy TradingView alert setup
  • Ticker symbol in its own editable section above conditions
  • Settings and Activity Log as slide-in drawer panels
  • Once a trade executes, the result should auto-archive to the activity log after 5 seconds of the window being in focus

Tech stack: Electron, Express for the local HTTP server, electron-store for persistence, @ngrok/ngrok SDK for tunneling.