Пример #1
0
    def positions(self):
        """
        Returns net positions of campaign on last date
        :return:
        """
        net_positions = {}

        for exo_name, exo_exposure in self.exo_positions(date=None).items():
            # Load information about EXO positions
            exo_data = self._datasource.exostorage.load_exo(exo_name)

            if exo_data is not None:
                # Get EXO's assets positions
                exo_pos = Position.get_position_qty(exo_data, self._datasource)

                for assetname, pos_dict in exo_pos.items():
                    # Escape special MongoDB keys chars in key names
                    asset_name_safe = assetname.replace('.', '_').replace('$', '_')
                    position = net_positions.setdefault(asset_name_safe, {'asset': pos_dict['asset'], 'qty': 0.0, 'prev_qty': 0.0})

                    # Multiply EXO position by campaign exposure
                    position['qty'] += pos_dict['qty'] * exo_exposure['exposure']
                    position['prev_qty'] += float('nan')
            else:
                warnings.warn("EXO data not found for " + exo_name)

        return net_positions
    def test_get_position_qty_current_position(self):
        pos = Position()

        #
        # Do sanity checks
        #
        self.assertEqual(EXO_POS_DICT_TEST['transactions'][-1]['date'],
                         pd.Timestamp("2016-09-14T12:45:00"))
        self.assertEqual(EXO_POS_DICT_TEST['transactions'][0]['date'],
                         pd.Timestamp("2011-06-01T12:45:00"))

        p = pos.get_position_qty(EXO_POS_DICT_TEST, None)

        self.assertEqual(p["100006570"]['qty'], 1.0)
        self.assertEqual(p["100006570"]['value'], 105925.0)

        self.assertEqual(p["203147944"]['qty'], 1.0)
        self.assertEqual(p["203147944"]['value'], 2067.81315840769)

        self.assertEqual(p["203147442"]['qty'], -1.0)
        self.assertEqual(p["203147442"]['value'], -2611.56510629721)

        self.assertEqual(p["203148813"]['qty'], 1.0)
        self.assertEqual(p["203148813"]['value'], 3013.95208628632)