Skip to content

Repository files navigation

Trading Signals Monorepo

A fully-typed, modular toolkit for building algorithmic trading bots in TypeScript β€” from technical indicators up to a Telegram-controlled live bot.

This monorepo is home to the popular trading-signals library (tested in production and trusted by hundreds of projects worldwide) along with everything you need to turn those signals into a running trading bot: strategies, an exchange abstraction, and a chatbot front-end.

Every piece is independently usable. Pick a package, drop it into your app, or run the whole stack and command your bot from your phone.

Highlights

  • Streaming-first indicators β€” SMA, EMA, RSI, MACD, Bollinger Bands, and many more, with replace-mode and lazy evaluation for backtests and live use.
  • Composable strategies β€” a tiny Strategy interface (return an OrderAdvice per candle) lets you focus on signal logic while the framework owns session state, order placement, fills, and broker quirks. Ships with ready-to-use building blocks and a ProtectedStrategy base that adds self-cleaning stop-loss / take-profit kill switches.
  • Visual backtesting in your browser β€” try any strategy against historical candles with interactive charts, trade markers, and P&L stats at typedtrader.com/backtest. Tune parameters, see the results instantly, no setup required.
  • Broker-agnostic execution β€” a unified exchange interface with type-safe schemas (Zod), WebSocket streaming, and paper-trading support. Ships with Alpaca Trading out of the box but is designed for any additional broker or exchange to plug in.
  • Control your bot from Telegram β€” add accounts, spin up strategies via conversational wizards, watch prices, schedule recurring reports, and inspect live strategy state and config, all from a chat.
  • Modern TypeScript stack β€” Latest TypeScript version, ESM-native, Node LTS, Lerna-managed workspaces, Vitest-covered, drizzle-backed persistence.

Quickstart

npm install

# Run the full test matrix across all packages
npm test

# Launch the indicator showcase (Next.js)
npm run start:docs

# Start the Telegram bot (requires TELEGRAM_BOT_TOKEN in your env)
npm run start:bot

πŸ“¦ Packages

This project uses Lerna to manage a monorepo with independent versioning.

Package Description
trading-signals Technical indicators (SMA, EMA, RSI, MACD, Bollinger Bands, ...) for algorithmic trading with streaming updates, replace mode, lazy evaluation, and memory efficiency. Battle-tested in production.
trading-signals-cli Terminal access to every indicator of the library. Pipe candles or prices in, get the indicator's reading as JSON, without writing a script for a quick check.
trading-strategies Trading strategies that combine indicators into actionable advice. Ships with a library of ready-to-use strategies and a ProtectedStrategy base that wires stop-loss and take-profit kill switches into any subclass.
@typedtrader/exchange Unified exchange interface for different brokers (currently Alpaca). Type-safe data transformation, WebSocket candles and order updates, paper- and live-trading environments behind a single API.
@typedtrader/exchange-cli Terminal access to the same broker clients. Check balances, search instruments, place and cancel orders, and stream candles or fills as NDJSON, with JSON on stdout for piping into jq or scripts.
@typedtrader/messaging Remote-control layer for your personal trading bot via Telegram. Add accounts, run strategies, watch prices, schedule reports, and inspect live strategy state β€” all from chat. Persistence via SQLite + Drizzle ORM.
trading-signals-docs Interactive showcase and visual backtester built with Next.js. Explore every indicator in action, then backtest strategies against real historical candles with charts, trade markers, and P&L stats.

How it fits together

At the foundation, trading-signals provides technical indicators like SMA, EMA, RSI, and Bollinger Bands. trading-strategies builds on top of them to produce actionable trading advice and ships kill-switch protection out of the box. @typedtrader/exchange abstracts away broker differences so strategies can run against any supported exchange. Finally, @typedtrader/messaging ties it all together into a chatbot that lets you operate your bot remotely.

graph TD
    messaging["@typedtrader/messaging (Chatbot)"]

    messaging --> session["TradingSession (online: pairs a strategy with a broker)"]
    website["typedtrader.com (Visual Backtester)"] --> backtest["BacktestExecutor (offline: replays historical candles)"]

    session --> strategies["trading-strategies"]
    session --> exchange["@typedtrader/exchange"]
    backtest --> strategies
    backtest --> exchange

    strategies --> signals["trading-signals"]

    signals --> SMA
    signals --> EMA
    signals --> BBANDS["Bollinger Bands"]
    signals --> more["..."]

    exchange --> Alpaca
    exchange --> T212["Trading 212"]
    exchange --> more-exchanges["..."]
Loading

Releases

Sponsor this project

Used by

Contributors

Languages