Recovery of online functions of Microsoft Money. Quotes

    Microsoft Money has a long history. From the first version of Windows 3.0 released in 1991 to the Plus version of 2007, Money has been a convenient tool for managing personal finances.

    In addition to the usual account management, Money also offered developed online services.
    They can be divided into three components:

    1. Obtaining data on quotes and currency conversion.
    2. Synchronization of account data, as it is now fashionable to say, with the cloud.
    3. Work with online banking, including paying bills via OFX protocol.

    Unfortunately, in 2011, Microsoft, having supported the mod for closing services, closed the MSN Money online service, and the first two functions stopped working.

    And the free version of Money Plus Sunset, released in 2010, no longer contained support for online functions, becoming a simple tool for offline account management.

    I have been using Microsoft Money 2004 Standard since 2006. During this time, there were attempts to go to other programs or online services, but nonetheless, Money turned out to be more convenient. But here are not working functions openly upset. And if online banking in our country is useless, because as far as I know, not even one of the major banks supports working through OFX for individuals, there was very little data on exchange rates. And after all, online synchronization after working with one online service was a dream.

    The community has created several tools of varying degrees of crutches, but they have one fatal flaw: they do not integrate into Money and require manual labor to obtain results.

    Well, since there was no need to wait for a miracle, the realization of a dream in reality
    is the work of the dreamers themselves.

    Immediately make a reservation, everything written below refers to the 2004 version. Perhaps previous versions will not have the necessary functionality, and subsequent ones will have different behavior than expected.

    The task of returning online functions can be divided into two large stages:

    1. Obtaining data on quotes and exchange rates.
    2. Synchronization with online service.

    The default URL at which Money is trying to get quotes is

    http://moneycentral.msn.com/Scripts/invisapi.dll

    Microsoft Money has a complex and flexible structure. A seemingly monolithic program
    consists of many components connected through OLE. Most components have settings either in ini-files or in the registry, and this is a great opportunity to change the program’s behavior without interfering with its files.

    Therefore, it is possible to change the request URL by specifying the string parameter value in the registry

    HKLM\Software\\Microsoft\\Investor\\StockQuotes\\QuoteServerURL

    Then we can redirect requests from Microsoft servers to our own server.

    Money sends a request to the specified URL using the HTTP GET command including a list of required data as address parameters.

    Example:

    http://moneycentral.msn.com/Scripts/invisapi.dll?V=5&S=$US:INDU,/RUBUS,/ECUUS,/ATSUS,/BECUS,/DEMUS,/FIMUS,/FRFUS,/GRDUS,/IEPUS,/ITLUS,/LUFUS,/NLGUS,/PTEUS,/ESPUS&Q=19,15,32,0,3,5,1,2,10,4,17,18,8C,E9,EA,1E,8,9,A2,104,3A,3B,3C,3D,7F,7D,7,13,14,14E,14F,EB,21,192,16A&N=8,15&H=15,5,20002+20201+20170916+20180316,20006+20201+20170916+20180316,20000+20201+20170916+20180316,20001+20201+20170916+20180316,20004+20201+20170916+20180316

    Here, the request is encoded to receive data on the INDU exchange index, its historical data for the year, as well as data on exchange rates.

    Interestingly, instead of the modern USD currency code, US is used, and the ruble code in the request is correct: RUB.

    In response, Money expects data in binary form. Unfortunately, the InvAPI protocol is very confusing and its recovery is very time consuming.

    Fortunately for us, Money can work with two more formats: QWB and WebQUOTE.
    Therefore, it’s not very clear why Microsoft switched to using the binary InvAPI by abandoning a well-structured XML-based WebQUOTE, given that Money is used very widely in XML.

    To use alternative protocols, you need to create a section in the registry branchHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Money\12.0\Online\WebQuoteServers.
    A subsection can have an arbitrary name and must contain the following parameters:

    • WebQTSrvrURL - the main parameter, contains the URL to which the request will be sent
    • ServerType - If the server is running the QWB protocol, then the parameter value must be equal to QWB. If WebQUOTE is used, this parameter should be absent.

    The following parameters should contain a list of countries, separated by commas, whose indexes the server supports:

    • FundCountries - stock market
    • MnyMktCountries - Cash Market, Stocks
    • StockCountries - stocks
    • TBillCountries - Unknown

    The purpose of the following parameters remains unknown:

    • LookUpURL
    • XRateFrom
    • XRateTo

    There is a nuance with the server description order: if the description of the WebQUOTE server is the first in the sorting, followed by QWB, then the request will be made to both. If vice versa, then only to the QWB server.

    It was not possible to find out from which version of Money support for the QWB protocol (Quotes Write Back) appeared. But by all indications, this was the very first protocol used to obtain data. Money 2000 was able to import files in this format. But the 2004 version does not already have such an opportunity.

    When using QWB Money, it generates a URL with request parameters and sends it via HTTP using the GET method.

    For example:

    http://example.com/msmoney/webqt.qwb?N=INDU

    Where

    http://example.com/msmoney/webqt.qwb?N=
    Is the value of the WebQTSrvrURL parameter.

    The response format is simple: format header, date / time, and listing data by index.

    Example:

    QWB2.0
    20180311105300
    US:INDU@179.98@0@0@0@0@0@0@0@0@0@0@USD@

    Date format - YYYYMMDDHHmmSS

    Field value:

    0 - WKN with information about the country, but in fact the name of the index from the request
    1 - Last (Rate at the specified time) (double)
    2 - High (The highest bid price on the day) (double)
    3 - Low (Lowest bid price on that day) (double)
    4 - Open (Open price) (double)
    5 - 52 week max (Range for 52 weeks, from DATE) (double)
    6 - 52 week min (Range for 52 weeks, from DATE) (double)
    7 - P / E Ratio (EPS) (Price / Profit (P / E)) (double)
    8 - Volume (long) Trading volume
    9 -? 1/0 (bool)
    10 - Shares Outstanding (double)
    11 - Market Capitalization (double)
    12 - Currency code (US, RUR ...)

    This format is designed to receive data on stocks and indices (securities), it will not work to get the exchange rate through it.

    WebQUOTE is the next step in the development of a data acquisition protocol.
    Its use allows you to get more detailed data.

    Money generates a request in the form of an XML document and sends it by the POST method to the server. The request body looks like this:


    The response format is as follows:


    where

    EXRATERS - data on currency conversion.
    QUOTERS - data on quotes at the time of the request.
    HISTQUOTERS - historical data on quotes.

    The set of returned data is much expanded in comparison with QWB. From the name of the attributes it is clear what data they should contain.

    Interestingly, Money never requests data on currency conversion, but if it contains this data in response, it processes and stores it perfectly.

    When forming an answer according to any protocol, the codes of currencies stored in the database should be taken into account. For example, the ruble code in Money is written as RUR, and if you write RUB, the analysis will end with an error.

    There is also a third option: using the OFX protocol. Data in this format can be imported by a file, for example, generated by one of the utilities, or received online
    from a bank connected to Money. But this method is secondary to QWB and WebQUOTE and requires manual intervention.

    Also popular now: