Backtesting shows what would have happened. It says nothing about what will happen. This is its only honest feature. The engine simulates portfolio performance from 2020 to today. Test a thesis, compare configurations via sweep mode, and deploy the result as a live Dex Traded Fund (DTF) — from the UI or API.Documentation Index
Fetch the complete documentation index at: https://docs.generalmarket.io/llms.txt
Use this file to discover all available pages before exploring further.
Backtesting via the UI
Navigate to the Backtest section. The interface is simple. The questions it raises are not.Select a Category
Choose an asset category to define the token universe. Layer 1s, DeFi Blue Chips, AI Tokens, Memecoins, Made in China, and 50+ more from CoinGecko and DefiLlama.Only coins listed on Bitget at some point are eligible. A backtest on untradeable assets is fiction, not simulation.
Configure Parameters
| Parameter | Description | Example |
|---|---|---|
| Top N | Number of assets by market cap | 10 |
| Weighting | Allocation scheme (see below) | mcap |
| Rebalance | Days between rebalances | 30 |
| Fee | Simulated trading fee per rebalance | 0.1% |
| Spread | Slippage multiplier | 1.0 |
Backtesting via the API
All simulation endpoints are GET requests with query parameters. No authentication required. The data is public. The conclusions you draw from it are yours alone. Base URL:https://generalmarket.io/api
Run a Single Backtest
Query Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
category_id | string | Yes | — | Category slug (from /sim/categories) |
top_n | int | Yes | — | Number of top assets by market cap |
weighting | string | Yes | — | Weighting scheme (see table below) |
rebalance_days | int | Yes | — | Days between rebalances |
base_fee_pct | float | No | 0.1 | Fee % per rebalance |
spread_multiplier | float | No | 1.0 | Slippage multiplier |
start_date | string | No | 2020-01-01 | ISO date (YYYY-MM-DD) |
force | bool | No | false | Skip cache, force recompute |
threshold_pct | float | No | — | Drift-based rebalance threshold (%) |
fng_mode | string | No | — | Fear & Greed regime: fear, greed, or both |
fng_fear_threshold | int | No | 25 | FNG index below this = fear |
fng_greed_threshold | int | No | 75 | FNG index above this = greed |
fng_cash_pct | float | No | 0.4 | % to move to stables during greed |
dom_mode | string | No | — | Dominance regime: btc, eth, or inverse |
dom_lookback | int | No | 30 | Lookback days for dominance trend |
vc_mode | string | No | — | VC filter mode |
vc_investors | string | No | — | Comma-separated investor names |
vc_min_amount_m | float | No | — | Min funding round in $M |
vc_round_types | string | No | — | Comma-separated round types |
Weighting Strategies
| Weighting | Query Value | Description |
|---|---|---|
| Equal | equal | 1/N allocation across all assets |
| Market Cap | mcap | Proportional to market cap |
| Capped Market Cap | capped_mcap_10 | Market cap with 10% single-asset cap |
| Square Root Market Cap | sqrt_mcap | Dampened market cap weighting |
| Momentum | momentum_90 | Top by 90-day momentum score |
| Inverse Volatility | invvol_60 | Lower volatility = higher weight |
| Dual Momentum | dual_mom_180 | Combined momentum/volatility signal |
| Risk Parity | risk_parity_60 | Equal risk contribution per asset |
| Min Variance | min_var_60 | Minimize portfolio variance |
| Multi-Factor | multi_factor_90 | Composite momentum + vol + mcap |
| Low Volatility | low_vol_60 | Over-weight low-vol assets |
dl-* categories):
| Weighting | Query Value | Description |
|---|---|---|
| TVL Weight | tvl | Proportional to Total Value Locked |
| TVL Capped | tvl_capped_10 | TVL with 10% cap |
| TVL Sqrt | tvl_sqrt | Dampened TVL |
| Fees Weight | fees | Weight by protocol fee revenue |
| Revenue Weight | revenue | Weight by protocol revenue |
| Volume Weight | volume | Weight by trading volume |
| TVL Momentum | tvl_momentum_90 | TVL trend-following |
| Fee Efficiency | fee_efficiency | Fees-to-TVL ratio |
| Yield Weight | yield | Weight by yield |
Sweep Mode
Sweep mode tests many configurations at once. It varies one parameter and streams results for each variant. It is the fastest way to discover that most configurations perform similarly — and that the few that don’t are probably overfitting. Sweep dimensions:top_n, weighting, rebalance, category, threshold
| Sweep | What It Varies | Values |
|---|---|---|
top_n | Number of holdings | 5, 10, 20, 30, 50, 100, 200 |
weighting | All weighting schemes | equal, mcap, momentum, invvol, etc. |
rebalance | Rebalance frequency | 14d, 30d, 60d, 90d, 180d + drift bands (3%, 5%, 10%, 15%) |
category | Multiple categories | Pass categories=layer-1,defi,ai |
threshold | Drift rebalance bands | 3%, 5%, 10%, 15%, 20% |
Fetch Holdings from a Backtest
After running a backtest, fetch the portfolio composition. These are the holdings that survived:date parameter (YYYY-MM-DD) to get holdings at a specific rebalance date.
Compare Benchmarks
Fetch BTC and ETH price series normalized to 1.0 at the start date. Every strategy must answer one question: did it beat holding BTC? Most do not.Market Signal Integrations
Layer additional signals into any backtest. More signals do not mean more clarity. But they do mean more data:Fear & Greed Index
Shift allocation between crypto and stablecoins based on market sentiment. Fear and greed are the only two emotions the market has. The index measures the ratio.BTC/ETH Dominance
Adjust crypto allocation based on Bitcoin or Ethereum dominance trends.VC Funding Filter
Filter assets by venture capital backing. Smart money is not always smart. But it is always funded:Understanding Results
Numbers do not lie. But they omit. The metrics below tell you what happened. They do not tell you what it felt like to live through it.Key Metrics
| Metric | What It Tells You |
|---|---|
| Total Return % | Cumulative gain/loss over the full period |
| Annualized Return | Return normalized to a yearly rate |
| Max Drawdown % | Largest peak-to-trough decline — worst-case pain |
| Sharpe Ratio | Risk-adjusted return. >1.0 is decent, >2.0 is strong |
| Total Fees % | Cumulative fees paid across all rebalances |
| Total Trades | Number of individual asset trades executed |
| Total Delistings | Assets removed mid-backtest (delisted from exchange) |
What the NAV Series Represents
Thenav_series starts at 1.0 and tracks portfolio value over time. A NAV of 3.12 means 212% return from the start date. A straight line on the chart. In reality, each day between 1.0 and 3.12 was a decision not to sell.
Deploy as DTF
A backtest that looks good enough becomes a live DTF with one click. The transition from simulation to reality is instant. The consequences are not.Review Final Holdings
Check the holdings table. Confirm the weights match your thesis. The thesis looked good in simulation. It has not yet met the market.
Click Deploy Index
The button pre-fills the DTF creation form with the backtested assets and weights. One click from history to the present.
Checklist: Running an Honest Backtest
Pick a Category That Matches Your Thesis
Do not backtest “all crypto” if you want a DeFi strategy. Narrower categories give cleaner signal. Broader categories give cleaner conscience.
Start with Equal Weight
Equal weight is the fairest baseline. If mcap-weighted cannot beat equal-weighted, concentration is hurting you. Equal weight is the null hypothesis. Beat it before you complicate things.
Use Realistic Fees
Default fee is 0.1%. If you are trading illiquid altcoins, bump
spread_multiplier to 2.0+. Underestimating fees is the most common backtesting lie. It is also the most flattering.Run a Sweep Before Committing
Use
sweep=top_n and sweep=weighting to find optimal params. Do not cherry-pick the one configuration that looks best. That is not analysis. It is self-deception with a chart.Check Drawdown, Not Just Return
A 500% return with -90% max drawdown means you would have watched 90% of your money disappear at some point. The return is theoretical. The drawdown was lived.
Look at Delistings
High
total_delistings means the category contains flaky assets. The backtest handles this gracefully. Live trading does not.