Ejemplo n.º 1
0
    def init_instance_fixtures(self):
        super(TestRisk, self).init_instance_fixtures()

        start_date = datetime.datetime(year=2006,
                                       month=1,
                                       day=1,
                                       hour=0,
                                       minute=0,
                                       tzinfo=pytz.utc)
        end_date = datetime.datetime(year=2006,
                                     month=12,
                                     day=29,
                                     tzinfo=pytz.utc)

        self.sim_params = SimulationParameters(
            period_start=start_date,
            period_end=end_date,
            trading_schedule=self.trading_schedule,
        )

        self.algo_returns_06 = factory.create_returns_from_list(
            answer_key.ALGORITHM_RETURNS.values, self.sim_params)

        self.cumulative_metrics_06 = risk.RiskMetricsCumulative(
            self.sim_params,
            treasury_curves=self.env.treasury_curves,
            trading_schedule=self.trading_schedule,
        )

        for dt, returns in answer_key.RETURNS_DATA.iterrows():
            self.cumulative_metrics_06.update(dt, returns['Algorithm Returns'],
                                              returns['Benchmark Returns'],
                                              0.0)
Ejemplo n.º 2
0
    def setUp(self):
        start_date = datetime.datetime(
            year=2006,
            month=1,
            day=1,
            hour=0,
            minute=0,
            tzinfo=pytz.utc)
        end_date = datetime.datetime(
            year=2006, month=12, day=29, tzinfo=pytz.utc)

        self.sim_params = SimulationParameters(
            period_start=start_date,
            period_end=end_date
        )

        self.algo_returns_06 = factory.create_returns_from_list(
            answer_key.ALGORITHM_RETURNS.values,
            self.sim_params
        )

        self.cumulative_metrics_06 = risk.RiskMetricsCumulative(
            self.sim_params)

        for dt, returns in answer_key.RETURNS_DATA.iterrows():
            self.cumulative_metrics_06.update(dt,
                                              returns['Algorithm Returns'],
                                              returns['Benchmark Returns'])
Ejemplo n.º 3
0
 def handle_intraday_close(self, new_mkt_open, new_mkt_close):
     # update_performance should have been called in handle_minute_close
     # so it is not repeated here.
     self.intraday_risk_metrics = \
         risk.RiskMetricsCumulative(self.sim_params)
     # increment the day counter before we move markers forward.
     self.day_count += 1.0
     self.market_open = new_mkt_open
     self.market_close = new_mkt_close
Ejemplo n.º 4
0
 def handle_intraday_close(self):
     self.intraday_risk_metrics = \
         risk.RiskMetricsCumulative(self.sim_params)
     # increment the day counter before we move markers forward.
     self.day_count += 1.0
     # move the market day markers forward
     if self.market_close < trading.environment.last_trading_day:
         self.market_open, self.market_close = \
             trading.environment.next_open_and_close(self.market_open)
     else:
         self.market_close = self.sim_params.last_close
Ejemplo n.º 5
0
 def handle_intraday_close(self):
     # update_performance should have been called in handle_minute_close
     # so it is not repeated here.
     self.intraday_risk_metrics = \
         risk.RiskMetricsCumulative(self.sim_params)
     # increment the day counter before we move markers forward.
     self.day_count += 1.0
     # move the market day markers forward
     if self.market_close < trading.environment.last_trading_day:
         self.market_open, self.market_close = \
             trading.environment.next_open_and_close(self.market_open)
     else:
         self.market_close = self.sim_params.last_close
Ejemplo n.º 6
0
    def test_minute_risk(self):

        risk_metrics = risk.RiskMetricsCumulative(self.sim_params)

        first_dt = self.sim_params.first_open
        second_dt = self.sim_params.first_open + datetime.timedelta(minutes=1)

        risk_metrics.update(first_dt, 1.0, 2.0)

        self.assertEquals(1, len(risk_metrics.alpha))

        risk_metrics.update(second_dt, 3.0, 4.0)

        self.assertEquals(2, len(risk_metrics.alpha))
Ejemplo n.º 7
0
    def handle_intraday_market_close(self, new_mkt_open, new_mkt_close):
        """
        Function called at market close only when emitting at minutely
        frequency.
        """
        # update_performance should have been called in handle_minute_close
        # so it is not repeated here.
        self.intraday_risk_metrics = \
            risk.RiskMetricsCumulative(self.sim_params)
        # increment the day counter before we move markers forward.
        self.day_count += 1.0
        self.market_open = new_mkt_open
        self.market_close = new_mkt_close

        self.account_needs_update = True
Ejemplo n.º 8
0
    def test_minute_risk(self):

        risk_metrics = risk.RiskMetricsCumulative(self.sim_params)

        first_dt = self.sim_params.first_open
        second_dt = self.sim_params.first_open + datetime.timedelta(minutes=1)
        account = {'leverage': 0.0}

        risk_metrics.update(first_dt, 1.0, 2.0, account)

        self.assertEquals(1, len(risk_metrics.metrics.alpha.valid()))

        risk_metrics.update(second_dt, 3.0, 4.0, account)

        self.assertEquals(2, len(risk_metrics.metrics.alpha.valid()))
Ejemplo n.º 9
0
    def init_instance_fixtures(self):
        super(TestRisk, self).init_instance_fixtures()

        start_session = pd.Timestamp("2006-01-01", tz='UTC')
        end_session = pd.Timestamp("2006-12-29", tz='UTC')

        self.sim_params = SimulationParameters(
            start_session=start_session,
            end_session=end_session,
            trading_calendar=self.trading_calendar,
        )
        self.algo_returns = factory.create_returns_from_list(
            RETURNS, self.sim_params)
        self.cumulative_metrics = risk.RiskMetricsCumulative(
            self.sim_params,
            trading_calendar=self.trading_calendar,
        )
        for dt, returns in self.algo_returns.iteritems():
            self.cumulative_metrics.update(dt, returns, BENCHMARK_BASE, 0.0)
Ejemplo n.º 10
0
    def __init__(self, sim_params, env=None):

        self.sim_params = sim_params

        self.period_start = self.sim_params.period_start
        self.period_end = self.sim_params.period_end
        self.last_close = self.sim_params.last_close
        first_day = self.sim_params.first_open
        self.market_open, self.market_close = \
            trading.environment.get_open_and_close(first_day)
        self.total_days = self.sim_params.days_in_period
        self.capital_base = self.sim_params.capital_base
        self.emission_rate = self.sim_params.emission_rate

        all_trading_days = trading.environment.trading_days
        mask = ((all_trading_days >= normalize_date(self.period_start)) &
                (all_trading_days <= normalize_date(self.period_end)))

        self.trading_days = all_trading_days[mask]

        self.dividend_frame = pd.DataFrame()
        self._dividend_count = 0

        self.position_tracker = PositionTracker()

        self.perf_periods = []

        if self.emission_rate == 'daily':
            self.all_benchmark_returns = pd.Series(index=self.trading_days)
            self.intraday_risk_metrics = None
            self.cumulative_risk_metrics = \
                risk.RiskMetricsCumulative(self.sim_params)

        elif self.emission_rate == 'minute':
            self.all_benchmark_returns = pd.Series(
                index=pd.date_range(self.sim_params.first_open,
                                    self.sim_params.last_close,
                                    freq='Min'))
            self.intraday_risk_metrics = \
                risk.RiskMetricsCumulative(self.sim_params)

            self.cumulative_risk_metrics = \
                risk.RiskMetricsCumulative(self.sim_params,
                                           returns_frequency='daily',
                                           create_first_day_stats=True)

            self.minute_performance = PerformancePeriod(
                # initial cash is your capital base.
                self.capital_base,
                # the cumulative period will be calculated over the
                # entire test.
                self.period_start,
                self.period_end,
                # don't save the transactions for the cumulative
                # period
                keep_transactions=False,
                keep_orders=False,
                # don't serialize positions for cumualtive period
                serialize_positions=False)
            self.minute_performance.position_tracker = self.position_tracker
            self.perf_periods.append(self.minute_performance)

        # this performance period will span the entire simulation from
        # inception.
        self.cumulative_performance = PerformancePeriod(
            # initial cash is your capital base.
            self.capital_base,
            # the cumulative period will be calculated over the entire test.
            self.period_start,
            self.period_end,
            # don't save the transactions for the cumulative
            # period
            keep_transactions=False,
            keep_orders=False,
            # don't serialize positions for cumualtive period
            serialize_positions=False,
        )
        self.cumulative_performance.position_tracker = self.position_tracker
        self.perf_periods.append(self.cumulative_performance)

        # this performance period will span just the current market day
        self.todays_performance = PerformancePeriod(
            # initial cash is your capital base.
            self.capital_base,
            # the daily period will be calculated for the market day
            self.market_open,
            self.market_close,
            keep_transactions=True,
            keep_orders=True,
            serialize_positions=True,
        )
        self.todays_performance.position_tracker = self.position_tracker

        self.perf_periods.append(self.todays_performance)

        self.saved_dt = self.period_start
        self.returns = pd.Series(index=self.trading_days)
        # one indexed so that we reach 100%
        self.day_count = 0.0
        self.txn_count = 0
        self.event_count = 0
Ejemplo n.º 11
0
    def __init__(self, sim_params, env):

        self.sim_params = sim_params
        self.env = env

        self.period_start = self.sim_params.period_start
        self.period_end = self.sim_params.period_end
        self.last_close = self.sim_params.last_close
        first_open = self.sim_params.first_open.tz_convert(
            self.env.exchange_tz
        )
        self.day = pd.Timestamp(datetime(first_open.year, first_open.month,
                                         first_open.day), tz='UTC')
        self.market_open, self.market_close = env.get_open_and_close(self.day)
        self.total_days = self.sim_params.days_in_period
        self.capital_base = self.sim_params.capital_base
        self.emission_rate = sim_params.emission_rate

        all_trading_days = env.trading_days
        mask = ((all_trading_days >= normalize_date(self.period_start)) &
                (all_trading_days <= normalize_date(self.period_end)))

        self.trading_days = all_trading_days[mask]

        self.dividend_frame = pd.DataFrame()
        self._dividend_count = 0

        self.position_tracker = PositionTracker(asset_finder=env.asset_finder)

        if self.emission_rate == 'daily':
            self.all_benchmark_returns = pd.Series(
                index=self.trading_days)
            self.cumulative_risk_metrics = \
                risk.RiskMetricsCumulative(self.sim_params, self.env)

        elif self.emission_rate == 'minute':
            self.all_benchmark_returns = pd.Series(index=pd.date_range(
                self.sim_params.first_open, self.sim_params.last_close,
                freq='Min'))

            self.cumulative_risk_metrics = \
                risk.RiskMetricsCumulative(self.sim_params, self.env,
                                           create_first_day_stats=True)

        # this performance period will span the entire simulation from
        # inception.
        self.cumulative_performance = PerformancePeriod(
            # initial cash is your capital base.
            starting_cash=self.capital_base,
            # the cumulative period will be calculated over the entire test.
            period_open=self.period_start,
            period_close=self.period_end,
            # don't save the transactions for the cumulative
            # period
            keep_transactions=False,
            keep_orders=False,
            # don't serialize positions for cumualtive period
            serialize_positions=False,
            asset_finder=self.env.asset_finder,
        )
        self.cumulative_performance.position_tracker = self.position_tracker

        # this performance period will span just the current market day
        self.todays_performance = PerformancePeriod(
            # initial cash is your capital base.
            starting_cash=self.capital_base,
            # the daily period will be calculated for the market day
            period_open=self.market_open,
            period_close=self.market_close,
            keep_transactions=True,
            keep_orders=True,
            serialize_positions=True,
            asset_finder=self.env.asset_finder,
        )
        self.todays_performance.position_tracker = self.position_tracker

        self.saved_dt = self.period_start
        # one indexed so that we reach 100%
        self.day_count = 0.0
        self.txn_count = 0

        self.account_needs_update = True
        self._account = None
Ejemplo n.º 12
0
    def __init__(self, sim_params, trading_calendar, env):
        self.sim_params = sim_params
        self.trading_calendar = trading_calendar
        self.asset_finder = env.asset_finder
        self.treasury_curves = env.treasury_curves

        self.period_start = self.sim_params.start_session
        self.period_end = self.sim_params.end_session
        self.last_close = self.sim_params.last_close
        self._current_session = self.sim_params.start_session

        self.market_open, self.market_close = \
            self.trading_calendar.open_and_close_for_session(
                self._current_session
            )

        self.total_session_count = len(self.sim_params.sessions)
        self.capital_base = self.sim_params.capital_base
        self.emission_rate = sim_params.emission_rate

        self.position_tracker = PositionTracker(
            asset_finder=env.asset_finder,
            data_frequency=self.sim_params.data_frequency)

        if self.emission_rate == 'daily':
            self.all_benchmark_returns = pd.Series(
                index=self.sim_params.sessions)
            self.cumulative_risk_metrics = \
                risk.RiskMetricsCumulative(
                    self.sim_params,
                    self.treasury_curves,
                    self.trading_calendar
                )
        elif self.emission_rate == 'minute':
            self.all_benchmark_returns = pd.Series(
                index=pd.date_range(self.sim_params.first_open,
                                    self.sim_params.last_close,
                                    freq='Min'))

            self.cumulative_risk_metrics = \
                risk.RiskMetricsCumulative(
                    self.sim_params,
                    self.treasury_curves,
                    self.trading_calendar,
                    create_first_day_stats=True
                )

        # this performance period will span the entire simulation from
        # inception.
        self.cumulative_performance = PerformancePeriod(
            # initial cash is your capital base.
            starting_cash=self.capital_base,
            data_frequency=self.sim_params.data_frequency,
            # the cumulative period will be calculated over the entire test.
            period_open=self.period_start,
            period_close=self.period_end,
            # don't save the transactions for the cumulative
            # period
            keep_transactions=False,
            keep_orders=False,
            # don't serialize positions for cumulative period
            serialize_positions=False,
            asset_finder=self.asset_finder,
            name="Cumulative")
        self.cumulative_performance.position_tracker = self.position_tracker

        # this performance period will span just the current market day
        self.todays_performance = PerformancePeriod(
            # initial cash is your capital base.
            starting_cash=self.capital_base,
            data_frequency=self.sim_params.data_frequency,
            # the daily period will be calculated for the market day
            period_open=self.market_open,
            period_close=self.market_close,
            keep_transactions=True,
            keep_orders=True,
            serialize_positions=True,
            asset_finder=self.asset_finder,
            name="Daily")
        self.todays_performance.position_tracker = self.position_tracker

        self.saved_dt = self.period_start
        # one indexed so that we reach 100%
        self.session_count = 0.0
        self.txn_count = 0

        self.account_needs_update = True
        self._account = None