Have you ever wanted a flexible, zero-bloat engine to build, test, and iterate on trading strategies — without digging through mountains of boilerplate code?
Let me introduce you to trading-cycle — a modular, blazing-fast core for backtesting trading logic in JavaScript/TypeScript.
Designed to be lightweight, extensible, and unapologetically developer-friendly.
No magic. No assumptions. Just powerful building blocks.
Why I Built This
Most open-source trading frameworks are either:
- bloated and hard to extend, or
- too minimal, lacking support for real-world conditions.
trading-cycle is my take on solving that. It provides:
- A powerful event-driven pipeline to simulate ticks.
- A core + handlers architecture for full customization.
- Built-in presets so you can start in seconds.
And yes, it's written in TypeScript, typed from top to bottom.
⚙️ Installation
npm install trading-cycleThis gives you:
- The full version, including indicators like Renko, logic handlers, candles, etc.
- The light version, for when you want just the core.
🚀 Quick Start
import {
TradingCycle,
defaultPreset,
handlers,
} from 'trading-cycle/full';
const cycle = new TradingCycle(handlers, defaultPreset);
// your data: ticks from CSV or real-time
ticks.forEach(tick => cycle.execute(tick));
console.log(cycle.state); // inspect the resultWant just the bare bones?
import { TradingCycle } from 'trading-cycle/light';🧩 Plug-and-Play Handlers
Built-in modules you can use out of the box:
Candles,
PositiveValues,
NegativeValues,
Renko,
TimeRenko,
TestLogic,
PositiveTimeLength,
NegativeTimeLength,
FakeTrader,
LogCandle,
RenkoCounterCustomize the flow using presets or your own HandlerConfig[].
💡 Writing Your Own Handler
You can write a handler in ~10 lines. Here's the idea:
class MyHandler extends AbstractHandler {
prev = 0;
doExecute() {
if (this.v.close < this.prev) {
this.prev = this.v.close;
return this.v;
}
this.prev = this.v.close;
return undefined;
}
}📄 CSV-Based Backtests
const cycle = new TradingCycle(handlers, defaultPreset);
// Load and parse your CSV into ticks
for (const tick of ticks) {
cycle.execute(tick);
}
console.log(cycle.state); // final resultsUse your own indicators, logic, trader bots — or combine with built-ins.
🧪 CI/CD + Code Coverage
All PRs go through:
yarn lint-
jestunit tests - Code coverage via Codecov
- Node.js 18 on GitHub Actions
- name: Run tests
run: yarn test --coverage
- name: Upload to Codecov
uses: codecov/codecov-action@v3Fully automated. No manual steps.
📦 Bundle Size
trading-cycle is lean:
| Version | Minified | Gzipped |
|---|---|---|
| Full | ~4.1kb | ~1.7kb |
| Light | Even smaller ⚡️ |
🔍 API Overview
new TradingCycle(handlers, config);
cycle.execute(tick);
cycle.state // final outputsHandlers can:
- read inputs (
this.v) - track internal state (
this._s) - emit values when ready
👨💻 Made with ❤️ by @vladtarrow
MIT licensed. Contributions welcome. PRs and GitHub stars fuel this project.
👉 Try it now
npm install trading-cycleAnd start simulating strategies without friction.
Have questions? Want to show off your own handlers? Drop a comment below or open an issue 💬