示例#1
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=31, tzinfo=pytz.utc)

        self.benchmark_returns, self.treasury_curves = \
            factory.load_market_data()

        self.trading_env = TradingEnvironment(
            self.benchmark_returns,
            self.treasury_curves,
            period_start=start_date,
            period_end=end_date
        )

        self.onesec = datetime.timedelta(seconds=1)
        self.oneday = datetime.timedelta(days=1)
        self.tradingday = datetime.timedelta(hours=6, minutes=30)
        self.dt = datetime.datetime.utcnow()

        self.algo_returns_06 = factory.create_returns_from_list(
            RETURNS,
            self.trading_env
        )

        self.metrics_06 = risk.RiskReport(
            self.algo_returns_06,
            self.trading_env
        )

        start_08 = datetime.datetime(
            year=2008,
            month=1,
            day=1,
            hour=0,
            minute=0,
            tzinfo=pytz.utc)

        end_08 = datetime.datetime(
            year=2008,
            month=12,
            day=31,
            tzinfo=pytz.utc
        )
        self.trading_env08 = TradingEnvironment(
            self.benchmark_returns,
            self.treasury_curves,
            period_start=start_08,
            period_end=end_08
        )
示例#2
0
    def test_partial_month(self):

        start = datetime.datetime(
            year=1991,
            month=1,
            day=1,
            hour=0,
            minute=0,
            tzinfo=pytz.utc)

        #1992 and 1996 were leap years
        total_days = 365 * 5 + 2
        end = start + datetime.timedelta(days=total_days)
        trading_env90s = TradingEnvironment(
            self.benchmark_returns,
            self.treasury_curves,
            period_start=start,
            period_end=end
        )

        returns = factory.create_returns(total_days, trading_env90s)
        returns = returns[:-10]  # truncate the returns series to end mid-month
        metrics = risk.RiskReport(returns, trading_env90s)
        total_months = 60
        self.check_metrics(metrics, total_months, start)
示例#3
0
    def test_yahoo_bars_to_panel_source(self):
        env = TradingEnvironment()
        finder = AssetFinder(env.engine)
        stocks = ['AAPL', 'GE']
        env.write_data(equities_identifiers=stocks)
        start = pd.datetime(1993, 1, 1, 0, 0, 0, 0, pytz.utc)
        end = pd.datetime(2002, 1, 1, 0, 0, 0, 0, pytz.utc)
        data = factory.load_bars_from_yahoo(stocks=stocks,
                                            indexes={},
                                            start=start,
                                            end=end)
        check_fields = [
            'sid', 'open', 'high', 'low', 'close', 'volume', 'price'
        ]

        copy_panel = data.copy()
        sids = finder.map_identifier_index_to_sids(data.items,
                                                   data.major_axis[0])
        copy_panel.items = sids
        source = DataPanelSource(copy_panel)
        for event in source:
            for check_field in check_fields:
                self.assertIn(check_field, event)
            self.assertTrue(isinstance(event['volume'], (integer_types)))
            self.assertTrue(event['sid'] in sids)
示例#4
0
    def test_max_date(self):
        max_date = pd.Timestamp('2008-08-01', tz='UTC')
        env = TradingEnvironment(max_date=max_date)

        self.assertLessEqual(env.last_trading_day, max_date)
        self.assertLessEqual(env.treasury_curves.index[-1],
                             max_date)
示例#5
0
def create_test_df_source(sim_params=None, env=None, bars='daily'):
    if bars == 'daily':
        freq = pd.datetools.BDay()
    elif bars == 'minute':
        freq = pd.datetools.Minute()
    else:
        raise ValueError('%s bars not understood.' % bars)

    if sim_params and bars == 'daily':
        index = sim_params.trading_days
    else:
        if env is None:
            env = TradingEnvironment(load=noop_load)

        start = pd.datetime(1990, 1, 3, 0, 0, 0, 0, pytz.utc)
        end = pd.datetime(1990, 1, 8, 0, 0, 0, 0, pytz.utc)

        days = env.days_in_range(start, end)

        if bars == 'daily':
            index = days
        if bars == 'minute':
            index = pd.DatetimeIndex([], freq=freq)

            for day in days:
                day_index = env.market_minutes_for_day(day)
                index = index.append(day_index)

    x = np.arange(1, len(index) + 1)

    df = pd.DataFrame(x, index=index, columns=[0])

    return DataFrameSource(df), df
示例#6
0
def create_test_panel_source(sim_params=None, env=None, source_type=None):
    start = sim_params.first_open \
        if sim_params else pd.datetime(1990, 1, 3, 0, 0, 0, 0, pytz.utc)

    end = sim_params.last_close \
        if sim_params else pd.datetime(1990, 1, 8, 0, 0, 0, 0, pytz.utc)

    if env is None:
        env = TradingEnvironment(load=noop_load)

    index = env.days_in_range(start, end)

    price = np.arange(0, len(index))
    volume = np.ones(len(index)) * 1000

    arbitrary = np.ones(len(index))

    df = pd.DataFrame(
        {
            'price': price,
            'volume': volume,
            'arbitrary': arbitrary
        },
        index=index)
    if source_type:
        df['type'] = source_type

    panel = pd.Panel.from_dict({0: df})

    return DataPanelSource(panel), panel
示例#7
0
    def setUp(self):
        self.constants = {
            # Every day, assume every stock starts at 2, goes down to 1,
            # goes up to 4, and finishes at 3.
            USEquityPricing.low:
            1,
            USEquityPricing.open:
            2,
            USEquityPricing.close:
            3,
            USEquityPricing.high:
            4,
        }
        self.assets = [1, 2, 3]
        self.dates = date_range('2014-01', '2014-03', freq='D', tz='UTC')
        self.loader = ConstantLoader(
            constants=self.constants,
            dates=self.dates,
            assets=self.assets,
        )

        self.asset_info = make_simple_asset_info(
            self.assets,
            start_date=self.dates[0],
            end_date=self.dates[-1],
        )
        environment = TradingEnvironment()
        environment.write_data(equities_df=self.asset_info)
        self.asset_finder = environment.asset_finder
示例#8
0
def create_simulation_parameters(year=2006,
                                 start=None,
                                 end=None,
                                 capital_base=float("1.0e5"),
                                 num_days=None,
                                 load=None,
                                 data_frequency='daily',
                                 emission_rate='daily',
                                 env=None):
    """Construct a complete environment with reasonable defaults"""
    if env is None:
        env = TradingEnvironment(load=load)
    if start is None:
        start = datetime(year, 1, 1, tzinfo=pytz.utc)
    if end is None:
        if num_days:
            start_index = env.trading_days.searchsorted(start)
            end = env.trading_days[start_index + num_days - 1]
        else:
            end = datetime(year, 12, 31, tzinfo=pytz.utc)
    sim_params = SimulationParameters(
        period_start=start,
        period_end=end,
        capital_base=capital_base,
        data_frequency=data_frequency,
        emission_rate=emission_rate,
        env=env,
    )

    return sim_params
示例#9
0
    def setUp(self):
        self.benchmark_returns, self.treasury_curves = \
            factory.load_market_data()

        for n in range(100):

            random_index = random.randint(0, len(self.treasury_curves))

            self.dt = self.treasury_curves.keys()[random_index]
            self.end_dt = self.dt + datetime.timedelta(days=365)

            now = datetime.datetime.utcnow().replace(tzinfo=pytz.utc)

            if self.end_dt <= now:
                break

        assert self.end_dt <= now, """
failed to find a date suitable daterange after 100 attempts. please double
check treasury and benchmark data in findb, and re-run the test."""

        self.trading_environment = TradingEnvironment(self.benchmark_returns,
                                                      self.treasury_curves,
                                                      period_start=self.dt,
                                                      period_end=self.end_dt)

        self.onesec = datetime.timedelta(seconds=1)
        self.oneday = datetime.timedelta(days=1)
        self.tradingday = datetime.timedelta(hours=6, minutes=30)

        self.dt = self.trading_environment.trading_days[random_index]
示例#10
0
    def test_min_date(self):
        min_date = pd.Timestamp('2016-03-04', tz='UTC')
        env = TradingEnvironment(min_date=min_date)

        self.assertGreaterEqual(env.first_trading_day, min_date)
        self.assertGreaterEqual(env.treasury_curves.index[0],
                                min_date)
示例#11
0
 def setUpClass(cls):
     random.seed(0)
     cls.sids = (1, 2, 3)
     minute_sim_ps = factory.create_simulation_parameters(
         num_days=3,
         data_frequency='minute',
         emission_rate='minute',
     )
     daily_sim_ps = factory.create_simulation_parameters(
         num_days=30,
         data_frequency='daily',
         emission_rate='daily',
     )
     cls.env = TradingEnvironment()
     cls.env.write_data(equities_identifiers=[1, 2, 3])
     cls.sim_and_source = {
         'minute': (minute_sim_ps,
                    factory.create_minutely_trade_source(
                        cls.sids,
                        sim_params=minute_sim_ps,
                        env=cls.env,
                    )),
         'daily': (daily_sim_ps,
                   factory.create_trade_source(
                       cls.sids,
                       trade_time_increment=timedelta(days=1),
                       sim_params=daily_sim_ps,
                       env=cls.env,
                   )),
     }
示例#12
0
    def setUpClass(cls):
        metadata = {
            0: {
                'symbol': 'CLG06',
                'root_symbol': 'CL',
                'start_date': pd.Timestamp('2005-12-01', tz='UTC'),
                'notice_date': pd.Timestamp('2005-12-20', tz='UTC'),
                'expiration_date': pd.Timestamp('2006-01-20', tz='UTC')
            },
            1: {
                'root_symbol': 'CL',
                'symbol': 'CLK06',
                'start_date': pd.Timestamp('2005-12-01', tz='UTC'),
                'notice_date': pd.Timestamp('2006-03-20', tz='UTC'),
                'expiration_date': pd.Timestamp('2006-04-20', tz='UTC')
            },
            2: {
                'symbol': 'CLQ06',
                'root_symbol': 'CL',
                'start_date': pd.Timestamp('2005-12-01', tz='UTC'),
                'notice_date': pd.Timestamp('2006-06-20', tz='UTC'),
                'expiration_date': pd.Timestamp('2006-07-20', tz='UTC')
            },
            3: {
                'symbol': 'CLX06',
                'root_symbol': 'CL',
                'start_date': pd.Timestamp('2006-02-01', tz='UTC'),
                'notice_date': pd.Timestamp('2006-09-20', tz='UTC'),
                'expiration_date': pd.Timestamp('2006-10-20', tz='UTC')
            }
        }

        env = TradingEnvironment(load=noop_load)
        env.write_data(futures_data=metadata)
        cls.asset_finder = env.asset_finder
示例#13
0
def create_random_simulation_parameters():
    env = TradingEnvironment()
    treasury_curves = env.treasury_curves

    for n in range(100):

        random_index = random.randint(0, len(treasury_curves) - 1)

        start_dt = treasury_curves.index[random_index]
        end_dt = start_dt + timedelta(days=365)

        now = datetime.utcnow().replace(tzinfo=pytz.utc)

        if end_dt <= now:
            break

    assert end_dt <= now, """
failed to find a suitable daterange after 100 attempts. please double
check treasury and benchmark data in findb, and re-run the test."""

    sim_params = SimulationParameters(
        period_start=start_dt,
        period_end=end_dt,
        env=env,
    )

    return sim_params, start_dt, end_dt
示例#14
0
def create_simulation_parameters(year=2006,
                                 start=None,
                                 end=None,
                                 capital_base=float("1.0e5"),
                                 num_days=None,
                                 data_frequency='daily',
                                 emission_rate='daily',
                                 env=None):
    if env is None:
        # Construct a complete environment with reasonable defaults
        env = TradingEnvironment(load=noop_load)
    if start is None:
        start = pd.Timestamp("{0}-01-01".format(year), tz='UTC')
    if end is None:
        if num_days:
            start_index = env.trading_days.searchsorted(start)
            end = env.trading_days[start_index + num_days - 1]
        else:
            end = pd.Timestamp("{0}-12-31".format(year), tz='UTC')
    sim_params = SimulationParameters(
        period_start=start,
        period_end=end,
        capital_base=capital_base,
        data_frequency=data_frequency,
        emission_rate=emission_rate,
        env=env,
    )

    return sim_params
示例#15
0
    def test_max_date(self):
        max_date = datetime(2008, 8, 1, tzinfo=pytz.utc)
        env = TradingEnvironment(max_date=max_date)

        self.assertLessEqual(env.last_trading_day, max_date)
        self.assertLessEqual(env.treasury_curves.index[-1],
                             max_date)
示例#16
0
 def setUpClass(cls):
     cls.env = TradingEnvironment()
     all_market_opens = cls.env.open_and_closes.market_open
     indexer = all_market_opens.index.slice_indexer(
         start=TEST_CALENDAR_START, end=TEST_CALENDAR_STOP)
     cls.market_opens = all_market_opens[indexer]
     cls.test_calendar_start = cls.market_opens.index[0]
     cls.test_calendar_stop = cls.market_opens.index[-1]
示例#17
0
    def __init__(self, env=None,  trading_schedule=default_nyse_schedule,
                 first_trading_day=None):
        if env is None:
            env = TradingEnvironment()

        super(FakeDataPortal, self).__init__(env.asset_finder,
                                             trading_schedule,
                                             first_trading_day)
    def test_tse_calendar_vs_environment(self):
        env = TradingEnvironment(bm_symbol='^GSPTSE', exchange_tz='US/Eastern')

        env_start_index = \
            env.trading_days.searchsorted(tradingcalendar_tse.start)
        env_days = env.trading_days[env_start_index:]
        cal_days = tradingcalendar_tse.trading_days
        self.check_days(env_days, cal_days)
示例#19
0
    def test_compute_lifetimes(self):
        num_assets = 4
        env = TradingEnvironment()
        trading_day = env.trading_day
        first_start = pd.Timestamp('2015-04-01', tz='UTC')

        frame = make_rotating_asset_info(num_assets=num_assets,
                                         first_start=first_start,
                                         frequency=env.trading_day,
                                         periods_between_starts=3,
                                         asset_lifetime=5)

        env.write_data(equities_df=frame)
        finder = env.asset_finder

        all_dates = pd.date_range(
            start=first_start,
            end=frame.end_date.max(),
            freq=trading_day,
        )

        for dates in all_subindices(all_dates):
            expected_with_start_raw = full(
                shape=(len(dates), num_assets),
                fill_value=False,
                dtype=bool,
            )
            expected_no_start_raw = full(
                shape=(len(dates), num_assets),
                fill_value=False,
                dtype=bool,
            )

            for i, date in enumerate(dates):
                it = frame[['start_date', 'end_date']].itertuples()
                for j, start, end in it:
                    # This way of doing the checks is redundant, but very
                    # clear.
                    if start <= date <= end:
                        expected_with_start_raw[i, j] = True
                        if start < date:
                            expected_no_start_raw[i, j] = True

            expected_with_start = pd.DataFrame(
                data=expected_with_start_raw,
                index=dates,
                columns=frame.index.values,
            )
            result = finder.lifetimes(dates, include_start_date=True)
            assert_frame_equal(result, expected_with_start)

            expected_no_start = pd.DataFrame(
                data=expected_no_start_raw,
                index=dates,
                columns=frame.index.values,
            )
            result = finder.lifetimes(dates, include_start_date=False)
            assert_frame_equal(result, expected_no_start)
示例#20
0
 def test_sids(self):
     # Ensure that the sids property of the AssetFinder is functioning
     env = TradingEnvironment()
     env.write_data(equities_identifiers=[1, 2, 3])
     sids = env.asset_finder.sids
     self.assertEqual(3, len(sids))
     self.assertTrue(1 in sids)
     self.assertTrue(2 in sids)
     self.assertTrue(3 in sids)
    def test_lse_calendar_vs_environment(self):
        env = TradingEnvironment(bm_symbol='^FTSE',
                                 exchange_tz='Europe/London')

        env_start_index = \
            env.trading_days.searchsorted(tradingcalendar_lse.start)
        env_days = env.trading_days[env_start_index:]
        cal_days = tradingcalendar_lse.trading_days
        self.check_days(env_days, cal_days)
示例#22
0
    def test_bmf_calendar_vs_environment(self):
        env = TradingEnvironment(bm_symbol='^BVSP',
                                 exchange_tz='America/Sao_Paulo')

        env_start_index = \
            env.trading_days.searchsorted(tradingcalendar_bmf.start)
        env_days = env.trading_days[env_start_index:]
        cal_days = tradingcalendar_bmf.trading_days
        self.check_days(env_days, cal_days)
    def setUp(self):
        self.sids = range(90)
        self.env = TradingEnvironment()
        self.env.write_data(equities_identifiers=self.sids)

        self.sim_params = factory.create_simulation_parameters(
            start=datetime(1990, 1, 1, tzinfo=pytz.utc),
            end=datetime(1990, 1, 8, tzinfo=pytz.utc),
            env=self.env,
        )
示例#24
0
 def setUp(self):
     self.days = TradingEnvironment().trading_days
     self.index = [self.days[0], self.days[1], self.days[2]]
     self.panel = pd.Panel({1: pd.DataFrame({
         'price': [1, 2, 4], 'volume': [1e9, 0, 0],
         'type': [DATASOURCE_TYPE.TRADE,
                  DATASOURCE_TYPE.TRADE,
                  DATASOURCE_TYPE.CLOSE_POSITION]},
         index=self.index)
     })
示例#25
0
    def setUpClass(cls):
        cls.tempdir = TempDirectory()
        cls.env = TradingEnvironment()

        cls.sim_params = SimulationParameters(
            period_start=pd.Timestamp("2006-01-05 14:31", tz="utc"),
            period_end=pd.Timestamp("2006-01-05 14:36", tz="utc"),
            capital_base=1.0e5,
            data_frequency="minute",
            emission_rate='daily',
            env=cls.env
        )

        cls.sids = [133]

        cls.minutes = pd.DatetimeIndex(
            start=pd.Timestamp("2006-01-05 14:31", tz="utc"),
            end=pd.Timestamp("2006-01-05 14:35", tz="utc"),
            freq="1min"
        )

        assets = {
            133: pd.DataFrame({
                "open": np.array([3.0, 3.0, 3.5, 4.0, 3.5]),
                "high": np.array([3.15, 3.15, 3.15, 3.15, 3.15]),
                "low": np.array([2.85, 2.85, 2.85, 2.85, 2.85]),
                "close": np.array([3.0, 3.5, 4.0, 3.5, 3.0]),
                "volume": [2000, 2000, 2000, 2000, 2000],
                "dt": cls.minutes
            }).set_index("dt")
        }

        write_bcolz_minute_data(
            cls.env,
            pd.date_range(
                start=normalize_date(cls.minutes[0]),
                end=normalize_date(cls.minutes[-1])
            ),
            cls.tempdir.path,
            assets
        )

        cls.env.write_data(equities_data={
            133: {
                "start_date": pd.Timestamp("2006-01-05", tz='utc'),
                "end_date": pd.Timestamp("2006-01-07", tz='utc')
            }
        })

        cls.ASSET133 = cls.env.asset_finder.retrieve_asset(133)

        cls.data_portal = DataPortal(
            cls.env,
            equity_minute_reader=BcolzMinuteBarReader(cls.tempdir.path),
        )
示例#26
0
文件: core.py 项目: yuerthe9/zipline
    def __init__(self, env=None, trading_calendar=None,
                 first_trading_day=None):
        if env is None:
            env = TradingEnvironment()

        if trading_calendar is None:
            trading_calendar = get_calendar("NYSE")

        super(FakeDataPortal, self).__init__(env.asset_finder,
                                             trading_calendar,
                                             first_trading_day)
示例#27
0
    def setUp(self):
        self.assets = [1, 2, 3]
        self.dates = date_range('2014-01', '2014-03', freq='D', tz='UTC')

        asset_info = make_simple_asset_info(
            self.assets,
            start_date=self.dates[0],
            end_date=self.dates[-1],
        )
        env = TradingEnvironment()
        env.write_data(equities_df=asset_info)
        self.asset_finder = env.asset_finder
示例#28
0
 def setUpClass(cls):
     cls.env = TradingEnvironment()
     # On the AfterOpen and BeforeClose tests, we want ensure that the
     # functions are pure, and that running them with the same input will
     # provide the same output, regardless of whether the function is run 1
     # or N times. (For performance reasons, we cache some internal state
     # in AfterOpen and BeforeClose, but we don't want it to affect
     # purity). Hence, we use the same before_close and after_open across
     # subtests.
     cls.before_close = BeforeClose(hours=1, minutes=5)
     cls.after_open = AfterOpen(hours=1, minutes=5)
     cls.class_ = None  # Mark that this is the base class.
示例#29
0
    def configure_environment(self, last_trade, benchmark, timezone):
        ''' Prepare benchmark loader and trading context '''

        if last_trade.tzinfo is None:
            last_trade = pytz.utc.localize(last_trade)

        # Setup the trading calendar from market informations
        self.benchmark = benchmark
        self.context = TradingEnvironment(
            bm_symbol=benchmark,
            exchange_tz=timezone,
            load=self._get_benchmark_handler(last_trade))
示例#30
0
    def setUp(self):
        self.__calendar = date_range('2014', '2015', freq=trading_day)
        self.__assets = assets = Int64Index(arange(1, 20))

        # Set up env for test
        env = TradingEnvironment()
        env.write_data(equities_df=make_simple_asset_info(
            assets,
            self.__calendar[0],
            self.__calendar[-1],
        ))
        self.__finder = env.asset_finder
        self.__mask = self.__finder.lifetimes(self.__calendar[-10:])