npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@backtest/command-line

v1.1.6

Published

This project is a CLI build around Backtest, a library for trading developers

Downloads

481

Readme

GitHub GitHub package.json version npm Hits

Backtest JS: Command-line Interface (CLI)

Enhance your trading strategies with Backtest, the leading CLI tool crafted for trading developers. Leverage the power of TypeScript (or JavaScript) to backtest your strategies with unmatched precision, efficiency, and flexibility.

Key Features 🌟

  • Intuitive CLI Interface: User-friendly command-line interface for smooth operation.

  • Comprehensive Candle Data: Access historical candle data from Binance or effortlessly import your own CSV files.

  • Integrated Storage: Efficiently store your candle data, strategies, and results in the internal SQLite storage.

  • Documentation: Maximize Backtest’s capabilities with thorough guides and resources.

Quick Start

How to try it out

Install package globally, and then excute it. That's all 👇

npm install -g @backtest/command-line
npx backtest

But WAIT, there's more! This is perfect for checking functionality and running strategies well-defined. However, if you want to write your own strategies, probably, you'll need a local copy of the project. This way, you can debug 🐞 and test your strategies more effectively.

Otherwise, if you're a skilled developer or you want to integrate Backtest into your project, consider using the Backtest Framework directly or starting from the Quick Start project.

Setup Environment

Follow these instructions to set up the environment locally:

  git clone [email protected]:backtestjs/command-line.git backtest-cli
  cd backtest-cli
  npm install

Initial Setup

When you run the project for the first time, you need to set up the database. Follow these steps:

  1. Validate your Prisma schemas: npx prisma validate
  2. Generate the Prisma client: npx prisma generate
  3. Create the database: npx prisma db push

These commands ensure that your project is properly configured and ready to use.

Note: If you are not familiar with Prisma and the commands above, you can use npm run align-db to align the schema with the database.

npm run align-db

Run this project

Start strategic backtesting with a single command:

  npm run dev # main.ts
  npm run start # dist/main.js

Historical Candle Data

Easily download candle data from Binance or import it from a CSV file for strategy execution. Additionally, you can export your data to a CSV file via the CLI with just a few clicks. No coding or API key is required (thanks Binance!).

Custom Strategies

In addition to the demonstration strategies already present, you can create your own by adding a file under src/strategies.

Use one of the existing files or the examples present in this link as a reference. Each file should contain a runStrategy method, and if it uses external or dynamic parameters, it should also include a properly filled-out properties structure.

Whenever you create a new strategy, modify the properties structure of an existing one, or delete an existing strategy, you need to run the 🌀 Scan Trading Strategies CLI command.

If you run your strategy with alwaysFreshLoad set to true, there’s no need to stop or restart the backtest process if it’s running, or to exit the program. The program will reload the contents of your file with each launch, as long as it’s synchronized. But, pay attention, it's important to note that in this case you cannot use global variables in your strategy. As a result, you won't be able to take advantage of the benefits of using support historical

Using well-defined or dynamic parameters (instead of constants within your strategy) will allow you to run multiple tests simultaneously.

How to write a Custom Strategy

Please, refer to Write a Strategy to discover how write your custom strategy.

How to execute a Custom Strategy

  1. Create a new file under src/strategies.
  2. Write your strategy (see above for more details).
  3. Export a runStrategy method.
  4. If your strategy uses external or dynamic parameters, export a properties structure.
  5. Run the 🌀 Scan Trading Strategies CLI command.
  6. Run the 🏃 Run Trading Strategy CLI command.
  7. Select your strategy from the list.
  8. Follow the prompts to enter the required parameters.
  9. View and enjoy the results.

Visualize Results

BacktestJS not only delivers performance insights but also visualizes your strategy’s effectiveness through comprehensive charts and statistics.

Income Results, Buy/Sell Locations, and More

Explore the visual representation of your trading outcomes, from income results to buy/sell locations, offering you a clear view of your strategy’s performance.

General Info

Total Stats

Trade Stats

Trade Buy Sell Stats

Asset Stats

Income Results

Buy Sell Locations

All Orders

Multi Value Results

Examine permutation results and heatmap visualizations to refine your strategies across different values all in one run.

General Info

Total Stats

Asset Stats

Permutation Results

Heatmap

Multi Symbol Results

See if that killer strategy works across the board on many symbols and timeframes with ease. Get all your results in one shot with blazing fast results.

General Info

Total Stats

Permutation Results

Import Candle Data from CSV

Although there is an option to download data from binance for crypto assets there is no automatic download available for traditional symbols such as apple or tesla stock as well as forex symbols such as usdyen.

This candle data can be downloaded from third party sites such as yahoo finance and can then be easily imported to the Backtest database to use with any strategy.

How to prepare CSV file

The CSV file must have the following fields:

  • Close time of the candle: closeTime or date
  • Open price of the candle: open
  • High price of the candle: high
  • Low price of the candle: low
  • Close price of the candle: close

The CSV file can have the following optional fields:

  • Open time of the candle: openTime, openTime
  • Volume in the candle: volume
  • Asset volume of the candle: assetVolume
  • Number of trades done in the candle: numberOfTrades

Pay attention: follow these rules:

  • Each field can be written without considering case sensitivity.
  • The order of the fields in the CSV file is not important.
  • Any additional fields will not cause an error but won't be added to the database.

This or that (!?)

TL;DR If you are unaware of the original project, you probably don’t need to read further unless you’re curious.

If you’re wondering why there are two similar repositories (this one and the one you can find here), the answer is simple: Andrew’s is the original platform, and it’s well-made, but it hasn’t been updated for a while. While waiting for the author to resume work on it, I decided to create an updated and maintained version. The original license allows this (at least it seems clear to me), and we don’t intend to change the license in the future. The basic idea is to keep this product updated and add some features over time. So far, we’ve added what we needed, which includes:

  • Agile loading of strategies (added the command 🌀 Scan Trading Strategies);
  • Removed explicit commands for adding and deleting strategies in favor of the single scan command;
  • Strategies are always reloaded as code, so you just need to modify the code on the fly and save the .ts file. Then, by restarting the strategy from the CLI, even from an already running process, the new version is used;
  • Modified the HTML template to make a few things clearer for now (like params, colors, note, ..);
  • Added the ability to include a note on purchase and sale (to understand why a purchase or sale was made, the reason is reported in the “all orders” section of the HTML file);
  • Added structure properties inside strategy file .ts. This greatly helps in adding or proliferating strategies; just rescan and you’re done;
  • Ability to use Node v18 or higher (for this, we removed tulind and added technicalindicators, although both are old and tulind is undoubtedly a great choice. If you need it, you can still add it back in the fork).
  • Decoupling of Backtest Framework functionality from CLI commands exposed through this project.

What might come or be requested (f.e.):

  • Ability to call it globally from the shell command line;
  • Specify an external folders for strategies, especially useful if executed globally (see above point);
  • A bit more structured documentation, including more specific and sophisticated examples.

Assumptions for the future:

  • The product will remain accessible and usable for free;
  • External collaborations or maintainers are always welcome.
  • Possible funding options will be considered if needed to keep the product updated, but for now, it’s not necessary or useful to think about it;

Thanks to ❤️

The original project is currently on hold. However, thanks to the permissive license, we aim to continue the author’s work. We express our gratitude and recognition for creating a usable product under a license that allows for external adoption and support.

So, our thanks to Andrew Baronick ( GitHub / LinkedIn )