def test_from_dict(self): pos = Position() trans = Transaction(self.fut_contract, self.date, 4.0, 12.3, leg_name='fut1') pos.add(trans) trans2 = Transaction(self.fut_contract, self.date, -2.0, 13.3) pos.add(trans2) positions = pos.netpositions self.assertEqual(1, len(positions)) self.assertEqual(100, pos._realized_pnl) self.assertEqual(1, len(positions)) self.assertEqual(True, self.fut_contract in positions) p = positions[self.fut_contract] self.assertEqual(p['qty'], 2.0) self.assertEqual(p['value'], trans.usdvalue / 2) self.fut_contract._price = 14.3 self.assertEqual(100, pos._realized_pnl) self.assertEqual(pos.pnl, 100 + 200) pos_dic = pos.as_dict() # Deserealizing position p2 = Position.from_dict(pos_dic, self.datasource, self.date) positions = p2.netpositions self.assertEqual(100, p2._realized_pnl) self.assertEqual(1, len(positions)) self.assertEqual(True, self.fut_contract in positions) p = positions[self.fut_contract] # Wrong - because we have new object from datsource #self.fut_contract._price = 14.3 for k in positions.keys(): k._price = 14.3 self.assertEqual(p['qty'], 2.0) self.assertEqual(p['value'], trans.usdvalue / 2) self.assertEqual(1, len(p2.legs)) self.assertEqual(True, 'fut1' in p2.legs) self.assertEqual(self.fut_contract, p2.legs['fut1']) self.assertEqual(100, p2._realized_pnl) self.assertEqual(p2.pnl, 100 + 200)
def test_as_dict(self): pos = Position() trans = Transaction(self.fut_contract, self.date, 4.0, 12.3, leg_name='leg1') pos.add(trans) trans2 = Transaction(self.fut_contract, self.date, -2.0, 13.3) pos.add(trans2) positions = pos.netpositions self.assertEqual(1, len(positions)) self.assertEqual(100, pos._realized_pnl) self.assertEqual(1, len(positions)) self.assertEqual(True, self.fut_contract in positions) p = positions[self.fut_contract] self.assertEqual(p['qty'], 2.0) self.assertEqual(p['value'], trans.usdvalue / 2) self.fut_contract._price = 14.3 self.assertEqual(100, pos._realized_pnl) self.assertEqual(pos.pnl, 100 + 200) self.assertEqual( { 'positions': { str(self.fut_contract.__hash__()): { 'qty': 2.0, 'value': trans.usdvalue / 2, 'leg_name': 'leg1' } }, '_realized_pnl': 100.0 }, pos.as_dict())