Skip to content

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.

  • 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.
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.

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 backfill genuinely 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.

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”

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 CSI identifier 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:

  1. What external client software must be installed and running?
  2. Which base time intervals does it support, and which of those does my edition allow?
  3. Should Local data storage be enabled or disabled? (It genuinely differs.)
  4. Does it support mixed EOD/intraday, or do I need two databases?
  5. How deep is the backfill, and is it requested per symbol on first access?
  6. Does it implement Wait for backfill? Many third-party plugins do not.
  7. What is the streaming symbol limit, and what happens when I exceed it?
  8. 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.

Complete runnable AFL

plugin-capability-probe.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 bar
LastBarEnd = Status( "lastbarend" ); // end of that bar; time-based bars only
SecondsLeft = Status( "lastbartimeleft" ); // seconds until that bar completes
LastRTUpdate = 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();

Download plugin-capability-probe.afl116 lines

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.

  • 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 combining SetForeign() with GetRTData().
  • GetPlaybackDateTime() — the Bar Replay position, or zero.
  • IsNull( x ) — true when a value is Null, which is how an unpopulated field arrives.
  • RequestTimedRefresh( interval, onlyvisible ) — periodic re-execution.

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.

  • Nothing changes once per second. RequestTimedRefresh() has an onlyvisible argument 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.

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.

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 Plugins folder 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.

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:

  1. 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.
  2. 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.
  3. 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.

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

Question 1. A plugin does not appear in the Data source combo. Following this appendix, what do you check first?
Show the answer and why

Answer: Tools -> Plugins, to see whether the DLL is loaded at all, and whether a required Microsoft C++ runtime is missing

A DLL must be in the Plugins subfolder and load successfully to appear in the combo. A missing Microsoft C++ runtime is a documented cause for both the eSignal plugin on 64-bit Windows and the Norgate plugin, and it produces exactly this symptom.

Question 2. Which of these are documented as true of the DDE universal plugin? Select all that apply.
Show the answer and why

Answer: It provides no backfill at all, You must wait for at least three bars before a chart appears, It supports up to 500 streaming symbols

The official position is the opposite of the fourth option: where a dedicated plugin exists, use it, because dedicated plugins are better and faster. DDE is the fallback when nothing else can reach a source.

Question 3. Your capability probe shows "not reported" on every real-time line during market hours, on a plugin-fed database. What must you rule out before concluding the plugin is at fault?
Show the answer and why

Answer: That you are running the Standard edition, where GetRTData returns Null for every field

GetRTData and GetRTDataForeign are documented as Professional-edition functions that return Null for every field on Standard. The failure is silent, which is exactly what makes it a trap: the code runs, produces nothing, and blames the feed.

Question 4. True or false: because Norgate's plugin is absent from AmiBroker's registered plugin-ID page, it should be treated as unsupported.
Show the answer and why

Answer: False

False. That page carries a 2008 copyright and predates the plugin. Absence from a dated list is evidence about the list, not about the product — which is the general lesson of this appendix.

Sources for this lesson

11 verified · checked 2026-08-31

  1. 01AmiBroker User's Guide — How to use AmiBroker with eSignal feedamibroker.com/guide/h_esignal.html2026-08-31
  2. 02AmiBroker User's Guide — How to use AmiBroker with external data sourceamibroker.com/guide/h_extsources.html2026-08-31
  3. 03AmiBroker User's Guide — How to use AmiBroker with myTrackamibroker.com/guide/h_mytrack.html2026-08-31
  4. 04AmiBroker User's Guide — How to use AmiBroker with QuoteTrackeramibroker.com/guide/h_qtracker.html2026-08-31
  5. 05AmiBroker — DDE universal data pluginamibroker.com/dde.html2026-08-31
  6. 06AmiBroker — ODBC/SQL universal data pluginamibroker.com/odbc.html2026-08-31
  7. 07AmiBroker — Registered data plug-in identifiersamibroker.com/plugins.html2026-08-31
  8. 08AmiBroker User's Guide — Plugins windowamibroker.com/guide/w_plugins.html2026-08-31
  9. 09AmiBroker User's Guide — How to get quotes from various marketsamibroker.com/guide/h_quotes.html2026-08-31
  10. 10AFL Function Reference — GetRTDataamibroker.com/guide/afl/getrtdata.html2026-08-31
  11. 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.