← Back to QuantathonMinix Quantathon Logo
Participant Guide

MINIX Research Platform

Strategy Development Guide — a walkthrough of the platform, from login to a completed backtest.

Internal reference document
1

Introduction

This document walks through the MINIX Research Platform end to end: signing in, creating a new strategy, writing the strategy_logic function, configuring a backtest, running it, and reading the results.

The overall flow is: log in, open My Strategies, start a new strategy, fill in the hypothesis, write and configure the code, run the backtest, then check Logs, Orders, Trades, Tearsheet and Result once the run completes.

2

Logging In

Every session starts at the MINIX login screen. Enter your registered email and password, then select Log in.

The MINIX login screen

Figure 1 — The MINIX login screen.

3

My Strategies Dashboard

After signing in you land on My Strategies — a table listing every strategy you have saved, along with its data source, capital, underlying and lot size. From here you can search existing strategies or remove one using the bin icon on the right of its row.

My Strategies table with a New Strategy button

Figure 2 — My Strategies. The "+ New Strategy" button is in the top-right corner.

To continue: Select "+ New Strategy" in the top-right corner to begin a new strategy.
4

Creating a New Strategy

Selecting "+ New Strategy" opens a short intake form. This is where the strategy is registered before any code is written.

Strategy Hypothesis form

Figure 3 — The Strategy Hypothesis form.

Fields on this form

FieldWhat to enter
Strategy IDGenerated automatically — the next free ID based on your existing strategies. Normally left as-is.
Strategy NameA short, identifiable name. This is what appears in the My Strategies table and on the editor tab.
Hypothesis DescriptionBetween 100 and 50,000 words. Describe the market assumption, the entry and exit rules, the expected edge, and the main risks. Write it in enough detail that it lines up with the strategy_logic code you are about to write, rather than a general statement of intent.

Once all three fields are complete, select Next to open the code editor.

5

Strategy Editor and Configuration

This is the main workspace. The left-hand pane is a Python editor where the strategy_logic function is written. The right-hand pane is the Strategy Configuration panel, which controls what data is fed into that function during the backtest.

Code editor on the left and Strategy Configuration panel on the right

Figure 4 — Code editor (left) and Strategy Configuration (right). Run, Stop, Config, Logs, Orders, Trades, Tearsheet and Result are on the far-right rail.

You are not limited to one strategy or one run at a time. Each strategy or test you open gets its own tab along the bottom of the editor, so you can run more than one backtest at once and click a tab to jump straight back to that strategy.

Bottom tab strip showing multiple open strategies

Figure 4a — Bottom tab strip: each open strategy or test keeps its own tab, so you can switch between runs without losing your place.

Configuration fields

FieldPurpose
ModeBacktest, Paper Trade or Live.
Data SourceFor now, only 1-minute and 5-minute resolution data is available. Both Index F&O and Stock F&O are supported.
Start / End DateThe backtest date range. Data is available from 2023 through to the current date in 2026.
CapitalStarting capital for the backtest.
UnderlyingThe index or equity symbol, e.g. NIFTY.
CycleWhich expiries to pull — weekly (W1–W5) or monthly (M1–M3).
Option Type / StrikeCE/PE selection and strike offsets (ATM, ATM+N, ATM−N).
Lots / Fixed QtyPosition size per leg.
DTEDays-to-expiry filter.
Name / ID / CommentsCarried over from the hypothesis step. Comments are optional notes.
Performance tip: Only select the cycle and strike range the strategy actually trades. Selecting every cycle and a wide strike band pulls far more tick data than needed and slows the backtest down — keep the filters as close as possible to the ATM/expiry combination the strategy uses.
6

Strategy Logic — API Reference

Every strategy implements exactly one method, called once for each market tick during the backtest.

Code Documentation showing Strategy Structure and Tick Data Structure

Figure 5 — Code Documentation: Strategy Structure and Tick Data Structure, from the platform's Data Docs tab.

Function rule: Write only a single def strategy_logic(self, tick) method. Do not define any other functions outside it, and do not use async or await anywhere in the strategy code — the platform calls strategy_logic synchronously for every tick.
For now: Do not use the platform's built-in AI code assistant to generate strategy_logic. Write and review the code yourself using the Minix framework API until that feature is confirmed reliable for live and backtest use.
Note: No margin calculation is applied on this platform. Only the initial capital deployed in the strategy is considered.

Best practices (code-level)

  • Check that data exists before using it, e.g. if symbol:
  • Use hasattr(self, "_strategy_init") to initialise persistent state exactly once, not on every tick
  • Handle zero or None prices, e.g. if price and price > 0:
  • Wrap timestamp parsing in try/except
  • Restrict execution to market hours — 09:15 to 15:30 IST
  • Check existing positions with self.get_existing_qty() before sending new orders, to avoid over-trading
  • Use print() or logging inside strategy_logic — it is the main way to debug a run once it is underway
Reference: For the complete function and market data field reference, check the platform's Data Docs tab.
7

Market Data Reference

Backtests can run at 1-minute or 5-minute resolution, across NSE options and futures, on Index F&O and Stock F&O, with history available from 2023 through to the current date in 2026. Each row is a single tick for one contract; spot data at the same interval joins directly on timestamp.

Futures data schema documentation

Figure 6 — Futures data schema, from the platform's Data Docs tab.

Options data schema documentation

Figure 7 — Options data schema, from the platform's Data Docs tab.

Data quality: A small number of trading dates have corrupted or incomplete records. If a backtest range spans any of these dates, treat the results with caution — the simplest approach is to exclude them outright. A CSV of the affected dates is available for download from the Data Docs page.
8

Paper Trading Mode

Switching Mode to Paper Trade replaces the configuration panel with broker and portfolio details, so the same strategy_logic code can run against a live or simulated broker connection instead of historical ticks.

Paper Trade setup form with Portfolio ID, Strategy details and Broker Details

Figure 8 — Paper Trade setup: Portfolio ID, Strategy Name/ID, Initial Amount, and broker Host, Port, Username and Password.

9

Running and Monitoring a Backtest

Once configuration is set, select Run on the right-hand rail. Once the run completes, each output tab is populated:

Live Logs tab showing backtest output

Logs — live output from a completed backtest run.

Orders tab listing every order sent during the run

Orders — every order sent during the run, with side, quantity and price.

Trades tab showing completed round-trip trades

Trades — completed round-trip trades with entry/exit prices and PnL.

Tearsheet tab showing GO/NO-GO gate criteria and performance metrics

Tearsheet — GO/NO-GO gate criteria and key performance metrics.

Result tab showing performance summary and portfolio performance chart

Result — performance summary and portfolio performance chart.

What a completed run looks like

Watch the Logs tab while the backtest runs — every print() or log statement inside the strategy appears there in real time. A successful run means every tick in the selected date range was processed. The platform confirms this explicitly at the end of the run:

Log output confirming Run complete, trades saved, file closed

Figure 9 — A clean finish: the strategy stops, saves remaining trades, and closes the file.

Once "Run complete" appears, switch to Orders, Trades, Tearsheet and Result to review the backtest output.

10

Best Practices

  • Write the hypothesis first, in enough detail that it maps directly onto the code that follows.
  • Keep Cycle and Strike filters narrow — only what the strategy actually trades — for a faster backtest.
  • Initialise persistent state once, using a hasattr() guard, rather than on every tick.
  • Log generously with print() — the Logs tab is the main debugging tool while a backtest is running.
  • Exclude known corrupted dates (Section 7) from any date range that spans them.
  • Confirm the existing position size with self.get_existing_qty() before sending new orders.
  • Wait for the explicit "Run complete" message in Logs before treating Orders, Trades, Result and Tearsheet as final.
  • Write strategy_logic as a single, plain function — no extra functions outside it, no async/await.

MINIX Research Platform — internal strategy development guide.