Overview
Ticks published
last 30 minutes, from this browser's own countSources
| Name | Route | Server | Login | Status | Ping | Quotes | Age |
|---|
Symbol quality
| Symbol | Status | Ticks/min | Spread % | Deviation % | Age |
|---|
Outside the ticking window
Terminals offering themselves
A MetaTrader terminal with the bridge Expert Advisor is running and presented this engine's bridge token, but no source uses it yet. Add it and its prices start feeding your rules; ignore it and nothing happens.
| Account | Server | Offset | Symbols it can stream | Last seen |
|---|
Your source accounts
One login per row. A login can be open in one place at a time: while this engine holds it, do not sign in to the same account from a terminal, or the feed drops for about twenty seconds.
| Name | Type | Server | Login | Standby | Status | Offset |
|---|
Add a source
Check an expression
priced against your sources right now, nothing saved"source:symbol" — the quotes are required, because a source name and a symbol are joined by a colon and that is not a plain identifier.
Ways of combining — these drop an operand that stopped ticking and carry on with the rest:
median, safe_median, avg, geomean, widest, min, max, mid.
Taking the first operand still ticking, in the order you wrote them:
failover, failover2s, failover5s, failover10s, failover30s, failover60s, failover180s
— the window in the name is how long a silent operand is waited for, which is also what a switchover costs; plain failover uses the engine's ticking window.
And
persist to keep a value ticking when its inputs die, spread, round, and arithmetic between any of them.
Schedule syntax
the same syntax as DealerX, in MT server time| * | always — the default when the column is empty |
| 21:30+900 | every day at 21:30, for 900 seconds |
| Fri 21:30+15m | Fridays only. Lengths take s, m or h; a bare number is seconds |
| 01 00:00+2h | the first day of each month |
| 2026.09.17 01:00+30m | once, on that date |
| news±120s | around each event in this client's news calendar |
Comma-separated windows are allowed. Outside every window a rule produces nothing new and its last value stands — a feed has no way to withdraw a price it already sent.
Rules
One row per symbol. Preview prices the edited rules against your sources right now, without saving. Save keeps a backup of the previous version, writes the file and reloads the engine without a restart.
Preview
| Symbol | Live bid | Live ask | Preview bid | Preview ask | Δ bid | Δ ask | Note |
|---|
Connecting an MT4 server
what your administrator does once, at their end- In the MT4 Administrator, open Feeds and add a data feed of type UniFeeder.
- Server: this engine's address and the feed port. Ask us if it is not reachable from your server: the port has to be open between the two machines and nothing else.
- Login and password: one of the channels below. A channel is not a trading account — it exists only to receive prices, and each one can carry its own markup.
- In Symbols, map each symbol to the name the feed sends. The names are exactly the output symbols on the Rules page.
- Enable the feed. Prices arrive as they happen; there is no polling interval to set.
A channel can be open in one place at a time. If prices stop when a second server connects with the same login, that is why — give each server its own channel.
Connecting an MT5 server
a different route, same channelMT5 has no UniFeeder input, so it does not take the feed the way MT4 does. It receives through the GT Feed Receiver, a plugin installed on the MT5 server and packaged separately from this engine.
- Install the GT Feed Receiver on the MT5 server, as that server's administrator.
- Point it at this engine's address and the same feed port MT4 would use. Nothing on this side differs between the two.
- Give it one of the channels below as its login. Every server needs its own row: a channel is open in one place at a time, and two servers sharing a login take turns being disconnected.
- Set that channel's Wire column to T so each price carries this engine's own receipt time, and add K if you want the connection kept warm while the market is quiet. Without T the receiver stamps prices with the MT5 server's clock and records that it did.
- Map each symbol to the output names on the Rules page, the same as MT4.
The Receiver is a separate package. If your MT5 server does not have it yet, ask us for it before configuring a channel — the channel will connect and simply carry nothing.
Channels
A channel is the login an MT server uses to receive your prices. Markup and caps here apply after the rules, per channel, so one rule set can feed several servers differently.
| Login | Name | Offset min | Bid markup | Ask markup | Min spread | Max spread | Wire | MT servers |
|---|
Add a channel
Tick history
…What is recorded
One file per output symbol per day, named SYMBOL-YYYYMMDD.csv, in the engine's data folder. Three columns, no header on disk:
| Column | What it holds |
|---|---|
| epoch_ms | When this engine received the tick, in milliseconds since 1970 UTC — never a server's local clock. A file opened months later must not need to be told which zone it was written in. |
| bid | The published bid, at the rule's digits, after markup for the channel it went to. |
| ask | The published ask, the same way. |
What is recorded is what was published, not what arrived from a source. To see what each source contributed to a price, use Replay.
Export
one symbol, one dayThe download carries a header line the file on disk does not have, so a spreadsheet opened by somebody who was not here still says what each column is.
How much a year would cost
| Per day | Per month | Per year |
|---|
Days on disk
Oldest is deleted first when the size limit is passed. Today is never deleted.| Day | Symbols | Size |
|---|
By symbol
| Symbol | Days | Size |
|---|
Markup that stays small but widens now and then
A fixed markup is easy to measure from the outside: a client who watches long enough knows exactly what is added and can price around it. A drawn markup is not. Each draw is held for a while, then a new one is taken, most of them near the low end and a few much wider — the shape of a real dealing desk rather than a constant.
Every draw comes from markup_seed, so a replay of the same period reproduces the same markups exactly. Without that, no dispute about a past price could ever be settled.
| Symbol | Lowest points markup_min | Highest points markup_max | Usual up to points markup_split | Wide share percent markup_p_high | Hold markup_hold_sec | Seed |
|---|
markup_max empty, or no higher than markup_min, to switch the draw off and keep the plain markup only.Adaptive spread: the range follows the market
Four things widen the range the draw happens inside, each with its own sensitivity. They multiply the markup rather than replace it, and the result is held between markup_floor and markup_cap — the cap is the safety limit, and it is what stops a bad minute from producing an absurd price.
| Symbol | Volatility adaptive_vol_scale | Sources disagree adaptive_dis_scale | Sources down adaptive_health_scale | Schedule & news adaptive_sched_scale | Floor points | Cap points |
|---|
Markup per symbol
What the client pays above the aggregated price. Fill either the points column or the percent column; leave both empty for none. A point is the price's last digit: 5 points is 0.05 on gold at 2 digits and 0.00005 on EURUSD at 5.| Symbol | Bid markup points | Ask markup points | Bid markup percent of mid | Ask markup percent of mid | Spread now | Effect on the client |
|---|
Market watch
Prices are pushed as they happen · connecting…exclude_dev_scale — with the reason under it. Click a row for its replay.Replay
Why was a symbol at that price at that moment: every source tick and rule value that fed it, oldest first.
| Time (server) | Local | Kind | Name | Bid | Ask |
|---|
Change history
Every change made through this panel: who, when, from where, and the lines that changed. Passwords are never shown.
| When (server · local) | Who | From | What | Change |
|---|
Alerts
You are told once when something changes, and once when it is back: a source down or not opened, symbols that stop ticking, a channel with no MT server connected for two minutes, and engine start, stop and mode changes. Repeats inside a minute are not sent.
What broke, and when it came back
…Every time a source, a symbol or the licence changed state — whether or not a message was sent. Alerts are quiet on purpose, so an outage inside the quiet window is never announced; it is still here in the morning.
Backup
Your rules, sources, channels and calendar in one file that only your passphrase opens, kept on the engine and shipped to storage you own. Source passwords travel inside the sealed file, so an archive restores on any GT Feed engine with the passphrase alone. GT cannot open your archives without it, and cannot recover a lost passphrase.
Restore test and restore
Pick an archive and enter its passphrase. The test opens it and checks every file against its manifest without writing anything. Restore replaces your rules, sources and channels with the archive's contents (the current files are copied to backup\ first) and reloads the engine.
Clients and packages
What each client may use. Source types: MT4, MT5, FIX, terminal bridge. A simulator is not part of any package: it invents prices, so only GT may add one. Caps of 0 mean no cap. Both caps are refused here when a client saves, and checked again when the engine starts, so a hand-edited file cannot get past them either. Sources beyond the cap are dropped in file order and named in the journal; output symbols over the cap are reported and left running, because rules refer to one another and the MT server of a client is already being served them.
Shown to the client is what they may open, here and on any console reading this engine: an unticked view disappears from their menu and its address answers as though it never existed. It takes effect the next time they load a page. You are a GT admin, so you always see every view yourself, whichever client you are standing in.
| Client | MT4 | MT5 | FIX | Bridge | Max sources | Max symbols | Shown to the client | Note | Sources | Output | Users |
|---|
Users
| Login | Role | State |
|---|
Add a user
API tokens
a login for a machine, not for a personA program reading this client's feed card sends its token in the X-GT-Token header. Each token reaches and nothing else — not other clients, and not the engine's own settings.
| Label | May | Issued | Last used | State |
|---|