Skip to content

bennycode/trading-signals

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-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/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 --> strategies["trading-strategies"]
    messaging --> exchange["@typedtrader/exchange"]

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

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

    exchange --> Alpaca
    exchange --> IB["Interactive Brokers"]
    exchange --> more-exchanges["..."]
Loading