Strategy Builder
Configure a new strategy top-to-bottom · save it or fire it straight to the broker.New Strategy
| Leg ID | Idle | Hedge | Side | Fut/Opt | Type | Strike Selection | Strike Value | Expiry Selection | Expiry | Qty (Lots) |
|---|
Contract Rollover
Strategy Risk Settings
(set Combined SL above — preview rebuilds as you type)
(set Combined Target above — preview rebuilds as you type)
(enable trailing and fill Trigger / Step / Lock to arm it)
Order sequencing & failure policy
buy_first avoids the SPAN spike when selling naked options.Futures/Synthetic use the forward (premium/discount to spot) — e.g. spot 20000 but futures 20080 picks a higher ATM strike. Backtest: spot uses the cash series, futures/synthetic use the archived synthetic-future.0 = back-to-back.cancel_all unwinds the already-placed legs (safest). keep_placed trades a partial basket.retry_failed. After this many attempts, the policy falls back to cancel_all.Risk + Timing
Days + Capital Sizing
Notifications
config.yml → notify.telegram. Empty config = log-only.Order type / Product
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.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.⇄ Copy Trading settings
Add Broker Account
Credentials live in the engine's SQLite store and are masked in every read response. Kite Connect requires API Key + Secret from kite.trade; Access Token expires daily and must be refreshed.
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.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
| Strategy | Signal Types | Remove |
|---|---|---|
| add a strategy to configure its signal types | ||
Link Brokers
| Strategy | Broker Accounts (× multiplier) |
|---|---|
| add a strategy first | |
Signal Dashboard
Cumulative Signal Logs
New Portfolio
A Portfolio bundles one or more saved Strategies, each pinned to a Broker with a size Multiplier. Risk caps below stop the whole container when breached — the engine will not start any further Strategy in this Portfolio for the day.
Assign Broker
Assign one saved Strategy to one Broker Account with a size Multiplier. The Multiplier scales the leg lots and any ₹-based SL / Target (PNL-mode rungs); points / % / underlying-move / delta stay unchanged. Each broker account can be used once per strategy — no duplicate deployments.
Assign Broker
Run this strategy live through one or more Broker Accounts. The Multiplier scales leg lots and any ₹-based SL / Target; points / % / underlying-move / delta stay unchanged. No portfolio needed — assign a broker and you're done.
Include Strategy
Group a saved Strategy into this Portfolio. This is organisation only — the strategy goes live once you Assign Broker. Portfolio risk caps then apply to all its deployed strategies.
Webhook
Fire a saved portfolio from TradingView, Chartink, or any HTTP source.Your endpoint
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
Sample template — copy & fill ● mandatory ● optional
{
"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)
}
}
{
"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
}
}
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
"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.Portfolio level
Holding-time analysis
Strategy level
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.| Date | ATM | Expiry | DTE | Open | Close | Reason | 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. | ||||||||||