FNOTrader FNOTrader Algo
connecting…

Strategy Builder

Configure a new strategy top-to-bottom · save it or fire it straight to the broker.

New Strategy

1 Strategy2 Instruments3A Entry3B Exit3C BTST/STBT4 Legs5 Risk & Cascading6 ExecutionSave
1 Strategy name your strategy and (optionally) start from a template
Name your strategy descriptively (shown in the Strategies page). Symbol is the underlying — every Step-2 instrument inherits it; override per-row if you need to mix. Template seeds Steps 2-6 with a recipe; tweak any field afterwards.
7 Strategy Summary consolidated view of every variable you've set — open to verify before saving
Show summary

Strategy View

Two views of the same data — by strategy, or grouped by broker account. 🔗 Broker deploys to an account; 📦 Portfolio optionally groups. Expand any row for its positions, orders, trades & logs.
no saved strategies — open Builder and click 💾 Save Strategy

Broker Accounts

Connect once, trade everywhere — accounts are shared across Options, Trade & Algo. Enable an account to let live strategies place orders through it; copy-trading mirrors them to your other accounts.

Copy Trading

Place once on the leader; the engine mirrors to followers with a size multiplier. Accounts are managed on the Broker Accounts page.
loading…

⇄ Copy Trading settings

Followers & multipliers — when you trade on the leader, each enabled follower gets leader lots × multiplier. (The leader can't follow itself.)

Portfolios

Deploy saved Strategies on a Broker with a Multiplier. Portfolio-level risk caps stop the whole container when the daily loss cap is hit.
no portfolios yet — click + New Portfolio to create one

Signals

Create a signal → it gets its own webhook URL. Send it from TradingView, Python, Amibroker, NinjaTrader or any program (or fire it manually). On hit, the linked strategies run / square-off on their broker accounts. We only receive signals — we don't generate them.

Signal Configuration

Strategy Selection

StrategySignal TypesRemove
add a strategy to configure its signal types
Signal types fire in the order shown — e.g. Long Exit, Short Entry closes longs first, then opens shorts.

Link Brokers

StrategyBroker Accounts (× multiplier)
add a strategy first

Signal Dashboard

no signals yet — name one above and Save Signal Config

Cumulative Signal Logs

no logs available

Webhook

Fire a saved portfolio from TradingView, Chartink, or any HTTP source.

Your endpoint

Send POST naming a saved strategy + an optional signal. Any {{signal.<field>}} placeholder in the strategy's saved params is filled from the signal before it runs — so one template runs with whatever the alert sends (symbol / qty / side / strike / legs).

Build your trigger

Pick a saved strategy, choose what the signal should carry, and copy the generated URL + body straight into TradingView / Chartink / your script. Fields you leave blank are omitted.
1 · Webhook URL (TradingView "Webhook URL" field)

        
2 · JSON body (TradingView alert "Message" box)

        
3 · curl (test from any terminal — fires the strategy for real)

        

Sample template — copy & fill mandatory   optional

Directional — Futures / Cash
{
  "saved_strategy": "my_template",   // required — saved strategy name
  "broker_id": "paper",              // optional — broker override
  "signal": {
    "symbol": "TCS",                 // your {{signal.symbol}}
    "instrument": "FUT",             // FUT (front month) | EQ
    "side": "BUY",                   // BUY | SELL | EXIT_BUY | EXIT_SELL
    "qty": 1,                        // lots (FUT) / shares (EQ)
    "sl": 10,                        // optional — stop-loss in points
    "tgt": 20,                       // optional — target in points
    "trail": "5/3"                   // optional — trail step/jump (pts)
  }
}
Options — multi-leg
{
  "saved_strategy": "my_template",   // required
  "broker_id": "paper",              // optional
  "signal": {
    "underlying": "NIFTY",           // NIFTY | BANKNIFTY | SENSEX | <stock>
    "legs": [
      { "side":"BUY",  "qty":10, "type":"PE", "strike":"ATM",   "expiry":"current" },
      { "side":"SELL", "qty":10, "type":"CE", "strike":"ATM+2", "expiry":"current" }
    ]
    // side BUY|SELL · type CE|PE · strike ATM / ATM±n / 23500 · expiry current|next|YYYY-MM-DD
  }
}
Only saved_strategy is truly required. The signal fields are whatever {{signal.*}} placeholders your strategy uses — these two are the recommended shapes. Copy gives clean comment-free JSON ready to paste into TradingView / Chartink / your script.

Body

{
  "saved_strategy": "my_template",   // saved strategy to fire
  "broker_id": "paper",              // optional broker override
  "signal": { … }                    // fills {{signal.*}} in the template
}

Signal — Directional (Futures / Cash)

"signal": { "symbol":"TCS", "instrument":"FUT", "qty":1,
            "side":"BUY", "sl":10, "tgt":20, "trail":"5/3" }
// instrument: FUT (current month) | EQ ·  qty: lots (FUT) or shares (EQ)
// side: BUY | SELL | EXIT_BUY | EXIT_SELL ·  sl/tgt/trail in points (optional)

Signal — Options (multi-leg)

"signal": { "underlying":"NIFTY", "legs": [
    { "side":"BUY", "qty":10, "expiry":"2026-06-23", "strike":"ATM",  "type":"PE" },
    { "side":"BUY", "qty":10, "expiry":"2026-06-23", "strike":23500,  "type":"CE" }
] }
// strike: absolute (23500) or relative (ATM, ATM+2…) — engine resolves ATM from live spot

Wiring placeholders in the Builder

Build a strategy and set the fields you want signal-driven to placeholders — e.g. "qty":"{{signal.qty}}", "strike_offset":"{{signal.offset}}", or the whole "legs":"{{signal.legs}}" — then Save it. The webhook fills them per call.

Example

curl -X POST <your-webhook-url> \
  -H "Content-Type: application/json" \
  -d '{ "saved_strategy":"my_template", "broker_id":"paper",
        "signal": { "underlying":"NIFTY",
          "legs":[{"side":"BUY","qty":10,"expiry":"2026-06-23","strike":"ATM","type":"PE"}] } }'

Backtest

Backtest History

Every backtest you run is saved here. Click any row to reload the full report — no need to re-replay the bars.
Run (IST) Strategy Symbol From → To Cost / Slip Net PnL ₹ Trades Win % Max DD ₹ Actions
No backtests yet — run one from the Backtest tab.

Stats

Live performance from every executed run — overall, per portfolio, per strategy. Captured automatically when a run finishes; gate-blocked runs are excluded from the metrics.

Equity curve

cumulative realized P&L by day, with the drawdown band — same read as the backtest report.
loading…

Portfolio level

loading…

Holding-time analysis

loading…

Strategy level

click a strategy for its run-by-run drill-down
loading…

Historical Charts

Replay any trading day's CE / PE option candles and combined premium straight from the bar archive, with backtest entry/exit markers. Cursor is synced across all three charts.
Pick a date and click Load charts, or click a backtest day row below.
DateATM Expiry DTE OpenCloseReason PnL ₹ Cum PnL ₹ DD ₹ Legs (entry → exit)
Select a backtest result above to see its per-day trades. Click any row to load that day's CE/PE + combined charts with entry/exit markers.

Risk Settings

Per-user daily loss kill-switch + trade count cap. Resets at IST midnight.

Limits

When realized P&L falls below −X, kill-switch trips: running strategies flatten, new ones refused.

Per-Broker Hard Limits

Caps applied to every strategy routed through a broker account — across all portfolios.
Daily Loss Cap — when today's combined P&L across the account drops below −X, every live run on it is squared off and no new runs launch until IST midnight. Max Concurrent — refuse to launch a new run once this many are already live on the account. Capital Cap — refuse an order whose margin would push exposure past this. 0 = no limit.
loading…

Today's state

loading…