Example #1
0
 def setUp(self):
     self.built_in_date = datetime.date
     datetime.date = NewDate
     self.goog = Stock('GOOG', get_historical_prices)
     self.backtest = BackTest()
     self.backtest.stock = self.goog
 def setUp(self):
     self.built_in_date = datetime.date
     datetime.date = NewDate
     self.goog = Stock('GOOG', get_historical_prices)
     self.backtest = BackTest()
     self.backtest.stock = self.goog
Example #3
0
class TestBackTest(unittest.TestCase):

    def setUp(self):
        self.built_in_date = datetime.date
        datetime.date = NewDate
        self.goog = Stock('GOOG', get_historical_prices)
        self.backtest = BackTest()
        self.backtest.stock = self.goog

    def tearDown(self):
        datetime.date = self.built_in_date
        os.remove('cache/GOOG_2012-05-25')
        self.backtest.stock = None
        self.backtest.trades = []
        self.backtest.cost = lambda trade: 0

    def test_initial_cost_zero(self):
        self.assertEqual(0, self.backtest.cost(100))

    def test_setting_cost_to_lambda(self):
        self.backtest.cost = lambda trade: 10 + 5 * trade / 100
        self.assertEqual(15, self.backtest.cost(100))

    def test_trade_cost_calculation(self):
        tick = Tick(self.goog, 0, datetime.date(2012, 5, 25), 1.0, 2.0, 3.0,
                    4.0, 5, 6.0)
        self.backtest.trades.append(Trade('buy', tick))
        self.assertEqual(0, self.backtest.trade_cost)
        self.backtest.cost = lambda trade: 0.5 * trade / 100
        self.assertEqual(0.02, self.backtest.trade_cost)
        tick = Tick(self.goog, 1, datetime.date(2012, 5, 25), 1.0, 2.0, 3.0,
                    4.0, 5, 6.0)
        self.backtest.trades.append(Trade('sell', tick))
        self.assertEqual(0.04, self.backtest.trade_cost)
        self.assertEqual(0.02, self.backtest._trade_cost(0))
        self.assertEqual(0.04, self.backtest._trade_cost(1))

    def test_position_calculation(self):
        tick = Tick(self.goog, 0, datetime.date(2012, 5, 25), 1.0, 2.0, 3.0,
                    4.0, 5, 6.0)
        self.backtest.trades.append(Trade('buy', tick))
        self.assertEqual('long', self.backtest.position)
        tick = Tick(self.goog, 1, datetime.date(2012, 5, 25), 1.0, 2.0, 3.0,
                    4.0, 5, 6.0)
        self.backtest.trades.append(Trade('sell', tick))
        self.assertIsNone(self.backtest.position)
        tick = Tick(self.goog, 2, datetime.date(2012, 5, 25), 1.0, 2.0, 3.0,
                    4.0, 5, 6.0)
        self.backtest.trades.append(Trade('sell', tick))
        self.assertEqual('short', self.backtest.position)

    def test_gross_pnl_calculation(self):
        tick = self.goog[0]
        self.backtest.trades.append(Trade('buy', tick))
        self.assertEqual(-100.34, self.backtest.gross)
        tick = self.goog[10]
        self.backtest.trades.append(Trade('sell', tick))
        assert_almost_equal(1.17, self.backtest.gross)

    def test_net_pnl_zero_calculation(self):
        tick = self.goog[0]
        self.backtest.trades.append(Trade('buy', tick))
        assert_almost_equal(491.19, self.backtest.net, 2)
        self.assertEqual(0, self.backtest._net(0))
        assert_almost_equal(1.17, self.backtest._net(10))
        tick = self.goog[10]
        self.backtest.trades.append(Trade('sell', tick))
        assert_almost_equal(1.17, self.backtest.net)
        self.backtest.cost = lambda trade: 0.5 * trade / 100
        assert_almost_equal(0.16, self.backtest.net, 2)
class TestBackTest(unittest.TestCase):
    def setUp(self):
        self.built_in_date = datetime.date
        datetime.date = NewDate
        self.goog = Stock('GOOG', get_historical_prices)
        self.backtest = BackTest()
        self.backtest.stock = self.goog

    def tearDown(self):
        datetime.date = self.built_in_date
        os.remove('cache/GOOG_2012-05-25')
        self.backtest.stock = None
        self.backtest.trades = []
        self.backtest.cost = lambda trade: 0

    def test_initial_cost_zero(self):
        self.assertEqual(0, self.backtest.cost(100))

    def test_setting_cost_to_lambda(self):
        self.backtest.cost = lambda trade: 10 + 5 * trade / 100
        self.assertEqual(15, self.backtest.cost(100))

    def test_trade_cost_calculation(self):
        tick = Tick(self.goog, 0, datetime.date(2012, 5, 25), 1.0, 2.0, 3.0,
                    4.0, 5, 6.0)
        self.backtest.trades.append(Trade('buy', tick))
        self.assertEqual(0, self.backtest.trade_cost)
        self.backtest.cost = lambda trade: 0.5 * trade / 100
        self.assertEqual(0.02, self.backtest.trade_cost)
        tick = Tick(self.goog, 1, datetime.date(2012, 5, 25), 1.0, 2.0, 3.0,
                    4.0, 5, 6.0)
        self.backtest.trades.append(Trade('sell', tick))
        self.assertEqual(0.04, self.backtest.trade_cost)
        self.assertEqual(0.02, self.backtest._trade_cost(0))
        self.assertEqual(0.04, self.backtest._trade_cost(1))

    def test_position_calculation(self):
        tick = Tick(self.goog, 0, datetime.date(2012, 5, 25), 1.0, 2.0, 3.0,
                    4.0, 5, 6.0)
        self.backtest.trades.append(Trade('buy', tick))
        self.assertEqual('long', self.backtest.position)
        tick = Tick(self.goog, 1, datetime.date(2012, 5, 25), 1.0, 2.0, 3.0,
                    4.0, 5, 6.0)
        self.backtest.trades.append(Trade('sell', tick))
        self.assertIsNone(self.backtest.position)
        tick = Tick(self.goog, 2, datetime.date(2012, 5, 25), 1.0, 2.0, 3.0,
                    4.0, 5, 6.0)
        self.backtest.trades.append(Trade('sell', tick))
        self.assertEqual('short', self.backtest.position)

    def test_gross_pnl_calculation(self):
        tick = self.goog[0]
        self.backtest.trades.append(Trade('buy', tick))
        self.assertEqual(-100.34, self.backtest.gross)
        tick = self.goog[10]
        self.backtest.trades.append(Trade('sell', tick))
        assert_almost_equal(1.17, self.backtest.gross)

    def test_net_pnl_zero_calculation(self):
        tick = self.goog[0]
        self.backtest.trades.append(Trade('buy', tick))
        assert_almost_equal(491.19, self.backtest.net, 2)
        self.assertEqual(0, self.backtest._net(0))
        assert_almost_equal(1.17, self.backtest._net(10))
        tick = self.goog[10]
        self.backtest.trades.append(Trade('sell', tick))
        assert_almost_equal(1.17, self.backtest.net)
        self.backtest.cost = lambda trade: 0.5 * trade / 100
        assert_almost_equal(0.16, self.backtest.net, 2)