Signal dataset

Every signal we sent from June 2021 to February 2024, as one file.

33,694 signals across 33 months — entry, close, timestamps and the per-trade result, including the ones that went nowhere. Download it, run your own numbers, argue with ours.

Download CSV (3.5 MB) Download JSON (8.6 MB)

What is in it

One row per signal the bot broadcast, flattened from the 33 monthly order spreadsheets. Those spreadsheets remain the source; this is the same data in a shape you can load in one line. First entry 2021-06-08 00:15:55, last close 2024-03-10 07:41:30 (UTC).

ColumnMeaning
monthWhich monthly report the row came from, YYYY-MM.
symbolBinance USDT-M perpetual pair.
sidelong or short.
statusclosed, or open for a signal still running when that month's sheet was cut. For open rows close_price and close_time are empty and pnl_pct is a mark-to-market snapshot at the cut, not a result.
strengthThe signal's strength rating, where the month recorded it. Empty in the earliest months, which predate the rating.
entry_price, close_priceReference price when the signal fired, and the price at which the sheet recorded it closed.
entry_time, close_timeUTC, YYYY-MM-DD HH:MM:SS. Converted from the spreadsheets' Excel serial dates.
pnl_pctUnleveraged move from entry to close, in percent, signed for the side. A short that fell 9.45% reads 9.4500.
pnl_max_pct, pnl_min_pctThe best and worst unleveraged excursion the sheet recorded while the signal was open — useful for anyone studying where a tighter target or stop would have landed.

What is not in it, and why

The spreadsheets carry a column naming what fired each signal. It is not here. What the model looks at is the product, and the public description stops at "240+ indicators, formulas and components"; a dataset that let a reader reconstruct the trigger rules would give that away row by row. Everything about the outcome of each signal is included. Nothing about the cause is.

How to read it honestly

Use it

Free to download and analyse. If you publish something built on it, a link back to this page is appreciated — and if you find something in it we should know about, tell us: @hafizebot.

import pandas as pd
df = pd.read_csv("https://www.hafizebot.com/downloads/signals-2021-2024.csv")
closed = df[df["status"] == "closed"]
closed.groupby("month")["pnl_pct"].agg(["count", "mean", "median"])

Past performance does not guarantee future results; nothing here is investment advice. See the risk disclosure below.