def load(self): exo_data = self.datasource.exostorage.load_exo(self.name) if exo_data is not None: self._position = Position.from_dict(exo_data['position'], self.datasource, self.date) self._old_transactions = exo_data['transactions'] self._series = pickle.loads(exo_data['series']) return exo_data
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)