I built Veto Sentinel to give trading bots an independent, news-based risk signal. Rather than attempting to predict prices or make trading decisions, it acts as a second line of defence: when conditions become concerning, it tells connected bots to become more cautious or stop placing new orders.

Veto Sentinel monitors financial news from GDELT and central-bank RSS feeds, with optional support for NewsAPI. It cleans and deduplicates incoming headlines, then measures three warning signals:

Negativity: FinBERT (a specialized financial AI model), estimates how negative recent financial headlines are.

Topic drift: MiniLM sentence embeddings measure how much the news narrative has changed compared with the previous seven days.

News volume: The system detects unusual increases in headline volume relative to the same time of day on previous days.

Each signal is compared with its recent historical baseline using robust z-scores. The system combines them into a risk score, applies a CUSUM change-point detector, and uses a deterministic state machine with hysteresis and a cooling-off period to determine the current risk level.

The result is communicated as All clear, Be careful, or Stop. A fourth level, Emergency, is reserved for a human operator.

The most important part is what happens next. Every second, Veto Sentinel broadcasts sequenced state and heartbeat messages over ZeroMQ. Python and C++ client SDKs enforce those states locally inside connected trading bots. If a heartbeat disappears, a message is malformed, a sequence number is missing, or the monitor is not ready, the client fails safe and blocks new orders without waiting for a network request.

Veto Sentinel never connects to a broker, submits trades, or liquidates positions automatically.

Built With

Share this project:

Updates

Submission history