def testShiftedSecurityValueHolder(self):
        mm = SecurityMovingAverage(2, 'close')
        shifted1 = mm.shift(1)

        data1 = {
            'aapl': {
                'close': 1.0
            },
            'ibm': {
                'close': 2.0
            },
            'goog': {
                'close': 3.0
            }
        }
        shifted1.push(data1)
        calculated = shifted1.value
        for name in calculated.index:
            self.assertTrue(np.isnan(calculated[name]))

        data2 = {
            'aapl': {
                'close': 2.0
            },
            'ibm': {
                'close': 3.0
            },
            'goog': {
                'close': 4.0
            }
        }

        shifted1.push(data2)
        expected = SecuritiesValues({'aapl': 1.0, 'ibm': 2.0, 'goog': 3.0})
        calculated = shifted1.value
        for name in expected.index:
            self.assertAlmostEqual(expected[name], calculated[name])

        data3 = SecuritiesValues({
            'aapl': {
                'close': 3.0
            },
            'ibm': {
                'close': 4.0
            },
            'goog': {
                'close': 5.0
            }
        })

        shifted1.push(data3)
        expected = SecuritiesValues({'aapl': 1.5, 'ibm': 2.5, 'goog': 3.5})
        calculated = shifted1.value
        for name in expected.index:
            self.assertAlmostEqual(expected[name], calculated[name])
Ejemplo n.º 2
0
 def __getitem__(self, item):
     if isinstance(item, str):
         return super(SecurityMovingHistoricalWindow, self).__getitem__(item)
     elif isinstance(item, int):
         res = {}
         for name in self._innerHolders:
             try:
                 res[name] = self._innerHolders[name].value[item]
             except ArithmeticError:
                 res[name] = np.nan
         return SecuritiesValues(res)
     else:
         raise ValueError("{0} is not recognized as valid int or string".format(item))
    def testItemizedValueHolder(self):
        window = 10
        pNames = 'close'
        test = SecurityMovingAverage(window, pNames)
        test.push({
            'aapl': {
                'close': 10.0
            },
            'ibm': {
                'close': 15.0
            },
            'goog': {
                'close': 17.0
            }
        })
        test.push({
            'aapl': {
                'close': 12.0
            },
            'ibm': {
                'close': 10.0
            },
            'goog': {
                'close': 13.0
            }
        })

        # single named value holder
        test1 = test['ibm']
        self.assertAlmostEqual(test1, 12.5, 15)

        # multi-valued named value holder
        test2 = test['ibm', 'goog']
        expected = SecuritiesValues({'ibm': 12.5, 'goog': 15.0})
        for s in test2.index:
            self.assertAlmostEqual(test2[s], expected[s])

        # wrong type of item
        with self.assertRaises(TypeError):
            _ = test[1]
    def testSecuritiesValuesComparison(self):

        benchmarkValues = SecuritiesValues({
            'AAPL': 1.0,
            'IBM': 2.0,
            'GOOG': 3.0
        })
        calculated = benchmarkValues > 1.5
        expected = SecuritiesValues({'AAPL': False, 'IBM': True, 'GOOG': True})
        self.checker(expected, calculated)

        calculated = benchmarkValues < 1.5
        expected = SecuritiesValues({
            'AAPL': True,
            'IBM': False,
            'GOOG': False
        })
        self.checker(expected, calculated)

        calculated = benchmarkValues >= 1.0
        expected = SecuritiesValues({'AAPL': True, 'IBM': True, 'GOOG': True})
        self.checker(expected, calculated)

        calculated = benchmarkValues <= 2.0
        expected = SecuritiesValues({'AAPL': True, 'IBM': True, 'GOOG': False})
        self.checker(expected, calculated)

        benchmarkValues = SecuritiesValues({
            'AAPL': False,
            'IBM': True,
            'GOOG': False
        })
        calculated = benchmarkValues & True
        expected = SecuritiesValues({
            'AAPL': False,
            'IBM': True,
            'GOOG': False
        })
        self.checker(expected, calculated)

        calculated = True & benchmarkValues
        expected = SecuritiesValues({
            'AAPL': False,
            'IBM': True,
            'GOOG': False
        })
        self.checker(expected, calculated)

        calculated = benchmarkValues | True
        expected = SecuritiesValues({'AAPL': True, 'IBM': True, 'GOOG': True})
        self.checker(expected, calculated)

        calculated = True | benchmarkValues
        expected = SecuritiesValues({'AAPL': True, 'IBM': True, 'GOOG': True})
        self.checker(expected, calculated)

        benchmarkValues = SecuritiesValues({
            'AAPL': 1.0,
            'IBM': 2.0,
            'GOOG': 3.0
        })
        calculated = benchmarkValues == 2.0
        expected = SecuritiesValues({
            'AAPL': False,
            'IBM': True,
            'GOOG': False
        })
        self.checker(expected, calculated)

        calculated = benchmarkValues != 2.0
        expected = SecuritiesValues({'AAPL': True, 'IBM': False, 'GOOG': True})
        self.checker(expected, calculated)
    def testSecuritiesValuesArithmetic(self):
        benchmarkValues = {'AAPL': 1.0, 'IBM': 2.0, 'GOOG': 3.0}
        values = SecuritiesValues(benchmarkValues)

        self.assertEqual(len(benchmarkValues), len(values))

        for key in benchmarkValues:
            self.assertAlmostEqual(benchmarkValues[key], values[key], 12)

        negValues = -values
        for key in benchmarkValues:
            self.assertAlmostEqual(benchmarkValues[key], -negValues[key], 12)

        benchmarkValues2 = {'AAPL': 3.0, 'IBM': 2.0, 'GOOG': 1.0}
        values2 = SecuritiesValues(benchmarkValues2)
        addedValue = values + values2
        for key in benchmarkValues:
            self.assertAlmostEqual(
                benchmarkValues[key] + benchmarkValues2[key], addedValue[key],
                12)

        subbedValues = values - values2
        for key in benchmarkValues:
            self.assertAlmostEqual(
                benchmarkValues[key] - benchmarkValues2[key],
                subbedValues[key], 12)

        multiValues = values * values2
        for key in benchmarkValues:
            self.assertAlmostEqual(
                benchmarkValues[key] * benchmarkValues2[key], multiValues[key],
                12)

        divValues = values / values2
        for key in benchmarkValues:
            self.assertAlmostEqual(
                benchmarkValues[key] / benchmarkValues2[key], divValues[key],
                12)

        # check operated with scalar
        addedValue = values + 2.0
        for key in benchmarkValues:
            self.assertAlmostEqual(benchmarkValues[key] + 2.0, addedValue[key],
                                   12)

        subbedValue = values - 2.0
        for key in benchmarkValues:
            self.assertAlmostEqual(benchmarkValues[key] - 2.0,
                                   subbedValue[key], 12)

        multiValues = values * 2.0
        for key in benchmarkValues:
            self.assertAlmostEqual(benchmarkValues[key] * 2.0,
                                   multiValues[key], 12)

        divValues = values / 2.0
        for key in benchmarkValues:
            self.assertAlmostEqual(benchmarkValues[key] / 2.0, divValues[key],
                                   12)

        # check right associate operators
        addedValue = 2.0 + values
        for key in benchmarkValues:
            self.assertAlmostEqual(2.0 + benchmarkValues[key], addedValue[key],
                                   12)

        subbedValue = 2.0 - values
        for key in benchmarkValues:
            self.assertAlmostEqual(2.0 - benchmarkValues[key],
                                   subbedValue[key], 12)

        multiValues = 2.0 * values
        for key in benchmarkValues:
            self.assertAlmostEqual(2.0 * benchmarkValues[key],
                                   multiValues[key], 12)

        divValues = 2.0 / values
        for key in benchmarkValues:
            self.assertAlmostEqual(2.0 / benchmarkValues[key], divValues[key],
                                   12)