Open Source

Tapewatch

An open-source trading research framework, published under the Apache License 2.0. It automates trades, ships the tooling to measure whether a strategy has an edge — and publishes the negative results it produced about its own.

Licence

Apache 2.0

Language

Python 3.11+

Storage

PostgreSQL

Test suite

563 tests

View on GitHub

Overview

What it does

Tapewatch watches a live financial newswire and uses a large language model to classify every article as a possible trading catalyst. Before acting on any of them, it checks whether the market actually agrees with the story. If it does, the framework places an order through a broker API and manages the exit. Alongside all of that, it ships the analysis tooling to measure — honestly — whether a trading strategy has a real edge or is just luck.

The name is literal. The tape is trader slang for the live stream of prices and trades, from the paper ticker tape that stock tickers once printed on. Tape watching is the practice of reading that stream in real time.

It runs as a single scheduled process with four jobs: the news pipeline, position monitoring, a nightly evaluation loop, and a daily broker symbol-map refresh. You bring your own API keys for every external service it touches.

Every gate, threshold and risk limit in the pipeline is a parameter you can tune to your own rules, and the project defaults to demo mode so you can watch it run before it ever touches a live order.

Why It Exists

Most retail trading projects show you an equity curve. This one ships the tooling that invalidates equity curves — and publishes the negative result it produced about its own strategy.

The bundled reference strategy has no measurable edge, and the repository says so in public. The measurements are published in full, negative results included, rather than summarised into something more flattering.

The reason that matters is an engineering one, not a trading one. Twice during development, a change was shipped on evidence that later proved wrong — and the measurement tooling caught it both times. That is the whole argument for building this way.

Read the full published results

How It Works

From headline to closed position

Eight stages, each of which can stop the process. Roughly fourteen sequential price checks sit between a classified article and an order.

01

Ingest

Poll a newswire for articles tagged with stock tickers.

02

Pre-filter cheaply

Deterministic rules drop digests, analyst-note noise, and recap articles explaining why a stock already moved — before any model call. An article about a move that already happened is not the catalyst that caused it.

03

Classify

One batched, schema-forced model call assigns a catalyst type from a 14-class taxonomy, a confidence, a magnitude, and a judgement of whether the move has already happened. Every classification is stored, including the ones that will never trade — that store is the evaluation dataset.

04

Confirm against the market

Around fourteen sequential gates: quote freshness, liquidity, spread, momentum, relative volume, VWAP, over-extension, exhaustion. Each rejection carries a code, so the funnel is queryable.

05

Check portfolio risk

Daily-loss kill switch, drawdown circuit breaker, losing-streak cooldown, position and trade caps, per-ticker cooldown.

06

Execute

A limit order with a price ceiling, then a stop-loss placed with the broker immediately.

07

Manage the exit

Take-profit, time stop, a break-even ratchet, and a forced flatten before the close.

08

Evaluate

Nightly, compute forward returns for every signal — whether it traded or not.

Design Principles

Five rules that explain most of the code

Fail closed

If something cannot be verified, no trade happens.

Transient and terminal rejections differ

A market that has not moved yet earns a second look. A stock that is untradeable does not.

The loss side rests at the broker

The stop executes with no polling latency, and survives the process dying.

Every rejection has a code

Behaviour is queryable rather than inferred.

Observability is not optional

Outage detection, heartbeats, and one record per API call — including the failures.

Measurement

The tooling that invalidates results

This is the unusual part of the project, and the reason it exists in public.

Path-aware labelling

Walks each signal minute by minute to see which exit it would hit first. Sampling prices at fixed horizons cannot see the dip in between, and the dip is what fills a stop.

Walk-forward validation with an embargo

Fit on earlier data, test on later data never looked at, with a gap in between so information cannot leak backwards.

The deflated Sharpe ratio

Asks how good the best of N attempts would look by luck alone. Essential, because trying enough variants manufactures a winner from nothing.

Providers

Bring your own

Every external service sits behind a documented contract. Swapping a news source, quote provider or broker means writing one module — not touching trading logic. You supply your own API keys for all of them.

Provider contracts

Shipped integrations

BrokerTrading 212
NewsBenzinga via Massive
Market dataFinnhub
Market dataTwelve Data
ClassificationAnthropic Claude
ComparisonOptional second model

Contributing

Contributions are welcome

ParallaxTech maintains Tapewatch, but the copyright is shared with everyone who has contributed to it.

You keep your copyright

First-time contributors sign a lightweight contributor licence agreement, automated on their first pull request. You keep the copyright in your own work and licence it to ParallaxTech.

Integrations especially

The project currently ships one broker and two market-data sources. New provider modules are the most useful contribution you can make.

The bar for a test

A test must fail when the feature is removed, verified by deliberately breaking it. And no risk gate is widened without path-aware evidence.

Want it installed and maintained?

We provision the server, install and configure Tapewatch, and keep it patched. Your broker account, your funds and your keys stay yours.

Tapewatch services

Important notices

Not investment advice

Tapewatch is software published for research and educational purposes. Nothing on this page or in the software is a recommendation to buy or sell any security, nor an inducement to engage in investment activity.

No representation of profitability

No claim is made that this software is or will be profitable. The maintainers' own measurements of the bundled reference strategy show no measurable edge and are published in full, including the negative results. Read the published results.

Capital at risk

Trading involves risk of loss, including loss of the full amount invested. Automated trading can lose money faster than manual trading, and software can fail in ways that cause financial loss. You are solely responsible for any use of this software and for any losses arising from it.

Past results do not indicate future performance

Any historical figure describes a specific period and configuration and says nothing about the future.

Provided "as is"

The software is licensed under the Apache License 2.0, without warranty of any kind, express or implied. See the LICENSE file.

You are responsible for your own compliance

Using this software requires accounts with third-party brokers and data providers, each with its own terms — some restrict automated access or redistribution. Complying with them, and with the law and tax rules where you live, is your responsibility.

Trading 212, Benzinga, Finnhub, Twelve Data, Anthropic and PostgreSQL are trademarks of their respective owners. They are named here only to describe interoperability. No affiliation with, sponsorship by, or endorsement from any of them is implied.

We Build Software This Carefully

Tapewatch is how we work in public. Tell us what you need built and we will bring the same rigour.

Start a Conversation