assetHistory(string Name, int Mode): int
Loads price history of an asset from online data providers or from a broker's price server
at the begin of the simulation.
Asset symbol or code used by the price source, or 0 for the current asset.
FROM_GOOGLE - download daily (D1) price data from Google™ Finance.
FROM_QUANDL - download daily (D1) price data from Quandl™ (Zorro S required).
FROM_AV - download daily (D1) price data from AlphaVantage™.
FROM_STOOQ - download daily (D1) price data from Stooq™.
FROM_YAHOO - download daily (D1) price data from Yahoo™ Finance (currently
out of service).
FROM_BITTREX - download daily
(D1) cryptocurrency data from Bittrex™ (Zorro S required).
FROM_CRYPTOC - download daily
(D1) cryptocurrency data from
CryptoCompare™ (Zorro S required).
+1 - download M1 data (Bittrex/CryptoCompare only).
+2 - download H1 data (Bittrex/CryptoCompare only).
+UNADJUSTED - download unadjusted prices.
+OVERRIDE - download price data even when
history is up to date.
1 - download unadjusted one-minute (M1) price data from the selected broker.
0 - download unadjusted tick quote (T1) data from the selected broker (Zorro S required).
0 when nothing was downloaded due to an error or because the data was up to date, otherwise nonzero.
- Price history is only downloaded in the
INITRUN. For downloading data in the middle of a trading
session or simulation, use dataDownload.
- Price history is stored in the History folder under Name plus .t6 extension for D1 data, Name plus year plus .t6 for
broker M1 data,
or Name plus year plus .t1 for T1 data. The Quandl database name, an appended ".US" by Stooq, and '/', '.', or ':' characters are automatically stripped from the historical data file names. If the name is otherwise different to the asset name, use file_copy to copy the downloaded file to the correct asset name (f.i. file_copy("History\\ICE.t6","History\\LONDONICE.t6").
- Price history is loaded either for the number of recent years given by
NumYears, or for all years between
StartDate and EndDate. If a price history file already exists, or if
NumYears is set to -1, no price data is downloaded. If the price history of the current year is not up to date, new price data
from a broker source is appended at the begin of the existing file. Make sure that the time resolution of the downloaded prices matches the resolution of the historic data files - the included files are based on 1-minute data. D1 price data is stored in a single .t6 file that can go back until 1990. For testing only parts of a multi-year .t6 file, use an 8-digit StartDate or EndDate.
- The raw .csv data from websites (Google, Quandl, etc) is stored in
History\history.csv. If the price source does
not deliver price data, but some error message instead, a
"Bad file format" error is displayed,
and the error message is then contained in the downloaded
History\history.csv file. The function will attempt twice to download the data before giving up.
- Check the correct spelling of the asset name or code. Spelling often differs slightly, f.i. the same stock can be named
BRK.B, BRK_B, BRK-B, or
BRK-B.US dependent on the website or price source.
- Outliers in the price history are automatically fixed.
- When downloading data from a broker, the asset is subscribed automatically (if possible via API). The recent values of the asset's
Spread, PipCost, etc. are updated to the
Assets.csv file even if no price history is downloaded. This way new assets can be added and available assets can be set up to their current parameter values for further simulations.
- For backtesting price history, BarPeriod can not be less than one price history bar. Set it to
1440 for testing D1 price data.
- A price history file with length 0 prevents downloading prices for that particular year. This way, by storing a 0-byte file, price data that is not available or that is of bad quality can be excluded from download attempts and from the backtest.
- For using the newest prices, load the price history before calling
asset(), otherwise the asset will use the existing price data files. Use
UpdateDays for calling assetHistory automatically to keep the price history up to date.
- For T1 data, the price server of the broker must support quote-based price data; this is the case for FXCM, but not for
Oanda, IB, or for most MT4 brokers. Dependent on the price server speed, downloading T1 quotes can take a long time, such as a whole day for one year of price quotes.
If the LEAN flag is not
set, ask and bid prices are stored in the .t1
file, otherwise only ask prices.
- For trading with brokers that do not support historical prices in their API
at all, set the PRELOAD flag and use
assetHistory() for downloading recent historical data prior to the first
asset call. This works for D1 data only.
- Some comments about the data providers:
- Google prices are adjusted for splits only, unadjusted prices are not available. Google download is known to fail on certain assets for no apparent reason, even though they can be downloaded manually.
- Yahoo is currently inoperational for data downloads.
- AlphaVantage data loads relatively slow when there is much traffic. The data is of good quality.
The AV API key must be present in
- Stooq normally requires a currency identifier appended to the asset name.
If it is missing, ".US" is
automatically appended. The data loads fast and is of good quality. There is a
tight limit to the number of downloads per day, identified through the IP address.
- Quandl data from the WIKI
CHRIS/CME and CHRIS/ICE (futures),
BITFINEX and GDAX (Bitcoin
and other cryptocurrencies) EOD databases are supported. Other Quandl databases in different formats can be downloaded with the
dataDownload function. Quandl data loads fast and is of good quality.
The Quandl key must be present in
- Bittrex provides recent price
history for a large number of cryptocurrencies. Format:
BTC-ETH returns ETH prices in BTC. The history length is
normally several years for D1 data, several months for H1
data, and several days for M1 data. It is recommended to
insert a 4 seconds delay between subsequent
- CryptoCompare provides recent price
history for almost all existing cryptocurrencies. Format:
ETH/BTC returns ETH prices in BTC. The
history length is up to 3 years for D1 data, 1 year for H1
data, and 1 month for M1 data. Because digital currencies
are not traded at a central exchange, CryptoCompare prices
can be slightly different to the Bittrex prices.
- MT4 servers usually have no long price history, so the command will print an error message or only partially download the history.
- Some brokers, such as IB, also provide only limited price history,
and the download is slow. FCXM servers provide price history from 2002 for currencies, and from 2008 for some CFDs. Before downloading prices, check if they are already available in the
History folder or on the Zorro download page.
// Update M1 price history of all assets
NumYears = 2;
// Download AAPL D1 prices from Quandl
// Download and plot Bitcoin prices from Bitfinex
BarPeriod = 1440;
price, asset, UpdateDays, loadStatus, Price History, dataDownload