updated zipline to fix missing fields in the performance and risk messages. also moved cumulative performance to be a sub component of the daily performance object.

This commit is contained in:
fawce
2012-04-05 23:35:21 -04:00
parent aaf2fae2b8
commit cad62346e7
2 changed files with 26 additions and 17 deletions
+15 -3
View File
@@ -18,6 +18,8 @@ Performance Tracking
+-----------------+----------------------------------------------------+
| progress | percentage of test completed |
+-----------------+----------------------------------------------------+
| started_at | datetime in utc marking the start of this test |
+-----------------+----------------------------------------------------+
| cumulative_capti| The net capital used (positive is spent) through |
| al_used | the course of all the events sent to this tracker |
+-----------------+----------------------------------------------------+
@@ -105,6 +107,12 @@ Performance Period
| | :py:meth:`Position.to_dict()` |
| | for details on the contents of the dict |
+---------------+------------------------------------------------------+
| pnl | Dollar value profit and loss, for both realized and |
| | unrealized gains. |
+---------------+------------------------------------------------------+
| returns | percentage returns for the entire portfolio over the |
| | period |
+---------------+------------------------------------------------------+
| timestamp | System time evevent occurs in zipilne |
+---------------+------------------------------------------------------+
@@ -135,9 +143,10 @@ class PerformanceTracker():
def __init__(self, trading_environment):
self.trading_environment = trading_environment
self.trading_day = datetime.timedelta(hours = 6, minutes = 30)
self.calendar_day = datetime.timedelta(hours = 24)
self.trading_environment = trading_environment
self.trading_day = datetime.timedelta(hours = 6, minutes = 30)
self.calendar_day = datetime.timedelta(hours = 24)
self.started_at = datetime.datetime.utcnow()
self.period_start = self.trading_environment.period_start
self.period_end = self.trading_environment.period_end
@@ -191,6 +200,7 @@ class PerformanceTracker():
returns_list = [x.to_dict() for x in self.returns]
return {
'started_at' : self.started_at,
'period_start' : self.period_start,
'period_end' : self.period_end,
'progress' : self.progress,
@@ -421,6 +431,8 @@ class PerformancePeriod():
'ending_cash' : self.ending_cash,
'positions' : positions,
'timestamp' : datetime.datetime.now(),
'pnl' : self.pnl,
'returns' : self.returns
}
def to_namedict(self):
+11 -14
View File
@@ -629,40 +629,37 @@ def PERF_FRAME(perf):
#pull some special fields from the perf for easy access
date = perf['last_close']
tp = perf['todays_perf']
cp = perf['cumulative_perf']
risk = perf['cumulative_risk_metrics']
#create the daily nested message
#TODO: add daily PnL in dollars
daily_perf = {
'date' : EPOCH(date),
'returns' : perf['returns'][-1]['returns'],
'pnl' : 0.0,
'returns' : tp['returns'],
'pnl' : tp['pnl'],
'portfolio_value' : tp['ending_value']
}
#TODO: add total returns to the message from perf
#TODO: add total bm returns to the message from perf
#TODO: add daily PnL in dollars
cumulative_perf = {
'alpha' : risk['alpha'],
'beta' : risk['beta'],
'sharpe' : risk['sharpe'],
'total_returns' : 0.0,
'total_returns' : cp['returns'],
'volatility' : risk['algo_volatility'],
'benchmark_volatility' : risk['benchmark_volatility'],
'benchmark_returns' : 0,
'benchmark_returns' : risk['benchmark_period_return'],
'max_drawdown' : risk['max_drawdown'],
'pnl' : 0.0,
'pnl' : cp['pnl']
}
# nest the cumulative performance data in the daily.
daily_perf['cumulative'] = cumulative_perf
#TODO: perf needs to track start time of the bt
#TODO: pass the cursor value in.
result = {
'started_at' : 0,
'started_at' : EPOCH(perf['started_at']),
'cursor' : 0,
'daily' : [daily_perf],
'percent_complete' : perf['progress'],
'cumulative' : cumulative_perf,
'cursor' : 0,
}
return msgpack.dumps(tuple(['PERF', result]))