Exemple #1
0
    def test_riskfree(self):

        perf = DailyPerformance.from_pnl_csv("pnl.csv")
        self.assertDictEqual(perf.sharpe.to_dict(), {
            'strategy-a': 13.439089525191742,
            'strategy-b': 10.255814111748151
        })

        perf = DailyPerformance.from_pnl_csv("pnl.csv", riskfree=0.02 / 252)
        self.assertDictEqual(perf.sharpe.to_dict(), {
            'strategy-a': 13.439089525191742,
            'strategy-b': 10.255814111748151
        })
Exemple #2
0
    def test_from_pnl_csv_agg_perf(self):

        perf = DailyPerformance.from_pnl_csv("pnl.csv")
        agg_perf = AggregateDailyPerformance(perf)

        self.assertListEqual(
            list(agg_perf.returns.index.strftime("%Y-%m-%d %H:%M:%S")), [
                '2019-01-21 00:00:00', '2019-01-22 00:00:00',
                '2019-01-23 00:00:00'
            ])
        self.assertListEqual(agg_perf.returns.tolist(),
                             [0.0, 0.00204156, 0.014638520000000002])

        self.assertListEqual(
            list(agg_perf.abs_exposures.index.strftime("%Y-%m-%d %H:%M:%S")), [
                '2019-01-21 00:00:00', '2019-01-22 00:00:00',
                '2019-01-23 00:00:00'
            ])

        self.assertListEqual(agg_perf.abs_exposures.tolist(), [0.01, 0.0, 0.0])

        self.assertListEqual(
            list(agg_perf.net_exposures.index.strftime("%Y-%m-%d %H:%M:%S")), [
                '2019-01-21 00:00:00', '2019-01-22 00:00:00',
                '2019-01-23 00:00:00'
            ])

        self.assertListEqual(agg_perf.net_exposures.tolist(),
                             [-0.01, 0.0, 0.0])

        self.assertListEqual(
            list(agg_perf.turnover.index.strftime("%Y-%m-%d %H:%M:%S")), [
                '2019-01-21 00:00:00', '2019-01-22 00:00:00',
                '2019-01-23 00:00:00'
            ])

        self.assertListEqual(agg_perf.turnover.tolist(),
                             [6.94e-18, 0.01, 0.02])

        self.assertListEqual(
            list(agg_perf.total_holdings.index.strftime("%Y-%m-%d %H:%M:%S")),
            [
                '2019-01-21 00:00:00', '2019-01-22 00:00:00',
                '2019-01-23 00:00:00'
            ])

        self.assertListEqual(agg_perf.total_holdings.tolist(),
                             [41.0, 45.0, 47.0])

        self.assertListEqual(
            list(agg_perf.pnl.index.strftime("%Y-%m-%d %H:%M:%S")), [
                '2019-01-21 00:00:00', '2019-01-22 00:00:00',
                '2019-01-23 00:00:00'
            ])

        self.assertListEqual(agg_perf.pnl.tolist(),
                             [0.0, 1233.8229000000001, 8997.4175])

        self.assertListEqual(
            list(
                agg_perf.commission_amounts.index.strftime(
                    "%Y-%m-%d %H:%M:%S")), [
                        '2019-01-21 00:00:00', '2019-01-22 00:00:00',
                        '2019-01-23 00:00:00'
                    ])

        self.assertListEqual(agg_perf.commission_amounts.tolist(),
                             [0.0, 123.6406, 77.7825])

        self.assertListEqual(
            list(
                agg_perf.cum_commission_amounts.index.strftime(
                    "%Y-%m-%d %H:%M:%S")), [
                        '2019-01-21 00:00:00', '2019-01-22 00:00:00',
                        '2019-01-23 00:00:00'
                    ])

        self.assertListEqual(agg_perf.cum_commission_amounts.tolist(),
                             [0.0, 123.6406, 201.4231])

        self.assertListEqual(
            list(agg_perf.cum_pnl.index.strftime("%Y-%m-%d %H:%M:%S")), [
                '2019-01-21 00:00:00', '2019-01-22 00:00:00',
                '2019-01-23 00:00:00'
            ])

        self.assertListEqual(agg_perf.cum_pnl.tolist(),
                             [0.0, 1233.8229000000001, 10231.240399999999])

        self.assertListEqual(
            list(agg_perf.commissions.index.strftime("%Y-%m-%d %H:%M:%S")), [
                '2019-01-21 00:00:00', '2019-01-22 00:00:00',
                '2019-01-23 00:00:00'
            ])

        self.assertListEqual(agg_perf.commissions.tolist(),
                             [0.0, 0.000204606, 0.0001266])

        self.assertEqual(agg_perf.cagr, 19.581032951701545)

        self.assertEqual(agg_perf.sharpe, 11.132759642908027)

        self.assertListEqual(
            list(agg_perf.cum_returns.index.strftime("%Y-%m-%d %H:%M:%S")), [
                '2019-01-21 00:00:00', '2019-01-22 00:00:00',
                '2019-01-23 00:00:00'
            ])

        self.assertListEqual(agg_perf.cum_returns.tolist(),
                             [1.0, 1.00204156, 1.0167099654168914])

        self.assertListEqual(
            list(agg_perf.drawdowns.index.strftime("%Y-%m-%d %H:%M:%S")), [
                '2019-01-21 00:00:00', '2019-01-22 00:00:00',
                '2019-01-23 00:00:00'
            ])

        self.assertListEqual(agg_perf.drawdowns.tolist(), [0.0, 0.0, 0.0])

        self.assertEqual(agg_perf.max_drawdown, 0.0)
Exemple #3
0
    def test_override_how_to_aggregate(self):

        self.maxDiff = None

        perf = DailyPerformance.from_pnl_csv(
            "pnl.csv", how_to_aggregate={"TotalHoldings": "mean"})
        self.assertListEqual(
            list(perf.returns.index.strftime("%Y-%m-%d %H:%M:%S")), [
                '2019-01-21 00:00:00', '2019-01-22 00:00:00',
                '2019-01-23 00:00:00'
            ])
        self.assertDictEqual(
            perf.returns.to_dict(orient="list"), {
                'strategy-a': [0.0, 0.00121226, 0.00400769],
                'strategy-b': [0.0, 0.0008293, 0.01063083]
            })

        self.assertListEqual(
            list(perf.abs_exposures.index.strftime("%Y-%m-%d %H:%M:%S")), [
                '2019-01-21 00:00:00', '2019-01-22 00:00:00',
                '2019-01-23 00:00:00'
            ])

        self.assertDictEqual(perf.abs_exposures.to_dict(orient="list"), {
            'strategy-a': [0.01, 0.0, 0.0],
            'strategy-b': [0.0, 0.0, 0.0]
        })

        self.assertListEqual(
            list(perf.net_exposures.index.strftime("%Y-%m-%d %H:%M:%S")), [
                '2019-01-21 00:00:00', '2019-01-22 00:00:00',
                '2019-01-23 00:00:00'
            ])

        self.assertDictEqual(perf.net_exposures.to_dict(orient="list"), {
            'strategy-a': [-0.01, 0.0, 0.0],
            'strategy-b': [0.0, 0.0, 0.0]
        })

        self.assertListEqual(
            list(perf.turnover.index.strftime("%Y-%m-%d %H:%M:%S")), [
                '2019-01-21 00:00:00', '2019-01-22 00:00:00',
                '2019-01-23 00:00:00'
            ])

        self.assertDictEqual(
            perf.turnover.to_dict(orient="list"), {
                'strategy-a': [3.47e-18, 0.0, 0.0],
                'strategy-b': [3.47e-18, 0.01, 0.02]
            })

        self.assertListEqual(
            list(perf.total_holdings.index.strftime("%Y-%m-%d %H:%M:%S")), [
                '2019-01-21 00:00:00', '2019-01-22 00:00:00',
                '2019-01-23 00:00:00'
            ])

        self.assertDictEqual(perf.total_holdings.to_dict(orient="list"), {
            'strategy-a': [25.5, 25.0, 25.0],
            'strategy-b': [15.0, 20.0, 22.0]
        })
Exemple #4
0
    def test_from_pnl_csv(self):

        self.maxDiff = None

        perf = DailyPerformance.from_pnl_csv("pnl.csv")
        self.assertListEqual(
            list(perf.returns.index.strftime("%Y-%m-%d %H:%M:%S")), [
                '2019-01-21 00:00:00', '2019-01-22 00:00:00',
                '2019-01-23 00:00:00'
            ])
        self.assertDictEqual(
            perf.returns.to_dict(orient="list"), {
                'strategy-a': [0.0, 0.00121226, 0.00400769],
                'strategy-b': [0.0, 0.0008293, 0.01063083]
            })

        self.assertListEqual(
            list(perf.abs_exposures.index.strftime("%Y-%m-%d %H:%M:%S")), [
                '2019-01-21 00:00:00', '2019-01-22 00:00:00',
                '2019-01-23 00:00:00'
            ])

        self.assertDictEqual(perf.abs_exposures.to_dict(orient="list"), {
            'strategy-a': [0.01, 0.0, 0.0],
            'strategy-b': [0.0, 0.0, 0.0]
        })

        self.assertListEqual(
            list(perf.net_exposures.index.strftime("%Y-%m-%d %H:%M:%S")), [
                '2019-01-21 00:00:00', '2019-01-22 00:00:00',
                '2019-01-23 00:00:00'
            ])

        self.assertDictEqual(perf.net_exposures.to_dict(orient="list"), {
            'strategy-a': [-0.01, 0.0, 0.0],
            'strategy-b': [0.0, 0.0, 0.0]
        })

        self.assertListEqual(
            list(perf.turnover.index.strftime("%Y-%m-%d %H:%M:%S")), [
                '2019-01-21 00:00:00', '2019-01-22 00:00:00',
                '2019-01-23 00:00:00'
            ])

        self.assertDictEqual(
            perf.turnover.to_dict(orient="list"), {
                'strategy-a': [3.47e-18, 0.0, 0.0],
                'strategy-b': [3.47e-18, 0.01, 0.02]
            })

        self.assertListEqual(
            list(perf.total_holdings.index.strftime("%Y-%m-%d %H:%M:%S")), [
                '2019-01-21 00:00:00', '2019-01-22 00:00:00',
                '2019-01-23 00:00:00'
            ])

        self.assertDictEqual(perf.total_holdings.to_dict(orient="list"), {
            'strategy-a': [26.0, 25.0, 25.0],
            'strategy-b': [15.0, 20.0, 22.0]
        })

        self.assertListEqual(
            list(perf.pnl.index.strftime("%Y-%m-%d %H:%M:%S")), [
                '2019-01-21 00:00:00', '2019-01-22 00:00:00',
                '2019-01-23 00:00:00'
            ])

        self.assertDictEqual(
            perf.pnl.to_dict(orient="list"), {
                'strategy-a': [0.0, 732.6318, 2463.289],
                'strategy-b': [0.0, 501.1911, 6534.1285]
            })

        self.assertListEqual(
            list(perf.commission_amounts.index.strftime("%Y-%m-%d %H:%M:%S")),
            [
                '2019-01-21 00:00:00', '2019-01-22 00:00:00',
                '2019-01-23 00:00:00'
            ])

        self.assertDictEqual(
            perf.commission_amounts.to_dict(orient="list"), {
                'strategy-a': [0.0, 15.3382, 43.691],
                'strategy-b': [0.0, 108.3024, 34.0915]
            })

        self.assertListEqual(
            list(
                perf.cum_commission_amounts.index.strftime(
                    "%Y-%m-%d %H:%M:%S")), [
                        '2019-01-21 00:00:00', '2019-01-22 00:00:00',
                        '2019-01-23 00:00:00'
                    ])

        self.assertDictEqual(
            perf.cum_commission_amounts.to_dict(orient="list"), {
                'strategy-a': [0.0, 15.3382, 59.0292],
                'strategy-b': [0.0, 108.3024, 142.3939]
            })

        self.assertListEqual(
            list(perf.cum_pnl.index.strftime("%Y-%m-%d %H:%M:%S")), [
                '2019-01-21 00:00:00', '2019-01-22 00:00:00',
                '2019-01-23 00:00:00'
            ])

        self.assertDictEqual(
            perf.cum_pnl.to_dict(orient="list"), {
                'strategy-a': [0.0, 732.6318, 3195.9208000000003],
                'strategy-b': [0.0, 501.1911, 7035.3196]
            })

        self.assertListEqual(
            list(perf.commissions.index.strftime("%Y-%m-%d %H:%M:%S")), [
                '2019-01-21 00:00:00', '2019-01-22 00:00:00',
                '2019-01-23 00:00:00'
            ])

        self.assertDictEqual(
            perf.commissions.to_dict(orient="list"), {
                'strategy-a': [0.0, 2.54e-05, 7.11e-05],
                'strategy-b': [0.0, 0.000179206, 5.55e-05]
            })

        self.assertDictEqual(perf.cagr.to_dict(), {
            'strategy-a': 1.5884135772875698,
            'strategy-b': 7.013847123487736
        })

        self.assertDictEqual(perf.sharpe.to_dict(), {
            'strategy-a': 13.439089525191742,
            'strategy-b': 10.255814111748151
        })

        self.assertListEqual(
            list(perf.cum_returns.index.strftime("%Y-%m-%d %H:%M:%S")), [
                '2019-01-21 00:00:00', '2019-01-22 00:00:00',
                '2019-01-23 00:00:00'
            ])

        self.assertDictEqual(
            perf.cum_returns.to_dict(orient="list"), {
                'strategy-a': [1.0, 1.00121226, 1.0052248083622792],
                'strategy-b': [1.0, 1.0008293, 1.011468946147319]
            })

        self.assertListEqual(
            list(perf.drawdowns.index.strftime("%Y-%m-%d %H:%M:%S")), [
                '2019-01-21 00:00:00', '2019-01-22 00:00:00',
                '2019-01-23 00:00:00'
            ])

        self.assertDictEqual(perf.drawdowns.to_dict(orient="list"), {
            'strategy-a': [0.0, 0.0, 0.0],
            'strategy-b': [0.0, 0.0, 0.0]
        })

        self.assertDictEqual(perf.max_drawdown.to_dict(), {
            'strategy-a': 0.0,
            'strategy-b': 0.0
        })