moved transaction store to PerformancePeriod. added the position data to the performance message.

This commit is contained in:
fawce
2012-04-10 14:12:03 -04:00
parent 2eeb92442e
commit 368341ce61
2 changed files with 25 additions and 15 deletions
+5 -5
View File
@@ -347,13 +347,11 @@ class Position():
self.cost_basis = 0.0 ##per share
self.last_sale_price = None
self.last_sale_date = None
self.transactions = []
def update(self, txn):
if(self.sid != txn.sid):
raise NameError('updating position with txn for a different sid')
self.transactions.append(txn)
#we're covering a short or closing a position
if(self.amount + txn.amount == 0):
self.cost_basis = 0.0
@@ -391,8 +389,7 @@ class Position():
'cost_basis' : self.cost_basis,
'last_sale_price' : self.last_sale_price,
'last_sale_date' : self.last_sale_date,
'timestamp' : datetime.datetime.now(),
'transactions' : self.transactions
'timestamp' : datetime.datetime.now()
}
@@ -408,6 +405,7 @@ class PerformancePeriod():
#cash balance at start of period
self.starting_cash = starting_cash
self.ending_cash = starting_cash
self.processed_transactions = []
self.calculate_performance()
@@ -429,6 +427,7 @@ class PerformancePeriod():
self.positions[txn.sid] = Position(txn.sid)
self.positions[txn.sid].update(txn)
self.period_capital_used += -1 * txn.price * txn.amount
self.processed_transactions.append(txn)
def calculate_positions_value(self):
mktValue = 0.0
@@ -459,7 +458,8 @@ class PerformancePeriod():
'positions' : positions,
'timestamp' : datetime.datetime.now(),
'pnl' : self.pnl,
'returns' : self.returns
'returns' : self.returns,
'transactions' : self.processed_transactions,
}
def to_namedict(self):
+20 -10
View File
@@ -635,15 +635,24 @@ def PERF_FRAME(perf):
# aggregate the day's transactions, which are nested in their
# respsective positions.
transactions = []
for sid, position in tp['positions'].iteritems():
for txn in position['transactions']:
cur = {
'date':EPOCH(txn.dt),
'amount': txn.amount,
'price': txn.price,
'sid':txn.sid
}
transactions.append(cur)
for txn in tp['transactions']:
cur = {
'date':EPOCH(txn.dt),
'amount': txn.amount,
'price': txn.price,
'sid':txn.sid
}
transactions.append(cur)
positions = []
for sid, pos in tp['positions'].iteritems():
cur = {
'cost_basis':pos['cost_basis'],
'sid' :pos['sid'],
'last_sale' :pos['last_sale_price'],
'amount' :pos['amount']
}
positions.append(cur)
daily_perf = {
'date' : EPOCH(date),
@@ -654,7 +663,8 @@ def PERF_FRAME(perf):
'starting_cash' : tp['starting_cash'],
'ending_cash' : tp['ending_cash'],
'capital_used' : tp['capital_used'],
'transactions' : transactions
'transactions' : transactions,
'positions' : positions
}
cumulative_perf = {