A contract is taken once a day: the same
contract relayed by another group is recorded as a duplicate and never bought.
Calls from the Home group are exempt, because a second call from our own
desk is a revision rather than an echo. Leave it as none and no group is
exempt. The rule itself is the One trade per contract per day gate on the
Rules page.
Get API ID/hash from my.telegram.org. Stored encrypted in the database — never in files.
Accounts
Account
Subscriber
Broker
Worker
Restarts
Orders
Controls
Subscribers
Name
Plan
Status
Broker keys
Users, broker accounts and their keys are all managed on the Users tab.
Live activity
Errors & logs
Add user
Keys are encrypted (AES-256-GCM) before they touch the database and are never shown again. Leave them blank to create the user now and add keys later.
Users
loading…
Settings
Stored in the database and applied immediately — no restart, no editing .env.
Values still in .env are shown as the fallback until you save one here.
loading…
Checks that used to sit here — Test email delivery among them — are under
Tests.
Groups monitored
loading…
—
No trade signals.
Monitoring Telegram groups for F&O signals…
Performance
Every call we gave, beside the round trip the account's real order book
shows for the same contract. The outcome is read off the real exit price against
the call's own levels, and the P&L is the broker's own — the figure the
Angel app displays. A position still held has no P&L until it is sold, and
picks one up on the run after the exit appears. The broker book is captured once
each weekday at the time set below and cannot be fetched for a past day, so
a day it never ran can never be matched.
loading…
Trading rules
Everything that decides what happens to a position. Default holds the
numbers every instrument inherits — the ladder, the giveback, the clock, and the
safety gates, which are different in kind: each
gate ships in the safe position, and turning one off does not add a feature, it
re-opens a specific failure that has already cost this account money. Every gate
card names the incident and the date. Each instrument tab sets the same
numbers for itself where it needs to differ, and can be blocked outright.
Common holds what is not one instrument's to set. Everything takes effect
on the next tick, including on trades already running.
Common to every instrument
The rules that are not one instrument's to set. Everything an instrument can
change for itself is on Default and on its own tab.
loading…
Default — what every instrument inherits
These are the numbers a trade runs on unless its own tab overrides them. Change
one here and it moves every instrument that has not set its own, immediately and
on trades already running: it moves where FUTURE milestones sit, and can never
lower a stop that has already been raised to one. An instrument tab's
Reset to Default brings it back to exactly this set.
loading…
loading…
Rules that are not settings
The shape of the engine, each one written where it is enforced so the page and the
code cannot drift apart quietly, and each with the reason it exists — a rule with
no reason attached is the first one somebody simplifies away. Seven carry a
enforced badge, meaning a gate above controls them;
a OVERRIDDEN badge means that gate is currently
away from its shipped position. The rest are marked
no switch — they describe how the engine works
rather than a choice between two behaviours.
loading…
Tests & diagnostics
Everything here is safe to run against the live account: no test places,
modifies or cancels an order. Two of them write to the database — rebuilding
the signal record, and fetching charges — and each says so where it sits.
Capture broker book and Fetch charges stay on
Performance,
because both act on the date range selected there.
System health
Feed state, rate-limit refusals, feed churn and worker starts, counted from the
logs. Reads only.
Price latency test
Times real LTP calls against the live broker and compares them with the
WebSocket feed. Places no orders.Run test goes now at one call per
second; Schedule runs it unattended at the given IST time at one call per
two seconds, leaving the live feed headroom under Angel's limit. Contracts
and Seconds apply to both. Run it during market hours — an idle market has no
price movement to be late about.
Reconcile calls against the broker's book
Pairs each Telegram call with the round trip the account's real order book shows
for the same contract, and stores both halves — the call's entry/target/SL beside
the broker's actual buy, sell, charges and P&L. The outcome
(target hit, SL hit, exited) is read off the real exit price,
not off what the monitor intended.
Writes to the database. Places no orders and contacts no broker — it reads
what was already captured. Safe to run repeatedly: rows are keyed per contract per
day opened, so a re-run updates rather than duplicates. A position still open is
stored without a P&L and picks up its exit on a later run.
Only reaches days whose broker order book was captured. A day never
captured cannot be matched and never will be — those calls are listed below as
having no fill, rather than being left to look like a quiet day.
Rebuild signals from Telegram
Re-reads every message still stored under Telegram Live and records any
signal missing from Filtered Trades — for a stretch where ingestion was
down, a group was added late, or the parser was fixed afterwards. It fixes the
count of what we were given. It places no orders and adds nothing to a
user's traded positions: a signal no monitor ever saw was never traded, and the
Performance report's “trades we gave” keeps meaning trades we actually
placed. Safe to run more than once — a signal already recorded is skipped.
Writes to the database. Only reaches back as far as the messages
themselves, which are pruned daily to the retention window — a day already swept
cannot be recovered here either.
Replay a month against the rules
Takes every call the Telegram groups gave over a window, fetches the
one-minute price history of the exact contract each one named, and drives it
through the same rules the live monitor uses — the ladder, the givebacks, the entry
cutoff, the square-off and all eight safety gates, read from
Rules at the
moment you press Replay. Change a number there, press it again, and the difference
is that number. Places no orders and writes nothing to the trading tables.
Each run is shown twice — under your saved rules and under the
shipped defaults — so an edit can be read against what it replaced rather
than against nothing.
The result is a floor, not a forecast. Angel's finest history is one minute
and the monitor decides on ticks 0.2s apart, so in any minute where both the stop
and a higher level were touched the real order of events is unknowable. Every one of
those is resolved against the trade — the stop is taken first — and the
count is reported below, because a result that leans on that assumption heavily is
a different kind of answer from one that does not. P&L here is gross:
charges cannot be modelled without a real order, and assuming one would always
flatter the number.
Fetch contacts the broker and needs a running Angel account; it stores one
JSON file per contract per day under data/backtest/candles/ and is
skipped for anything already there. Replay reads only those files — no
broker call, no network — so it can be re-run as often as you like. A day can only
be replayed if a scrip master was cached for it: today's no longer lists a contract
that has since expired.
Rules this test will useunchanged
These start as the rules the system is running right now. Change any of them and
the replay uses your version, while the live engine carries on with the saved
ones — nothing here is saved, and no account sees it. The second column of
the result is always the live rules, so an edit is read against what it would
replace. To make a change real, set it on
Rules.
Contract history archive
Keeps the one-minute history of every contract our calls have named, until it
expires. After that it cannot be fetched at all — which is why 137 of 140
calls from July can never be replayed. Runs by itself at
17:00 IST, Monday to Friday.
How it works, and why the deadline is
real
Angel's history is addressed by the contract's broker token, a token comes only
from the scrip master, and the master lists contracts that have not yet expired —
so once a contract expires the request for its prices can no longer even be
formed, at any granularity.
Each nightly run first puts today's new contracts under archive, then fetches
every session day the tracked contracts are missing — so a contract called once
on Monday still gets its Tuesday, its Wednesday and every day up to expiry, which
no later call would ask for. A day already on disk is never re-fetched, so
running it by hand costs nothing.
A call the monitor actually armed needs no working out: it resolved the contract
against the list of the day the call arrived — the correct one, by definition —
and wrote the broker token down. For the rest, where the call named a month
rather than an expiry and the only contract list we hold is newer than the call,
which expiry it meant cannot be established, so every expiry it could have
meant is archived. Keeping a contract that turns out not to be needed costs a
few requests once; not keeping the right one cannot be undone. That is a decision
about what to store, not about what a call meant — the replay still refuses to
price those calls.
Find contracts reads stored calls and resolves each to the contract it
named; it fetches no prices and is safe to re-run. Keep history from
reaches back before the day a contract was first called, for one that was trading
before we were given it; leave it blank for the first call's own day. Fetch
needs a running Angel account and stops at the last closed session — today is
never stored until after the close, because a part-day file looks complete to
every later reader.
History on a row lists the days actually on disk for that contract and
opens each one's minutes — a days-stored count is not evidence that the days hold
prices. ZIP takes that contract's whole history; ticking rows and pressing
Download selected takes several at once. Every file goes in exactly as the
broker sent it, because the point of a download is to check the replay outside
this page, and a repackaged file is our version of the evidence rather than the
evidence.
1 · Find contractsreads stored calls · no broker
2 · Fetch missing daysneeds a running Angel account
Nightly runweekdays, after the book capture
Test email delivery
Sends one message through the configured SMTP settings. Every user-facing mail —
the sign-in code, the invite, the Paytm login reminder — goes the same way, so a
failure here is a failure of all of them.