MALOO SYSTEMATIC

Placeholder name and contact details. The firm name is still being settled, so MALOO SYSTEMATIC is standing in throughout. Everything else on this page describes the system as it actually works.

A book where nothing is decided in the moment.

We run a proprietary swing momentum book on the Indian futures and options universe. Every position it takes, every position it exits, and the size of both are determined by rules written down before the trade. There is no discretionary override, because a rule you can suspend is not a rule.

Exit conditions, checked in this order

every session · first match wins
01
The stop is hit Set at entry, 2.5 times average true range below. It ratchets up as the position gains and never widens.
close ≤ stop
02
The trend structure breaks Immediate and never deferred, whatever the position is showing. This one is not subject to the churn cap.
px < 50dma, 2 sessions
03
The rank drifts past the buffer Fifteen slots, but a holding is not sold until it falls out of the top thirty. The gap is what stops a name oscillating around the cut line from being traded every week.
rank > 30
04
The regime turns Breadth and the benchmark trend set how much of the book may be deployed. De-risking is immediate; re-risking waits for confirmation.
breadth < 40% or index < 200dma

How the book works

Rank the universe, hold the top, and let the buffer do the work.

The universe is the exchange-defined F&O list, currently 216 names. We did not pick it, which means it carries none of our opinions about which stocks deserve to be there.

Each name is scored on four measures of momentum — one-month, three-month and six-month returns, plus a risk-adjusted term that penalises a move made in a single gap rather than a sustained trend. Recent sessions are skipped, because the newest price move tends to reverse.

Names must clear hard filters before they are scored at all: above their fifty and two-hundred day averages, within a quarter of the fifty-two week high, positive three-month return, adequate traded value, and no single session in the lookback that moved more than a fifth.

universe
216 F&O names, exchange-defined
slots
15
hold zone
ranks 1–15
buffer
ranks 16–30, held but not added to
exit
rank beyond 30
new entries
5 per rebalance, maximum
cadence
weekly scan, next-session execution
sizing
inverse volatility, capped by risk
risk per position
0.6% of equity to the stop

Unfilled slots stay in cash. If only eight names clear the filters, the book holds eight names — the screen going empty is itself the signal.

Sizing has two constraints and the smaller one wins

An inverse-volatility weight keeps the book balanced. A risk budget then caps every position at six-tenths of a percent of equity measured to its stop. A name with a wide average range gets a small position by arithmetic rather than by judgement, which is where most of the tail protection comes from.

An overlay on crowd positioning, deliberately underweighted

We read the daily net position of participants in each F&O name — long futures plus long calls minus long puts — and measure how crowded each name is against its own history. It contributes fifteen percent of the final score, gates entry into names the crowd has just piled into, and trims holdings at the extreme. It is weighted that lightly on purpose. See below.

Evidence discipline

Two tests decide whether any of the rest of this is worth reading.

A backtest is trivially easy to make attractive and almost as easy to make wrong in ways that never show up until real money is on it. Two checks run against every change to the engine, and both are in the test suite rather than in someone's memory of having once looked.

Does the past know the future?

The price history is truncated at an arbitrary date, the entire simulation is rerun, and every trade before that date must be identical to the full-history run. If a future price has leaked into a past decision, the two trade logs diverge and the test fails. Lookahead is the failure that makes a broken system look excellent, which is how a broken system gets funded.

Does it invent an edge from noise?

The same system is run on data whose cross-section has been shuffled daily, so no name can hold its rank and there is no momentum left to find. It should earn nothing and churn. If that run ever shows real return, the engine is manufacturing an edge and every result it has produced is worthless.

Null test — the middle row is the one that matters
RunReturnReturn / risk Max drawdownTurnover
Data with a momentum factor presentfound 594%
Same data, momentum destroyed1.6%0.18 −35.1%1109%
Pure random walk3.8%0.77 −8.9%1345%

With nothing to find, the system trades twice as much and earns nothing after costs. That is the correct behaviour. The first row is deliberately not given a return figure — it was run on synthetic data built to contain the factor, and quoting it as performance would be exactly the sort of thing this page exists to avoid.

Parameters are checked for plateaus, not peaks

Every parameter is swept across a grid. If the best value beats its neighbours by more than a third of the spread across the whole surface, it is treated as fit to the sample and a central value is used instead. Optimising into a spike is the most reliable way to turn a system into a story.

What we don't claim

The things that would flatter our numbers, stated plainly.

  • The F&O list is survivorship-affected. It held roughly 140 different names in 2019. Any test run on today's membership is flattered, and no amount of care in the engine repairs that.
  • Stops are checked on closing prices. Without intraday data this is the honest option, but it errs in both directions — missing breaches that recovered, and filling gap-downs at the close rather than at the stop.
  • The crowd overlay is not yet validated. Roughly ten trading days of position history exist. It carries a fifteen percent weight for that reason, and the decision rules that will raise, flip or zero that weight were written down before the result is known.
  • Momentum's worst outcome is not a slow bleed. It is a sharp reversal off a bear-market low while the book still holds the previous winners. The regime filter reduces that exposure; it does not remove it.
  • Costs are real and large. At this cadence turnover runs in the hundreds of percent a year. The buffer exists chiefly to hold that down, and the drag is carried in every figure we look at rather than netted out afterwards.

We would rather be held to a limitation we published than to a number we never qualified.

The stack

One engine. The desk and the backtest cannot disagree.

The trading rules exist in exactly one place. The research simulator and the daily order desk both call it. A desk running a second implementation of the same rules is decoration — the two always drift, and you find out which one was wrong from the P&L.

Signal engine

Rolling metric panels, cross-sectional scoring, buffer rebalance, inverse-volatility sizing with a risk cap, regime state machine. momentum/

Simulator

Daily loop, signals formed on the close and executed at the next, costs on traded value both sides, stops, full turnover accounting. backtest.py

Order desk

Local application over the same engine. Positions, trailing stops, fills and crowd snapshots persist to a single file. serve.py

Test suite

Sixty-four tests covering engine invariants, the two lookahead checks, the API and the store. They run before anything ships. tests/

Contact

For counterparties, allocators and engineers.

If you want the methodology in more detail than this page carries, ask and we will send it.

hello@example.com

Replace with the real address, registered office and entity details before this goes live.