Hi Jake,
Welcome to Zipline!
The way I think of the output of zipline is of a series of snapshots of your algorithm's performance after each time period. In the example you're running, the time period is based in days, so each row of that pickled dataframe is how your algorithm is doing on each day. Internally, zipline's Trading Algorithm class is structured as a python generator that consumes your data source, runs your functions, and yields a dictionary of performance information (we usually refer to them as 'perf packets') after each bar. Thus, this pickled DataFrame is a collection of those perf packets, one per row.
By example, if you were to run a backtest on
quantopian.com and watch the chart grow as the backtest progresses, your browser is simply receiving those perf packets and displaying them to you in a fancy chart.
As for why your output looks so ... bland ... it's a quirk of the dual_moving_average.py sample. If you look at the algorithm code you'll see that for the first 300 days, handle_data is set to simply `pass`. This is so that the 300-day moving average can populate. Since your run_algo.py parameters specify fewer than 300 trading days, your algorithm's not actually doing much. Try stretching your start/end dates out to two years and you should see a lot of activity after 300 trading days.
Hope that helps!
Cheers,
--John "JD" Ricklefs
Director of Engineering @ Quantopian