示例#1
0
 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))
示例#4
0
 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)
示例#5
0
 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")
示例#7
0
 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()
示例#8
0
 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.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)
示例#10
0
 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)
示例#11
0
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()
示例#13
0
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()
示例#14
0
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)
示例#15
0
 def testStrategyChecksFieldsAllEmpty(self):
     strategy = Strategy("OO", "C")
     self.assertRaisesRegex(
         StrategyException,
         """Missing parameters: market, measure, model, select_positions""",
         strategy.initialise)
示例#16
0
 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)