mirror of
https://github.com/wassname/catalyst.git
synced 2026-07-01 08:00:33 +08:00
providing default behavior for positions dictionary. non-existent positions are
returned as zero size/value positions.
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user