Appendix: eSignal and Other Supported Feeds
The two previous appendices covered the feeds most readers will consider. This one covers eSignal, everything else AmiBroker documents, and — more useful in the long run — a method for evaluating a plugin that nobody has documented at all.
That method matters because the roster changes. AmiBroker’s registered plugin-ID page carries a 2008 copyright and omits Norgate’s plugin entirely, even though Norgate’s is current and actively supported. The Database Settings page’s list of data sources omits IQFeed, Interactive Brokers, DDE, ODBC and Norgate. Absence from an official list proves nothing, and presence on one does not prove a product still exists. The authoritative list is whatever your installed copy of AmiBroker actually offers in the Data source combo.
eSignal
Section titled “eSignal”What is required
Section titled “What is required”- The eSignal application installed on the machine, and a valid eSignal subscription. AmiBroker communicates with eSignal’s API through the local Data Manager; it never talks to eSignal’s servers.
- A regular eSignal Real Time subscription. The documentation is explicit that this is what third-party software including AmiBroker needs. eSignal OnDemand is described as third-party compatible but delivering no streaming quotes — historical backfill only, and no tick data.
- A database created with the eSignal plugin as its data source.
Selecting it in AmiBroker
Section titled “Selecting it in AmiBroker”| Setting | Documented value |
|---|---|
| Data source | eSignal RT Data Plug-in |
| Local data storage | Enable |
| Number of bars to load | 90000 for a 1-minute database alongside long daily history |
| Base periodicity | 1 minute recommended; tick through hourly selectable |
| Intraday Settings | turn on Allow mixed EOD/Intraday data for long daily history |
The Configure dialog holds your eSignal username and password — pre-filled from the
eSignal installation if it finds one — and a Number of symbols field that must not
exceed the account limit. Two documented behaviours around that field are worth
knowing: AmiBroker re-adjusts the number downward if you exceed your subscription, and
you should deliberately lower it if you run another eSignal client in parallel, since
both draw on the same allowance.
Tick, 1-second, 5-second and 15-second base periodicities are Professional-edition features.
Backfill behaviour and limits
Section titled “Backfill behaviour and limits”eSignal is in the unlimited-backfill class and supports Wait for backfill, so the Analysis-window mass-backfill procedure described in the IQFeed appendix applies here unchanged. AmiBroker’s data-sources catalogue, self-dated 2 March 2023, records 10-day tick backfill, 60-day minute-bar backfill and roughly ten years of end-of-day history.
Three documented behaviours shape how you use it:
- Historical access is throttled during the first and last trading hour of the US session. Load large histories — tick histories above all — before the open.
- eSignal repairs bad ticks server-side. This makes
Force backfillgenuinely useful on this feed: re-requesting history can bring back a corrected version. The same operation on a feed that does not repair its history achieves nothing. - Extended intraday history is a separate product. It requires eSignal plugin 3.1
or later (AmiBroker 5.60.2 or later), the eSignal “EXTENDED Intraday data” add-on,
and the Use Extended intraday data request box ticked in
File -> Database Settings -> Configure. After enabling it you must raise Number of bars and force a backfill, or start a fresh database.
A documented failure mode
Section titled “A documented failure mode”On 64-bit Windows the eSignal plugin can vanish from the Data source combo entirely. The cause is documented: eSignal uses older Microsoft C++ runtimes, and the fix is to install the older runtime. AmiBroker’s Knowledge Base carries the article under the heading about side-by-side configuration errors in the 64-bit version. A missing plugin is a runtime problem far more often than it is a licensing one.
The most current official statement about eSignal
Section titled “The most current official statement about eSignal”Everything else AmiBroker documents
Section titled “Everything else AmiBroker documents”The table below is the roster of officially documented data plugins other than Interactive Brokers, IQFeed and eSignal, with the single fact about each that most affects whether you should consider it.
| Plugin | Local data storage | The fact that decides it |
|---|---|---|
| myTrack RT | Enable | Requires a myTrack subscription with the SDK feature enabled; 1-minute and daily base intervals only; no mixed EOD/intraday, so long daily history plus intraday means two databases |
| QuoteTracker | Enable | QuoteTracker itself is gone. Its authors sold the rights and built Medved Trader, which AmiBroker’s page says keeps the compatible API. Backfill is limited to about one day, and Wait for backfill has no effect because the source manages its own backfills |
| DDE universal | Enable | No backfill at all, stated twice in capitals. You must wait for at least three bars to accumulate before a chart appears. Up to 500 streaming symbols. Every field must be configured by hand |
| ODBC/SQL universal | n/a | Reads any database with an ODBC driver. Requires SYMBOL, DATE, OPEN, HIGH, LOW, CLOSE, VOLUME columns. Documented version 1.7.0, page last updated 2 June 2017 |
| Norgate Data | Enabled | Paid end-of-day. The plugin is installed from the Norgate Data Updater, not from AmiBroker, and it removes symbols from your AmiBroker database when a market subscription lapses |
| Quotes Plus | Disable | Paid end-of-day. Populates sector and industry names as well as quotes |
| TC2000 / TCNet / TC2005 | Enable | Paid end-of-day. 32-bit AmiBroker only — the vendor provides no 64-bit API. Enabling local storage is documented as giving a speed-up of more than ten times |
| TC2000 Mutual Funds | Enable | As above |
| FastTrack | Disable | Mutual funds. 32-bit AmiBroker only |
| Metastock | Disable | Reads a Metastock database directly. Configure -> Add folder points at the MASTER file; unlimited folders may be added, which defeats Metastock’s own symbol ceiling |
| Statica | n/a | Warsaw Stock Exchange real-time, third-party. All configuration documentation is the vendor’s; AmiBroker publishes none |
Two operational rules apply to the whole end-of-day group. The Local data storage
setting differs per vendor and is not a matter of taste — the values above are the
documented ones. And after the external source adds or removes symbols you must
return to File -> Database Settings -> Configure and press Retrieve again;
nothing does it automatically, and this is the most common cause of “my new symbols
are missing”.
Reserved identifiers that are not products
Section titled “Reserved identifiers that are not products”Three names appear in AmiBroker’s material with no usable documentation behind them, and they are worth naming so you do not spend an evening looking:
- CSI. The data-sources page lists CSI as a paid end-of-day source updated using
CSI Unfair Advantage, but the plugin-ID page marks the reserved
CSIidentifier as “not published” — there is no released CSI data plugin — and the official how-to link returned a 404 when checked on 31 August 2026. Do not describe a CSI plugin. In practice CSI feeds AmiBroker through exported files; treat that as unverified until CSI confirms it. - MarketCast. A reserved plugin ID and a passing mention. No page, no tutorial.
- QCharts. A reserved plugin ID and a name-drop on a marketing page. No page, no tutorial. A marketing name-drop is not documentation.
How to evaluate a plugin this course does not cover
Section titled “How to evaluate a plugin this course does not cover”Someone will eventually point you at a plugin for your local market that has no AmiBroker documentation. Here is how to establish what it actually does, in an order that fails cheaply.
First, establish what is loaded. Tools -> Plugins lists every loaded DLL and its
version. A DLL must sit in the Plugins subfolder of the AmiBroker directory to be
seen at all, and AmiBroker scans that folder at startup and locks loaded DLLs for
writing. This is the documented way to confirm that a manual plugin replacement took
effect, and the first thing to check when a data source is missing from the combo.
Second, ask the eight questions. Every one of them is answered somewhere in this part for the documented feeds, and every one of them has cost somebody a month’s subscription when left unasked:
- What external client software must be installed and running?
- Which base time intervals does it support, and which of those does my edition allow?
- Should Local data storage be enabled or disabled? (It genuinely differs.)
- Does it support mixed EOD/intraday, or do I need two databases?
- How deep is the backfill, and is it requested per symbol on first access?
- Does it implement Wait for backfill? Many third-party plugins do not.
- What is the streaming symbol limit, and what happens when I exceed it?
- Which real-time fields does it actually populate?
Third, measure the answers to questions two, five and eight with the probe below, because a vendor’s answer and the plugin’s behaviour are different things.
A chart panel that reports what your installed plugin actually delivers: the database grain, where the stored data ends, whether the plugin reports a real-time update timestamp at all, which named real-time fields carry values, and whether Bar Replay is quietly active.
The formula
Section titled “The formula”Complete runnable AFL
// plugin-capability-probe.afl// Part 18 - Appendix: eSignal and Other Supported Feeds//// A chart panel that reports what your installed data plugin actually delivers,// rather than what a vendor page says it delivers. Apply it to any chart, in// any database, and read the title block.//// It answers five questions that decide whether an unfamiliar or undocumented// plugin is worth building on:// 1. What grain is this database storing?// 2. Is the last stored bar where the clock says it should be?// 3. Does the plugin report a real-time update timestamp at all?// 4. Do the named real-time fields carry values, or Null?// 5. Is Bar Replay active - i.e. is what I am seeing even the live data?//// Assumptions and limits:// - Nothing here requires a live feed. On a local end-of-day database every// real-time line simply reports "not reported", which is the correct// answer and is exactly what a plugin that does not implement a field// looks like too. The panel cannot distinguish "no feed" from "feed that// does not populate this field"; only the Real-Time Quote window can.// - GetRTData() is documented as a Professional-edition function that returns// Null for every field on the Standard edition. A row of "not reported" on// Standard therefore tells you nothing about the plugin.// - Status( "lastbartimeleft" ) and Status( "lastrtupdate" ) are documented// as depending on the plugin sending correct update timestamps. Several// sources send odd timestamps outside trading hours.
_SECTION_BEGIN( "Plugin capability probe" );
// ---------------------------------------------------------------------------// Database grain// ---------------------------------------------------------------------------BarSeconds = Interval();IntervalName = Interval( 2 );
// ---------------------------------------------------------------------------// Where the stored data ends, and how the plugin describes "now"// ---------------------------------------------------------------------------LastBarStart = LastValue( DateTime() ); // timestamp of the last stored barLastBarEnd = Status( "lastbarend" ); // end of that bar; time-based bars onlySecondsLeft = Status( "lastbartimeleft" ); // seconds until that bar completesLastRTUpdate = Status( "lastrtupdate" ); // last update the RT plugin sent
// GetPlaybackDateTime() returns the Bar Replay position, or zero when replay is// not running. It is checked first because a forgotten Bar Replay silently// truncates every chart and every Analysis run, and the symptom looks exactly// like a broken feed.PlaybackPos = GetPlaybackDateTime();
// ---------------------------------------------------------------------------// Named real-time fields// ---------------------------------------------------------------------------// These are four of the documented GetRTData() field names. Which of them a// given source populates is entirely up to that source.RtBid = GetRTData( "Bid" );RtAsk = GetRTData( "Ask" );RtLast = GetRTData( "Last" );RtTotal = GetRTData( "TotalVolume" );
// A small helper so a Null field reads as a plain statement rather than as an// empty gap in the panel. Null is a value here, not an error.function Reported( Value, Digits ){ if ( IsNull( Value ) ) Result = "not reported"; else Result = NumToStr( Value, Digits );
return Result;}
function ReportedTime( Value ){ if ( IsNull( Value ) OR Value == 0 ) Result = "not reported"; else Result = DateTimeToStr( Value );
return Result;}
// ---------------------------------------------------------------------------// The panel// ---------------------------------------------------------------------------Line1 = "Database: " + GetDatabaseName() + " Symbol: " + Name();Line2 = "Base interval: " + IntervalName + " (" + NumToStr( BarSeconds, 1.0 ) + " s)";Line3 = "Last stored bar starts: " + DateTimeToStr( LastBarStart );Line4 = "Last bar ends: " + ReportedTime( LastBarEnd ) + " seconds left: " + Reported( SecondsLeft, 1.0 );Line5 = "Last RT plugin update: " + ReportedTime( LastRTUpdate );Line6 = "Bid " + Reported( RtBid, 1.4 ) + " Ask " + Reported( RtAsk, 1.4 ) + " Last " + Reported( RtLast, 1.4 );Line7 = "Total volume field: " + Reported( RtTotal, 1.0 );
if ( PlaybackPos > 0 ){ Line8 = "BAR REPLAY IS ACTIVE at " + DateTimeToStr( PlaybackPos ) + " - everything above describes the replay position, not live data.";}else{ Line8 = "Bar Replay: not active.";}
Title = Line1 + "\n" + Line2 + "\n" + Line3 + "\n" + Line4 + "\n" + Line5 + "\n" + Line6 + "\n" + Line7 + "\n" + Line8;
Plot( Close, "Close", colorDefault, styleCandle );
// Ask AmiBroker to re-run this formula once a second so the countdown and the// real-time fields move. On a database with no live feed this changes nothing// except the seconds-left figure, and costs one formula execution per second.RequestTimedRefresh( 1 );
_SECTION_END();How it works
Section titled “How it works”Interval() reports the database grain in seconds and Interval(2) gives it a name.
LastValue( DateTime() ) is the timestamp of the last stored bar.
Three Status() codes then ask the plugin, rather than the database, what it thinks
is happening. Status("lastbarend") gives the end time of the last bar for time-based
intervals. Status("lastbartimeleft") gives the seconds remaining until that bar
completes. Status("lastrtupdate") gives the datetime of the last update the
real-time plugin sent. All three are documented as depending on the plugin sending
correct timestamps, and several sources send odd stamps outside trading hours — which
is itself a finding worth having.
GetPlaybackDateTime() is checked before anything else is believed. It returns the
Bar Replay position, or zero when replay is not running. A forgotten Bar Replay
silently truncates every chart and every Analysis run, and the symptom is
indistinguishable from a dead feed.
GetRTData() then asks for four documented field names — "Bid", "Ask", "Last"
and "TotalVolume". Which of these a source populates is entirely up to that source,
so a Null is information rather than an error, and the two small helper functions
render it as “not reported” instead of a blank.
Finally RequestTimedRefresh(1) asks AmiBroker to re-run the formula once a second so
the countdown and the fields move.
Key functions
Section titled “Key functions”Status( code )— run-time information from the analysis engine and the plugin. The codes used here were added in AmiBroker 5.60.GetRTData( "fieldname" )— the most recent value of a named real-time field for the selected symbol. It returns a single number, not an array, refreshed only as often as the chart refreshes.GetRTDataForeign( "fieldname", "symbol" )does the same for another ticker and is documented as much faster than combiningSetForeign()withGetRTData().GetPlaybackDateTime()— the Bar Replay position, or zero.IsNull( x )— true when a value isNull, which is how an unpopulated field arrives.RequestTimedRefresh( interval, onlyvisible )— periodic re-execution.
Expected result
Section titled “Expected result”Test it
Section titled “Test it”Run it on two databases in succession: a local end-of-day one and whatever plugin-fed
database you are evaluating. Every line that differs is a capability the plugin
provides. Then start Tools -> Bar Replay and press Play: the last line must change
to announce that replay is active, and the last-bar timestamp must move backwards to
the playback position. Press Stop and confirm both revert.
Common errors
Section titled “Common errors”- Nothing changes once per second.
RequestTimedRefresh()has anonlyvisibleargument that defaults to true; a chart pane that is not visible will not refresh. - “Seconds left” is nonsense. That figure is documented as requiring the database time shift to be set correctly, so that displayed times match your local clock. An unset time shift shows up here first.
- A real-time field reads “not reported” during market hours. Check the Real-Time Quote window for the same symbol. If the field is populated there but not here, the likely cause is the chart refresh interval rather than the feed: the quote window updates far more often than a chart formula runs.
Extension
Section titled “Extension”Add a second symbol’s bid and ask through GetRTDataForeign() and display the two
side by side. If one populates and the other does not, you have found the symbol
rotation described in the real-time symbol-limit guidance: a symbol that has dropped
out of the active set returns stale or empty values rather than an error.
Third-party plugins and their risks
Section titled “Third-party plugins and their risks”AmiBroker’s Plugins page carries an explicit disclaimer, and it deserves to be repeated rather than summarised away: AmiBroker makes no representations about non-certified third-party plug-ins, they can cause instability or crashes, and their use is entirely at your own risk.
Practical consequences:
- A crash in a data plugin is a crash in AmiBroker’s process. There is no sandbox.
- Do not leave an old copy of a plugin in the
Pluginsfolder when replacing one. Move it elsewhere; do not merely rename it in place. - The performance page documents a diagnostic worth knowing: “plug-in time per symbol”. If it exceeds 10 ms, the plugin is slow or does not use the current development kit, and the remedy is to ask its vendor for an update.
- Support for a third-party plugin comes from its vendor. Statica’s AmiBroker documentation, for instance, is entirely the vendor’s; AmiBroker publishes none and is not the support channel.
Why provider documentation ages badly
Section titled “Why provider documentation ages badly”It is worth understanding the mechanism, because it will apply to this course too.
Software documentation describes something the author controls, and it is updated when the author changes it. Provider documentation describes somebody else’s commercial service, and there is no event that triggers an update when that service changes. A vendor raises a price, drops an exchange, retires a client application or is acquired, and the integration page keeps saying what it said. Nothing is wrong from the author’s point of view: the integration has not changed.
The evidence is on the pages themselves. The QuoteTracker page describes a product whose website did not respond at all when checked; the AmiQuote manual page lists data sources that ceased to exist more than a decade ago; the compatibility chart still names Google Finance as an AmiQuote source although it was removed in AmiQuote 4.00; the data-sources catalogue states on its own face that it is current as of March 2023.
Three habits follow, and they are the actual takeaway of this appendix:
- Take mechanics from the documentation and offerings from the vendor. The Database Settings dialog, the plugin context menu and the backfill workflow are stable and correctly documented. Prices, history depths and symbol counts are not.
- Check the date on everything. If a page states when it was current, that is a gift. If it does not, look for a version number or a copyright notice.
- Prefer measurement to reading. The two formulas in this part exist so that you can settle a question about your own installation in two minutes instead of arguing about which page is right.
The Level A path
Section titled “The Level A path”None of this requires a subscription to learn.
The evaluation method is the whole point, and it is free. The eight questions above can be answered for any documented plugin from this part alone; answering them is a paper exercise that builds exactly the judgement you need when a vendor’s sales page arrives.
The probe formula runs on any database. Apply it to a free end-of-day database and
read the output: grain, last stored bar, and “not reported” on every real-time line.
Then open Tools -> Bar Replay, press Play, and watch the last line change and the
timestamps move back. You have now seen every state the probe can report except a live
feed, and you have seen the Bar Replay trap that produces the most confusing false
alarms in real-time work.
The ODBC plugin is the one entry in the table you can genuinely try for nothing. It reads any database with an ODBC driver, needs only the seven documented columns, and a free local SQL database costs nothing. If you have historical data in a spreadsheet or a database already, this is a legitimate path to using it in AmiBroker without paying anyone. Note the two caveats: the plugin’s download links returned HTTP 403 to a plain command-line request when checked on 31 August 2026 — most likely a server-side rule rather than removal, but verify in a browser — and the page itself was last updated in June 2017.
Check your understanding
Sources for this lesson
11 verified · checked 2026-08-31
- 01AmiBroker User's Guide — How to use AmiBroker with eSignal feedamibroker.com/guide/h_esignal.html2026-08-31
- 02AmiBroker User's Guide — How to use AmiBroker with external data sourceamibroker.com/guide/h_extsources.html2026-08-31
- 03AmiBroker User's Guide — How to use AmiBroker with myTrackamibroker.com/guide/h_mytrack.html2026-08-31
- 04AmiBroker User's Guide — How to use AmiBroker with QuoteTrackeramibroker.com/guide/h_qtracker.html2026-08-31
- 05AmiBroker — DDE universal data pluginamibroker.com/dde.html2026-08-31
- 06AmiBroker — ODBC/SQL universal data pluginamibroker.com/odbc.html2026-08-31
- 07AmiBroker — Registered data plug-in identifiersamibroker.com/plugins.html2026-08-31
- 08AmiBroker User's Guide — Plugins windowamibroker.com/guide/w_plugins.html2026-08-31
- 09AmiBroker User's Guide — How to get quotes from various marketsamibroker.com/guide/h_quotes.html2026-08-31
- 10AFL Function Reference — GetRTDataamibroker.com/guide/afl/getrtdata.html2026-08-31
- 11AFL Function Reference — GetPlaybackDateTimeamibroker.com/guide/afl/getplaybackdatetime.html2026-08-31
Every technical claim on this page was checked against the official AmiBroker documentation on the date shown. Where the course disagrees with folklore, the source is how you can tell which one to trust.