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
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.
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.
Ingest
Poll a newswire for articles tagged with stock tickers.
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.
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.
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.
Check portfolio risk
Daily-loss kill switch, drawdown circuit breaker, losing-streak cooldown, position and trade caps, per-ticker cooldown.
Execute
A limit order with a price ceiling, then a stop-loss placed with the broker immediately.
Manage the exit
Take-profit, time stop, a break-even ratchet, and a forced flatten before the close.
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 contractsShipped integrations
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.
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