New Bloomberg-to-Mathematica interface for Mathematica 10

I have added a new interface notebook for those using Mathematica 10. It fixes some bugs, increases flexibility, and most importantly, takes input and produces output using Mathematica’s new date and temporal data types, and using an Association rather than a list. It’s cleaner and more robust than the old method (though the old notebook will continue to work for those afraid of change.) If you upgrade from the old interface to the new one, note that all the functions have changed names, and their default installation path has changed as well. It’s all documented in the new notebook in the zip file at

http://www.wheels.org/monkeywrench/wp-content/uploads/2013/02/bloomberg_to_mathematica.zip

Sample usage of the new version:

aaplNF2 = msBBGetNF2["AAPL Equity", "Px_Last", DateObject["20070901"], DateObject["20081020"], "day"]; ibmNF2 = msBBGetNF2["IBM US Equity", "Px_Last", DateObject["20070901"], DateObject["20081020"], "day"];
DateListPlot[{aaplNF2[["data"]], ibmNF2[["data"]]}, Frame -> {True, True, False, False},
PlotLabel -> "IBM and Apple in 2007 and 2008", Epilog -> {(Text["apple", {{2008, 8, 1}, 18}]), (Text["ibm", {{2008, 8, 1}, 110}])}]

ex50

Mathematica 10

Things I particularly like about Mathematica 10.

1. Multiple undo

It undoes both the typing and the results of one’s typing. Yay.

2. Curated APIs

Mathematica can now natively communicate with a number of online services, tweeting or analyzing one’s tweets, downloading images from instagram, making association graphs of one’s facebook friends, and so forth.

I have in the back of my mind to set up an IP camera that Mathematica monitors, and that tweets when it detects specified activities. It would take only about three lines of code.

In practice, so far, I’ve been using it mostly with RunKeeper.

runkeeper = ServiceConnect["RunKeeper", "New"];
ServiceExecute[runkeeper, "UserData"];
id = First[runkeeper["FitnessActivities"]]["ActivityID"];

runkeeper["AnimatedPathMap", {"ActivityID" -> id,
AnimationRunning -> False}]

map

The major weaknesses here are (a) not every service that Wolfram connects to publishes the information that you want via their API. So, for example, while there is the great FriendNetwork from Facebook and FollowsNetwork from Twitter, there is nothing comparable from LinkedIn. Further, sometimes the service does make information available but Mathematica gives you no way to query it. For example, the RunKeeper connection would be about a million times more useful to me if I could pull HRM data as well as the geopath. RunKeeper can provide it, but Mathematica 10 doesn’t know how to ask. Perhaps if enough of us complain about its abence, Wolfram will respond.

3. Associations

One could create structured lists before, but this is vastly more flexible. Instead of

{name, age, street address}

where the form is rigid and can be confusing especially for long records with mostly blank entries, and where the form must be carefully documented for there will be any hope of reusing the data or the code that interpreted it, one can now do

In[59]:= item1 = <|name -> "bill smith", age -> 37, streetAddress -> "121 Main Street"|>;

In[60]:= Lookup[item1, name]

Out[60]= "bill smith"

In[66]:= addressbook = {<|name -> "bill smith", age -> 37,
streetAddress -> "121 Main Street"|>, <|name -> "susan smith",
streetAddress -> "121 Main Street"|>};

In[67]:= Map[Lookup[#, name] &, addressbook]

Out[67]= {"bill smith", "susan smith"}

One can also combine elements from multiple associations into a single record, something that would have been more difficult with the old method.

4. Wolfram Cloud deployment

This is not as good for Manipulate[] as the Mathematica plugin, but far more accessible.

In[8]:= CloudDeploy[
runkeeper["AnimatedPathMap", {"ActivityID" -> id, AnimationRunning -> True}],
Permissions -> "Public"]

Out[8]= CloudObject["https://www.wolframcloud.com/objects/221ebde8-c287-46db-b602-\
e0f5cde8a5e7"]

Other thoughts

Templating and, in particular, automated report generation, would have been useful in my last job. I’m not sure about this one but it feels as though it may come in handy.

Wolfram has improved support for the standardized time series datatype that they introduced in, I think, version 9. I’ve been using a homegrown method since long ago and the Wolfram version is lacking a lot of functionality still (the ability to do math between time series, dividing one by another, for example. The ability to normalize a time series, etc.). Together with the ability to manipulate metainformation (introduced in version 9), this is now a clean way of handling financial information. I expect to start migrating my code over to use the new format.

IRR and NPV in Mathematica, the modern way

Back in 2010 I posted an explanation of how to compute net present values and internal rates of return in Mathematica. It worked but it was a little verbose. Considering that Mathematica can do things like optical character recognition with a single command, it seemed a shame that it couldn’t do these basic financial functions.

Wolfram has fixed this, and computing IRR and NPV in Mathematica is now much more civilized.

Using the same sample cash-flow as last time (but reformatting the date to list-format, as Mathematica’s Cashflow[] function demands for some reason),

testFlow = {{{2001, 1, 1}, -1}, {{2002, 1, 1}, .3}, {{2005, 1, 1}, .4}, {{2005, 1, 10}, .5}};

TimeValue[Cashflow[testFlow], .05, {2001, 1, 1}]

returns an NPV of .0256519, just as it should. And

FindRoot[TimeValue[Cashflow[testFlow], r, {2001, 1, 1}] == 0, {r, .05}]

gives us the IRR, in this case .0584316.

Mathematica clearly performs a compilation the first time my NPV is run, and while the native NPV and IRR computations are quicker than mine the first time one of them is run by about a factor of 50, the second time one of them is run (whether on the same data or not) my code is quicker than theirs by about 30%. Mine is also ecumenical about date formats, but in practice I find myself using their code anyway, as it is so concise.

New Sled Dogs have reached the U.S. A few pairs, anyway.

The mad Norwegians who own the rights to the Sled Dogs design and name re-entered the U.S. market this year. They (or their Hungarian partners, it’s all sort of opaque to me) made only a few units available and most sizes sold out quickly. When I pre-ordered a pair months later, it was only order ID 45, suggesting that perhaps only a few dozen pairs of skates had made the initial run.

My skates arrived this week. Perhaps too late for this season, but the lining around the heels of my old SD250s had been worn to nothing and I needed a new pair. The color of the F5s is striking but the overall design is very similar to that of the 250s, and the bases are identical. The new logo is forgettable, but they’re cheaply silkscreened onto the boots and will probably wear off in use anyway.

Sled Dog F5

I retrieved my 250s and K9s for comparison; I haven’t used the K9s in many years and had forgotten how heavy they were. As I recall them, the K9s were nearly impossible to control, best for when you want to spin down a slope at reckless angles.

A video of the unboxing, below