I’ve located a Microsoft document that some may find useful in digging into OFX further. One complaint that we’ve all expressed (or at least read from others) is that, unlike getting Online quotes via MSN which will constantly overwrite themselves with the most recent value for that particular day, the Python scripted version only takes the first value received that day. Only by deleting that entry (or manually changing the value) are you able to download a new value for the day. Maybe someone can figure out if this excerpt will help get around this behavior…
Prices Received From Brokerage
Brokerages are required by OFX spec to always send UNITPRICE in INVPOS. However, Money does not always use this feed to update price history. Money only updates price history with price from INVPOS when it makes an adjustment, an add or remove shares, based upon this position information. This is by design.
Money expects that security prices will be kept up to date by our quote feed. On a first call known securities that need no position update will have price as of last transaction. Future calls will update to current price from quote feed. What this means, however, is that Money never updates prices for securities without known TICKERs, such as Bonds, or brokerage funds that are not publicly traded. Users will need to update these manually.
Also, for those that have wondered why the date is sometimes behind by a day…
According to OFX specification 220.127.116.11:
Date and datetime also accept values with fields omitted from the right. They assume the following defaults if a field is missing:
Specified date or datetime Assumed defaults YYYYMMDD 12:00 AM (the start of the day), GMT YYYYMMDDHHMMSS GMT YYYYMMDDHHMMSS.XXX GMT
If a date does not have any hours or GMT adjustment values, Money interprets the time of the statement as midnight GMT. Since midnight GMT is 5 hours before midnight EST, Money would interpret a <DTPOSTED>19990505 as 7 PM on 5/4/99 if the system time zone were EST. In this case, Money would display the date as 5/4/99, rather than 5/5/99.
Additionally, if the date includes a datetime designation such as 20000505050000 for a server in EST, Money converts the date to GMT, and then converts it back to the LOCAL time zone (not the server’s). If a customer were connecting from the Pacific coast, Money considers the time of the transaction to be 9PM 5/4/00, which is one day earlier than expected.
Microsoft recommends that servers either send server time in full datetime format or send dates with a datetime format that equates to Noon GMT, such as CCYYMMDD120000. With this format, Money displays the expected date for almost any time in the world. In the example above, a 20000505120000 would always display as 5/5/00 anywhere the world except for the center of the Pacific Ocean.