providing default behavior for positions dictionary. non-existent positions are

returned as zero size/value positions.
This commit is contained in:
fawce
2012-10-06 12:15:54 -04:00
committed by Eddie Hebert
parent d9cf193ce0
commit 815c9f2cf6
3 changed files with 19 additions and 15 deletions
+13 -10
View File
@@ -544,21 +544,16 @@ class PerformancePeriod(object):
del(portfolio['max_leverage'])
del(portfolio['max_capital_used'])
portfolio['positions'] = self.get_positions(ndicted=True)
portfolio['positions'] = self.get_positions()
return zp.ndict(portfolio)
def get_positions(self, ndicted=False):
if ndicted:
positions = zp.ndict({})
else:
positions = {}
def get_positions(self):
positions = zp.ndict(internal=position_ndict())
for sid, pos in self.positions.iteritems():
cur = pos.to_dict()
if ndicted:
positions[sid] = zp.ndict(cur)
else:
positions[sid] = cur
positions[sid] = zp.ndict(cur)
return positions
@@ -576,3 +571,11 @@ class positiondict(dict):
pos = Position(key)
self[key] = pos
return pos
class position_ndict(dict):
def __missing__(self, key):
pos = Position(key)
self[key] = zp.ndict(pos.to_dict())
return pos
+2 -1
View File
@@ -15,6 +15,7 @@
from logbook import Logger, Processor
from collections import defaultdict
from datetime import datetime
from itertools import groupby
@@ -146,7 +147,7 @@ class AlgorithmSimulator(object):
# The algorithm's universe as of our most recent event.
# We want an ndict that will have empty ndicts as default
# values on missing keys.
self.universe = ndict(default=ndict)
self.universe = ndict(internal=defaultdict(ndict))
# We don't have a datetime for the current snapshot until we
# receive a message.
+4 -4
View File
@@ -1,7 +1,7 @@
import copy
import pandas
from ctypes import Structure, c_ubyte
from collections import MutableMapping, defaultdict
from collections import MutableMapping
def Enum(*options):
@@ -45,9 +45,9 @@ class ndict(MutableMapping):
cls = None
__slots__ = ['cls', '__internal']
def __init__(self, dct=None, default=None):
if default is not None:
self.__internal = defaultdict(default)
def __init__(self, dct=None, internal=None):
if internal is not None:
self.__internal = internal
else:
self.__internal = dict()