Пример #1
0
    def test_rank_ROE_and_PE_returns_correct_top(self):
        roe_rank = {
            'name': 'roe',
            'ascending': False
        }
        pe_rank = {
            'name': 'pe',
            'ascending': True
        }

        data = pd.DataFrame({
            'code': ['ANZ', 'CBA', 'NAB', 'WST'],
            'pe': [3, 4, 5, 6],
            'roe': [0.30, 0.50, 0.80, 0.70]},
            index=pd.to_datetime(
                [datetime.date(self.current_year, 6, 20)] * 4
            ), dtype=float
        )

        ranker = Ranker(data, [pe_rank, roe_rank], [], limit=50)
        results = ranker.process()

        # Output should look like this:
        # code  pe_rank  roe_rank  total_rank
        # ANZ    1         4        5
        # CBA    2         3        5
        # NAB    3         1        4  -- first pick
        # WST    4         2        6  -- last pick
        self.assertTrue(results[0:1]['code'][0] == 'NAB')
        self.assertTrue(results[-1:]['code'][0] == 'WST')
Пример #2
0
    def test_rank_ROE_avg_3_returns_correct_top(self):
        roe_rank = {
            'name': 'roe',
            'max': 0.8,
            'average': 3,
            'ascending': False
        }

        # Push last 3 years into a list
        date_array = [
            datetime.date(self.current_year - i, 6, 20) for i in range(3)
        ]

        data = pd.DataFrame(
            {
                'code': ['ANZ'] * 3 + ['CBA'] * 3 + ['NAB'] * 3,
                'roe': [0.1, 0.2, 0.5] + [0.7, 0.1, 0.2] + [0.1, 0.2, 0.4]
            },
            index=pd.to_datetime(date_array * 3),
            dtype=float)

        ranker = Ranker(data, [roe_rank], [], limit=50)
        results = ranker.process()

        self.assertTrue(results[0:1]['code'][0] == 'CBA')
        self.assertTrue(results[-1:]['code'][0] == 'NAB')
Пример #3
0
    def test_rank_ROE_and_PE_returns_correct_top(self):
        roe_rank = {'name': 'roe', 'ascending': False}
        pe_rank = {'name': 'pe', 'ascending': True}

        data = pd.DataFrame(
            {
                'code': ['ANZ', 'CBA', 'NAB', 'WST'],
                'pe': [3, 4, 5, 6],
                'roe': [0.30, 0.50, 0.80, 0.70]
            },
            index=pd.to_datetime([datetime.date(self.current_year, 6, 20)] *
                                 4),
            dtype=float)

        ranker = Ranker(data, [pe_rank, roe_rank], [], limit=50)
        results = ranker.process()

        # Output should look like this:
        # code  pe_rank  roe_rank  total_rank
        # ANZ    1         4        5
        # CBA    2         3        5
        # NAB    3         1        4  -- first pick
        # WST    4         2        6  -- last pick
        self.assertTrue(results[0:1]['code'][0] == 'NAB')
        self.assertTrue(results[-1:]['code'][0] == 'WST')
Пример #4
0
    def test_rank_by_ROE_return_highest_first_after_filtering(self):
        roe_rank = {'name': 'roe', 'max': 0.70, 'ascending': False}
        data = pd.DataFrame(
            {
                'code': ['ANZ', 'CBA', 'NAB'],
                'roe': [0.70, 0.71, 0.69]
            },
            index=pd.to_datetime([datetime.date(self.current_year, 6, 20)] *
                                 3),
            dtype=float)

        ranker = Ranker(data, [roe_rank], [], limit=50)
        results = ranker.process()

        self.assertTrue(results[0:1]['code'][0] == 'ANZ')
Пример #5
0
    def test_rank_by_PE_returns_lowest_first(self):
        pe_rank = {'name': 'pe', 'ascending': True}
        data = pd.DataFrame(
            {
                'code': ['ANZ', 'CBA', 'NAB'],
                'pe': [3.0, 1.0, 2.0],
            },
            index=pd.to_datetime([datetime.date(self.current_year, 6, 20)] *
                                 3),
            dtype=float)

        ranker = Ranker(data, [pe_rank], [], limit=50)
        results = ranker.process()

        self.assertTrue(results[0:1]['code'][0] == 'CBA')
Пример #6
0
    def test_rank_by_PE_returns_lowest_first(self):
        pe_rank = {
            'name': 'pe',
            'ascending': True
        }
        data = pd.DataFrame({
            'code': ['ANZ', 'CBA', 'NAB'],
            'pe': [3.0, 1.0, 2.0],
        }, index=pd.to_datetime(
            [datetime.date(self.current_year, 6, 20)] * 3), dtype=float
        )

        ranker = Ranker(data, [pe_rank], [], limit=50)
        results = ranker.process()

        self.assertTrue(results[0:1]['code'][0] == 'CBA')
Пример #7
0
    def test_rank_and_filter_removes_too_small_companies(self):
        market_cap_filter = {'name': 'market_cap', 'min': 5000000}
        roe_rank = {'name': 'roe', 'max': 0.70, 'ascending': False}
        data = pd.DataFrame(
            {
                'code': ['SMALL', 'ANZ', 'CBA', 'NAB'],
                'roe': [0.50, 0.40, 0.41, 0.39],
                'market_cap': [1000000] + [6000000] * 3
            },
            index=pd.to_datetime([datetime.date(self.current_year, 6, 20)] *
                                 4),
            dtype=float)

        ranker = Ranker(data, [roe_rank], [market_cap_filter], limit=50)
        results = ranker.process()

        self.assertTrue(results[0:1]['code'][0] == 'CBA')
Пример #8
0
    def test_rank_by_ROE_return_highest_first_after_filtering(self):
        roe_rank = {
            'name': 'roe',
            'max': 0.70,
            'ascending': False
        }
        data = pd.DataFrame({
            'code': ['ANZ', 'CBA', 'NAB'],
            'roe': [0.70, 0.71, 0.69]},
            index=pd.to_datetime(
                [datetime.date(self.current_year, 6, 20)] * 3
            ), dtype=float
        )

        ranker = Ranker(data, [roe_rank], [], limit=50)
        results = ranker.process()

        self.assertTrue(results[0:1]['code'][0] == 'ANZ')
Пример #9
0
    def test_rank_and_filter_removes_too_small_companies(self):
        market_cap_filter = {
            'name': 'market_cap',
            'min': 5000000
        }
        roe_rank = {
            'name': 'roe',
            'max': 0.70,
            'ascending': False
        }
        data = pd.DataFrame({
            'code': ['SMALL', 'ANZ', 'CBA', 'NAB'],
            'roe': [0.50, 0.40, 0.41, 0.39],
            'market_cap': [1000000] + [6000000] * 3},
            index=pd.to_datetime(
                [datetime.date(self.current_year, 6, 20)] * 4
            ), dtype=float
        )

        ranker = Ranker(data, [roe_rank], [market_cap_filter], limit=50)
        results = ranker.process()

        self.assertTrue(results[0:1]['code'][0] == 'CBA')
Пример #10
0
    def test_rank_ROE_avg_3_returns_correct_top(self):
        roe_rank = {
            'name': 'roe',
            'max': 0.8,
            'average': 3,
            'ascending': False
        }

        # Push last 3 years into a list
        date_array = [
            datetime.date(self.current_year - i, 6, 20) for i in range(3)]

        data = pd.DataFrame({
            'code': ['ANZ'] * 3 + ['CBA'] * 3 + ['NAB'] * 3,
            'roe': [0.1, 0.2, 0.5] + [0.7, 0.1, 0.2] + [0.1, 0.2, 0.4]},
            index=pd.to_datetime(date_array * 3), dtype=float
        )

        ranker = Ranker(data, [roe_rank], [], limit=50)
        results = ranker.process()

        self.assertTrue(results[0:1]['code'][0] == 'CBA')
        self.assertTrue(results[-1:]['code'][0] == 'NAB')