def testStrategyReturnsMarketPricesForIndicator(self): self.strategy.market.close = "close" self.assertEqual(self.strategy.get_indicator_prices(), "close") self.strategy = Strategy("OO", "O") self.strategy.market = Mock() self.strategy.market.open = "open" self.assertEqual(self.strategy.get_indicator_prices(), "open")
def testStrategyChecksFieldsMarket(self): strategy = Strategy("OO", "C") strategy.measure = Mock() strategy.model = Mock() strategy.select_positions = Mock() self.assertRaisesRegex(StrategyException, """Missing parameters: market""", strategy.initialise)
class TestStrategyQueries(unittest.TestCase): def setUp(self): self.strategy = Strategy("OO", "C") self.position_series = buildNumericDataFrame(["ASX", "BHP", "CBA"], 20) self.positions = Position(self.position_series) self.returns = buildNumericDataFrame(["ASX", "BHP", "CBA"], 20) / 10 self.strategy.measure = Mock() self.strategy.positions = self.positions self.strategy.market = Mock() self.strategy.market.returns = Mock() self.strategy.market.returns.return_value = Returns(self.returns) def testStrategyReturnsMarketPricesForIndicator(self): self.strategy.market.close = "close" self.assertEqual(self.strategy.get_indicator_prices(), "close") self.strategy = Strategy("OO", "O") self.strategy.market = Mock() self.strategy.market.open = "open" self.assertEqual(self.strategy.get_indicator_prices(), "open") def testStrategyReturns(self): self.strategy.indexer.positions = Mock() self.strategy.indexer.positions.return_value = self.positions strat_returns = self.strategy.returns expected_calls = [call(self.positions)] self.strategy.indexer.positions.assert_has_calls(expected_calls) self.assertIsInstance(strat_returns, Returns) self.assertEqual(len(strat_returns), len(self.positions.data)) def expected_row(row): strat_rets = self.returns * self.position_series return log(strat_rets.iloc[row].sum() + 1) self.assertEqual(strat_returns.log(collapse_fun = "sum")[10], expected_row(10))
def setUp(self): self.strategy = Strategy("OO", "C") self.position_series = buildNumericDataFrame(["ASX", "BHP", "CBA"], 20) self.positions = Position(self.position_series) self.returns = buildNumericDataFrame(["ASX", "BHP", "CBA"], 20) / 10 self.strategy.measure = Mock() self.strategy.positions = self.positions self.strategy.market = Mock() self.strategy.market.returns = Mock() self.strategy.market.returns.return_value = Returns(self.returns)
def setUp(self): self.strategy = Strategy("OO", "C") self.indicator = Mock() self.forecasts = Mock() self.positions = Mock() self.strategy.market = Mock() self.strategy.market.tickers = ["ASX", "BHP"] self.strategy.measure = Mock(spec=Crossover) self.strategy.measure.return_value = self.indicator self.strategy.measure.execute = Mock() self.strategy.model = Mock(spec=BlockForecaster) self.strategy.model.return_value = self.forecasts self.strategy.model.execute = Mock() self.strategy.select_positions = Mock(spec=SingleLargestF) self.strategy.select_positions.return_value = self.positions self.strategy.select_positions.execute = Mock()
def setUp(self): self.tickers = ['ASX', 'BHP', 'CBA'] self.forecast_data = buildNumericDataFrame(self.tickers, 10) self.forecasts = Mock(spec=Forecast) self.forecasts.optF.return_value = self.forecast_data self.strategy = Strategy("OO", "C") self.strategy.forecasts = self.forecasts self.model = SingleLargestF() self.model_results = self.model(self.strategy)
def setUp(self): self.tickers = ['ASX', 'BHP', 'CBA', 'MOC', 'QBE'] self.forecast_data = buildNumericDataFrame(self.tickers, 10) self.forecasts = Mock(spec=Forecast) self.forecasts.optF.return_value = self.forecast_data self.strategy = Strategy("OO", "C") self.strategy.forecasts = self.forecasts self.num_positions = 3 self.select_positions = HighestRankedFs(self.num_positions) self.positions = self.select_positions(self.strategy)
class TestStrategyQueries(unittest.TestCase): def setUp(self): self.strategy = Strategy("OO", "C") self.position_series = buildNumericDataFrame(["ASX", "BHP", "CBA"], 20) self.positions = Position(self.position_series) self.returns = buildNumericDataFrame(["ASX", "BHP", "CBA"], 20) / 10 self.strategy.measure = Mock() self.strategy.positions = self.positions self.strategy.market = Mock() self.strategy.market.returns = Mock() self.strategy.market.returns.return_value = Returns(self.returns) def testStrategyReturnsMarketPricesForIndicator(self): self.strategy.market.close = "close" self.assertEqual(self.strategy.get_indicator_prices(), "close") self.strategy = Strategy("OO", "O") self.strategy.market = Mock() self.strategy.market.open = "open" self.assertEqual(self.strategy.get_indicator_prices(), "open") def testStrategyReturns(self): self.strategy.indexer.positions = Mock() self.strategy.indexer.positions.return_value = self.positions strat_returns = self.strategy.returns expected_calls = [call(self.positions)] self.strategy.indexer.positions.assert_has_calls(expected_calls) self.assertIsInstance(strat_returns, Returns) self.assertEqual(len(strat_returns), len(self.positions.data)) def expected_row(row): strat_rets = self.returns * self.position_series return log(strat_rets.iloc[row].sum() + 1) self.assertEqual( strat_returns.log(collapse_fun="sum")[10], expected_row(10))
def setUp(self): self.strategy = Strategy("OO", "C") self.indicator = Mock() self.forecasts = Mock() self.positions = Mock() self.strategy.market = Mock() self.strategy.market.tickers = ["ASX", "BHP"] self.strategy.measure = Mock(spec = Crossover) self.strategy.measure.return_value = self.indicator self.strategy.measure.execute = Mock() self.strategy.model = Mock(spec = BlockForecaster) self.strategy.model.return_value = self.forecasts self.strategy.model.execute = Mock() self.strategy.select_positions = Mock(spec = SingleLargestF) self.strategy.select_positions.return_value = self.positions self.strategy.select_positions.execute = Mock()
def run_various_trade_timings(market): strategyCOO = Strategy("OO", "C") strategyCOO.market = market strategyCOO.measure = Crossover(20, 10) strategyCOO.model = BlockForecaster(20) strategyCOO.select_positions = SingleLargestF() strategyCOO.initialise() strategyCOO.market_returns.plot(collapse_fun = "mean", color = "black", label = "BandH") strategyCOO.plot_returns(color = "blue", label = "COO") strategyOCO = Strategy("CO", "O") strategyOCO.market = market strategyOCO.measure = Crossover(20, 10) strategyOCO.model = BlockForecaster(20) strategyOCO.select_positions = SingleLargestF() strategyOCO.initialise() strategyOCO.plot_returns(color = "red", label = "OCO") strategyOCC = Strategy("CC", "O") strategyOCC.market = market strategyOCC.measure = Crossover(20, 10) strategyOCC.model = BlockForecaster(20) strategyOCC.select_positions = SingleLargestF() strategyOCC.initialise() strategyOCC.plot_returns(color = "orange", label = "OCC") strategyCOC = Strategy("OC", "C") strategyCOC.market = market strategyCOC.measure = Crossover(20, 10) strategyCOC.model = BlockForecaster(20) strategyCOC.select_positions = SingleLargestF() strategyCOC.initialise() strategyCOC.plot_returns(color = "cyan", label = "COC") plt.legend()
class TestStrategyInitialisation(unittest.TestCase): def setUp(self): self.strategy = Strategy("OO", "C") self.indicator = Mock() self.forecasts = Mock() self.positions = Mock() self.strategy.market = Mock() self.strategy.market.tickers = ["ASX", "BHP"] self.strategy.measure = Mock(spec=Crossover) self.strategy.measure.return_value = self.indicator self.strategy.measure.execute = Mock() self.strategy.model = Mock(spec=BlockForecaster) self.strategy.model.return_value = self.forecasts self.strategy.model.execute = Mock() self.strategy.select_positions = Mock(spec=SingleLargestF) self.strategy.select_positions.return_value = self.positions self.strategy.select_positions.execute = Mock() def testStrategyChecksMissingFieldsOnInitialisation(self): self.strategy.check_fields = Mock() self.strategy.initialise() self.strategy.check_fields.assert_called_once_with() def testStrategyInitialisationProcedure(self): self.strategy.initialise() self.strategy.measure.assert_called_once_with(self.strategy) self.assertIs(self.strategy.indicator, self.indicator) self.strategy.model.assert_called_once_with(self.strategy) self.assertIs(self.strategy.forecasts, self.forecasts) self.strategy.select_positions.assert_called_once_with(self.strategy) self.assertIs(self.strategy.positions, self.positions) def testStrategyMeasureDoesNotCallIndexer(self): self.strategy.indexer.indicator = Mock() self.strategy.initialise() self.assertTrue(self.strategy.indexer.indicator.called == False) def testStrategyCallsIndexerForIndicator(self): indicator_series = buildTextDataFrame(["ASX", "BHP"], 10) indicator = Indicator(indicator_series) self.strategy.indexer.indicator = Mock() self.strategy.indexer.indicator.return_value = indicator self.strategy.indicator = indicator result = self.strategy.lagged_indicator self.assertIsInstance(result, Indicator) expected_calls = [call(indicator)] self.strategy.indexer.indicator.assert_has_calls(expected_calls) def testStrategyCallsIndexerForPositions(self): position_series = buildNumericDataFrame(["ASX", "BHP"], 10) positions = Position(position_series) self.strategy.indexer.positions = Mock() self.strategy.indexer.positions.return_value = positions self.strategy.positions = positions result = self.strategy.lagged_positions self.assertIsInstance(result, Position) expected_calls = [call(positions)] self.strategy.indexer.positions.assert_has_calls(expected_calls) def testStrategyCallsMarketForReturns(self): self.strategy.market.returns = Mock() self.strategy.market_returns expected_calls = [call(self.strategy.indexer)] self.strategy.market.returns.assert_has_calls(expected_calls) def testStrategyDoesNotRedoMeasure(self): self.strategy.indicator = self.indicator self.strategy.initialise() self.assertFalse(self.strategy.measure.execute.called) def testStrategyDoesNotRedoModel(self): self.strategy.forecasts = self.forecasts self.strategy.initialise() self.assertFalse(self.strategy.model.execute.called) def testStrategyDoesNotRedoPositions(self): self.strategy.positions = self.positions self.strategy.initialise() self.assertFalse(self.strategy.select_positions.execute.called)
def testStrategyChecksFieldsAllEmpty(self): strategy = Strategy("OO", "C") self.assertRaisesRegex( StrategyException, """Missing parameters: market, measure, model, select_positions""", strategy.initialise)
def setUp(self): self.trade_timing = "OO" self.ind_timing = "C" self.strategy = Strategy(self.trade_timing, self.ind_timing) self.dummy_timeSeries = buildNumericDataFrame(["ASX", "BHP", "CBA"], 10)
class TestStrategyInitialisation(unittest.TestCase): def setUp(self): self.strategy = Strategy("OO", "C") self.indicator = Mock() self.forecasts = Mock() self.positions = Mock() self.strategy.market = Mock() self.strategy.market.tickers = ["ASX", "BHP"] self.strategy.measure = Mock(spec = Crossover) self.strategy.measure.return_value = self.indicator self.strategy.measure.execute = Mock() self.strategy.model = Mock(spec = BlockForecaster) self.strategy.model.return_value = self.forecasts self.strategy.model.execute = Mock() self.strategy.select_positions = Mock(spec = SingleLargestF) self.strategy.select_positions.return_value = self.positions self.strategy.select_positions.execute = Mock() def testStrategyChecksMissingFieldsOnInitialisation(self): self.strategy.check_fields = Mock() self.strategy.initialise() self.strategy.check_fields.assert_called_once_with() def testStrategyInitialisationProcedure(self): self.strategy.initialise() self.strategy.measure.assert_called_once_with(self.strategy) self.assertIs(self.strategy.indicator, self.indicator) self.strategy.model.assert_called_once_with(self.strategy) self.assertIs(self.strategy.forecasts, self.forecasts) self.strategy.select_positions.assert_called_once_with(self.strategy) self.assertIs(self.strategy.positions, self.positions) def testStrategyMeasureDoesNotCallIndexer(self): self.strategy.indexer.indicator = Mock() self.strategy.initialise() self.assertTrue(self.strategy.indexer.indicator.called == False) def testStrategyCallsIndexerForIndicator(self): indicator_series = buildTextDataFrame(["ASX", "BHP"], 10) indicator = Indicator(indicator_series) self.strategy.indexer.indicator = Mock() self.strategy.indexer.indicator.return_value = indicator self.strategy.indicator = indicator result = self.strategy.lagged_indicator self.assertIsInstance(result, Indicator) expected_calls = [call(indicator)] self.strategy.indexer.indicator.assert_has_calls(expected_calls) def testStrategyCallsIndexerForPositions(self): position_series = buildNumericDataFrame(["ASX", "BHP"], 10) positions = Position(position_series) self.strategy.indexer.positions = Mock() self.strategy.indexer.positions.return_value = positions self.strategy.positions = positions result = self.strategy.lagged_positions self.assertIsInstance(result, Position) expected_calls = [call(positions)] self.strategy.indexer.positions.assert_has_calls(expected_calls) def testStrategyCallsMarketForReturns(self): self.strategy.market.returns = Mock() self.strategy.market_returns expected_calls = [call(self.strategy.indexer)] self.strategy.market.returns.assert_has_calls(expected_calls) def testStrategyDoesNotRedoMeasure(self): self.strategy.indicator = self.indicator self.strategy.initialise() self.assertFalse(self.strategy.measure.execute.called) def testStrategyDoesNotRedoModel(self): self.strategy.forecasts = self.forecasts self.strategy.initialise() self.assertFalse(self.strategy.model.execute.called) def testStrategyDoesNotRedoPositions(self): self.strategy.positions = self.positions self.strategy.initialise() self.assertFalse(self.strategy.select_positions.execute.called)