Strategy Lab

Test it the way it would really trade.

Write strategies in Python, run them against history that does not flatter them, and find out what your odds actually are.

Build

A builder that checks before it runs.

Strategies are Python on the engine, with every parameter typed and bounded. Saving checks the source and running needs a clean check, so a strategy that cannot be evaluated honestly does not get evaluated at all.

  • Typed parameters with their ranges, checked on save
  • No lookahead: the checks refuse a rule that reads ahead
  • The same source runs in backtest and forward test
taigalabs.dev/strategy/buildAlgorithmReadycontracts:int= 44(0-59)z_entry:float= 5.6(2-31)atr_max_bars:int= 38(0-47)require_reject_bar:bool= falseer_len:int= 8(1-10)er_max:float= 4.2(0-5)atr_len:int= 6(2-7)tp_frac:float= 4(1-37)tp_min_pts:float= 2.2(0-58)tp_max_pts:float= 4.9(1-53)sl_atr:float= 5.3(2-24)sl_basis:str= bothtime_stop_min:int= 31(2-37)max_trades_day:int= 7(0-15)max_losses_day:int= 26(1-47)daily_loss_limit:float= 2.9(0-37)side_lock:bool= trueskip_open_min:int= 20(2-31)ChecksSource parsesParameters in rangeNo lookaheadDeterministicRun backtest Illustrative. Seeded sample data, not a real result.

Backtest

Every trade, and where it came from.

A run gives you the curve and the trades that made it. Each one records the regime it was taken in, so you can ask whether an edge is real or whether it was one market condition that happened to repeat.

  • Fills at bar closes, never inside a bar
  • Every trade tagged with its regime and reason
  • Parameter sweeps, with the whole surface kept
taigalabs.dev/strategy/backtestsNet profit+13,709Max drawdown-6,856Trades159Equity#DirEntryExitP&LRegimeTag1long9:53 155339:35 15604+355Trend downtrend2short10:32 1540010:56 15396-20Rangetrend3long11:12 1548011:40 15465-75Trend downbreakout4short12:20 1540612:54 15497+455Breakout upfade5long13:12 1552913:58 15530+5Trend downtrend6short14:40 1546614:44 15517+255Trend downretest7long15:38 1566515:37 15758+465Rangebreakout8long16:33 1555716:39 15524-165Trend downbreakout9short17:41 1556517:35 15543-110Breakout upretest Illustrative. Seeded sample data, not a real result.

Prop firm sim

Your odds of passing, not your best run.

Walk a run through an evaluation the way a firm would score it, then resample it many times. One pass tells you very little. The distribution behind it tells you what to expect, including how deep the drawdown gets on the way.

  • Evaluation rules as the firms write them
  • Monte Carlo resampling around the empirical result
  • Drawdown and time to pass, as distributions
taigalabs.dev/strategy/prop-firm-simEvaluationStarting balance140,000Profit target11,000Max drawdown6,000Trailing lockoffEOD cutoff17:00Empirical pass rate38%PASS + FAIL (19)Monte Carlo pass-rate distribution0-10%510-20%2220-30%5930-40%7940-50%9750-60%7760-70%4370-80%1580-90%590-100%1Max drawdown reached0-80012800-1600361600-2400492400-3200473200-400094000-480024800-56000Days to pass4-7d28-11d1212-15d3616-19d6520-23d4924-27d928-31d1 Illustrative. Seeded sample data, not a real result.

Intelligence

Compare runs without fooling yourself.

Runs are ranked on a composite and on its parts, and every figure carries the percentile it sits at within the comparison. The statistics are recomputed in house from the trades rather than read off whatever produced them.

  • A composite you can see the weights of
  • Every metric beside its percentile in the set
  • Recomputed from trades, not taken on trust
taigalabs.dev/strategy/intelligenceRanking#RunCompositePFSharpeSortinoMax DD1run A0.99094%1.25990%0.21088%0.08783%1284979%2run B0.74959%1.05158%0.10652%0.04050%3436742%3run C0.43526%0.92522%-0.04819%-0.05712%2376212%Recomputed in houseTradesNet P&LSharpePSRSortinoMax DDRecoveryrun A15608.0k1.2630.3600.56710.2k0.27run B71619.5k0.9390.8710.53320.1k0.64run C148812.2k2.2270.1450.10230.1k0.22 Illustrative. Seeded sample data, not a real result.

What a backtest is worth.

Nothing fills inside a bar

Stops fill at the close that crosses them, plus a tick. The same rule a live account would feel.

Labels arrive when they would have

A regime label reaches your strategy at the moment it would have been known, delay included.

Every run is reconciled

Equity is rebuilt, fills are matched to orders, and anything that does not add up is named rather than smoothed.

Free during the alpha.

We invite traders in small groups. People on the waitlist get in first.

Request access