Retrieve Historical Prices from MSN Money in Excel
Overview
The MsnMoneyHistoricalPrices
provider retrieves historical daily, weekly, and monthly price data from MSN Money directly into Microsoft Excel.
It supports downloading raw OHLCV data as well as calculated changes and adjusted prices.
You can use this data to:
- Build historical price charts
- Analyze adjusted returns and volatility
- Compare raw and adjusted prices
- Compute custom signals and trading strategies
Use the following RTD formulas for daily, weekly, or monthly data:
=RTD("market.rtd",,"MsnMoneyHistoricalPrices","<Symbol>",[<Date>],"<Data Field>") =RTD("market.rtd",,"MsnMoneyHistoricalPricesWeekly","<Symbol>",[<Date>],"<Data Field>") =RTD("market.rtd",,"MsnMoneyHistoricalPricesMonthly","<Symbol>",[<Date>],"<Data Field>")
Examples:
=RTD("market.rtd",,"MsnMoneyHistoricalPrices","AAPL","2024-12-31","Close") =RTD("market.rtd",,"MsnMoneyHistoricalPrices","AAPL",,"Close")
Here:
<Symbol>
is the MSN instrument code.<Data Field>
is one of the available data fields (see list below).
How to Find MSN Symbols
- Visit MSN Money.
- Search for a stock (e.g., Apple Inc.).
- Copy the ID after
fi-
, such asa1mou2
, from the URL:
https://www.msn.com/en-us/money/stockdetails/nas-aapl/fi-a1mou2
The Date
parameter can be a valid Excel date or a string in yyyy-mm-dd
format. If Date
is omitted or set to 0, the formula returns data for the last trading date.
Use the Formula Builder to generate formulas and customize separators and layout.
By default, data refreshes every 12 hours. To change this interval, use the formula:
=RTD("market.rtd",,"MsnMoneyHistoricalPrices","rtd_RefreshInterval",126060)
Notes on Calculated Fields
AdjClose returns
Close
values and is included for compatibility with the Yahoo Finance data set.AverageVolume returns the average daily volume over a specified number of days.
This enables you to compare recent activity to historical norms (e.g., 10-day vs. 50-day average volume).TradingDay allows you to retrieve trading dates by index.
For example, you can get the 5th most recent trading day and then use that date in further formulas or charts.
Data Fields and Excel Formulas
Data Field | Excel Formula |
---|---|
Symbol | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"Symbol") |
Date | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"Date") |
Open | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"Open") |
High | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"High") |
Low | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"Low") |
Close | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"Close") |
Volume | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"Volume") |
PrevDate | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"PrevDate") |
PrevOpen | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"PrevOpen") |
PrevHigh | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"PrevHigh") |
PrevLow | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"PrevLow") |
PrevClose | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"PrevClose") |
PrevVolume | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"PrevVolume") |
Change | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"Change") |
ChangeInPercent | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"ChangeInPercent") |
Synonyms: | |
Previous Open | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"Previous Open") |
PreviousOpen | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"PreviousOpen") |
Prev Open | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"Prev Open") |
Previous High | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"Previous High") |
PreviousHigh | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"PreviousHigh") |
Prev High | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"Prev High") |
Previous Low | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"Previous Low") |
PreviousLow | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"PreviousLow") |
Prev Low | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"Prev Low") |
Previous Close | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"Previous Close") |
PreviousClose | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"PreviousClose") |
Prev Close | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"Prev Close") |
Previous Volume | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"Previous Volume") |
PreviousVolume | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"PreviousVolume") |
Prev Volume | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"Prev Volume") |
Previous Date | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"Previous Date") |
PreviousDate | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"PreviousDate") |
Prev Date | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"Prev Date") |
Previous Adj Close | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"Previous Adj Close") |
Previous AdjClose | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"Previous AdjClose") |
PreviousAdjClose | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"PreviousAdjClose") |
Prev Adj Close | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"Prev Adj Close") |
Prev AdjClose | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"Prev AdjClose") |
PrevAdjClose | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"PrevAdjClose") |
Adj Change | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"Adj Change") |
AdjChange | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"AdjChange") |
Change in Percent | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"Change in Percent") |
PercentChange | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"PercentChange") |
Percent Change | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"Percent Change") |
ChangePercent | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"ChangePercent") |
Change Percent | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"Change Percent") |
% Change | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"% Change") |
Adj Change in Percent | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"Adj Change in Percent") |
AdjChange in Percent | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"AdjChange in Percent") |
AdjChange Percent | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"AdjChange Percent") |
PercentAdjChange | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"PercentAdjChange") |
Percent Adj Change | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"Percent Adj Change") |
Percent AdjChange | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"Percent AdjChange") |
AdjChangePercent | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"AdjChangePercent") |
Adj Change Percent | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"Adj Change Percent") |
% Adj Change | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"% Adj Change") |
% AdjChange | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"% AdjChange") |
RTD server values: | |
rtd_LastUpdate | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"rtd_LastUpdate") |
rtd_LastUpdateDate | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"rtd_LastUpdateDate") |
rtd_LastUpdateTime | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"rtd_LastUpdateTime") |
rtd_LastError | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"rtd_LastError") |
rtd_LastMessage | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"rtd_LastMessage") |
Aggregate Functions
Data Field | Excel Formula |
---|---|
Date | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],[Days],"Date") |
Day | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],[Days],"Day") |
AverageVolume | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],[Days],"AverageVolume") |
Synonyms: | |
Average Volume | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],[Days],"Average Volume") |
AvgVolume | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],[Days],"AvgVolume") |
Avg Volume | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],[Days],"Avg Volume") |
AvgVol | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],[Days],"AvgVol") |
Avg Vol | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],[Days],"Avg Vol") |
RTD server values: | |
rtd_LastUpdate | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],[Days],"rtd_LastUpdate") |
rtd_LastUpdateDate | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],[Days],"rtd_LastUpdateDate") |
rtd_LastUpdateTime | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],[Days],"rtd_LastUpdateTime") |
rtd_LastError | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],[Days],"rtd_LastError") |
rtd_LastMessage | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],[Days],"rtd_LastMessage") |
Trading Days
Data Field | Excel Formula |
---|---|
Date | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"TradingDay",[Day]) |
RTD server values: | |
rtd_LastUpdate | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"TradingDay","rtd_LastUpdate") |
rtd_LastUpdateDate | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"TradingDay","rtd_LastUpdateDate") |
rtd_LastUpdateTime | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"TradingDay","rtd_LastUpdateTime") |
rtd_LastError | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"TradingDay","rtd_LastError") |
rtd_LastMessage | =RTD("market.rtd",,"MsnMoneyHistoricalPrices",[Symbol],"TradingDay","rtd_LastMessage") |