美文网首页
14.3 Trading Calendar

14.3 Trading Calendar

作者: wanggs66 | 来源:发表于2020-05-02 16:01 被阅读0次

    Trading Calendar 可以用于一下几个场景:

    • Resample 将日频数据转化为周频数据,并且用每周的最后一个交易日数据作为这周的数据值

    • 日内及日频数据重采样的时候,涉及非常规开市、收市的情况,可通过Trading Calendar 进行特殊情况的设定

    • 时区对齐

    Trading Calendar Interface

    class TradingCalendarBase(with_metaclass(MetaParams, object)):
        def _nextday(self, day):
            '''
            Returns the next trading day (datetime/date instance) after ``day``
            (datetime/date instance) and the isocalendar components
    
            The return value is a tuple with 2 components: (nextday, (y, w, d))
            where (y, w, d)
            '''
            raise NotImplementedError
    
        def schedule(self, day):
            '''
            Returns a tuple with the opening and closing times (``datetime.time``)
            for the given ``date`` (``datetime/date`` instance)
            '''
            raise NotImplementedError
    

    Implementations

    PandasMarketCalendar
    class PandasMarketCalendar(TradingCalendarBase):
        '''
        Wrapper of ``pandas_market_calendars`` for a trading calendar. The package
        ``pandas_market_calendar`` must be installed
    
        Params:
    
          - ``calendar`` (default ``None``)
    
            The param ``calendar`` accepts the following:
    
            - string: the name of one of the calendars supported, for example
              `NYSE`. The wrapper will attempt to get a calendar instance
    
            - calendar instance: as returned by ``get_calendar('NYSE')``
    
          - ``cachesize`` (default ``365``)
    
            Number of days to cache in advance for lookup
    
        See also:
    
          -   https://github.com/rsheftel/pandas_market_calendars
    
          - http://pandas-market-calendars.readthedocs.io/
    
        '''
        params = (
            ('calendar', None),  # A pandas_market_calendars instance or exch name
            ('cachesize', 365),  # Number of days to cache in advance
        )
    
    TradingCalendar

    This implementation allows to construct a calendar using self-gathered information by specifying the holidays, early days, non-trading weekdays and the opening and closing session times:

    class TradingCalendar(TradingCalendarBase):
        '''
        Wrapper of   ``pandas_market_calendars`` for a trading calendar. The package
        ``pandas_market_calendar`` must be installed
    
        Params:
    
          - ``open`` (default ``time.min``)
    
            Regular start of the session
    
          - ``close`` (default ``time.max``)
    
            Regular end of the session
    
          - ``holidays`` (default ``[]``)
    
            List of non-trading days (``datetime.datetime`` instances)
    
          - ``earlydays`` (default ``[]``)
    
            List of tuples determining the date and opening/closing times of days
            which do not conform to the regular trading hours where each tuple has
            (``datetime.datetime``, ``datetime.time``, ``datetime.time`` )
    
          - ``offdays`` (default ``ISOWEEKEND``)
    
            A list of weekdays in ISO format (Monday: 1 -> Sunday: 7) in which the
            market doesn't trade. This is usually Saturday and Sunday and hence the
            default
    
        '''
        params = (
            ('open', time.min),
            ('close', _time_max),
            ('holidays', []),  # list of non trading days (date)
            ('earlydays', []),  # list of tuples (date, opentime, closetime)
            ('offdays', ISOWEEKEND),  # list of non trading (isoweekdays)
        )
    

    Usage pattern

    Global Trading Calendar

    Via Cerebro one can add a global calendar which is the default for all data feeds, unless one is specified for the data feed:

    def addcalendar(self, cal):
        '''Adds a global trading calendar to the system. Individual data feeds
        may have separate calendars which override the global one
    
        ``cal`` can be an instance of ``TradingCalendar`` a string or an
        instance of ``pandas_market_calendars``. A string will be will be
        instantiated as a ``PandasMarketCalendar`` (which needs the module
        ``pandas_market_calendar`` installed in the system.
    
        If a subclass of `TradingCalendarBase` is passed (not an instance) it
        will be instantiated
        '''
    
    Per data-feed
    ...
    data = bt.feeds.YahooFinanceData(dataname='YHOO', calendar='NYSE', ...)
    cerebro.adddata(data)
    ...
    

    The first datetime, the one belonging to the strategy, is always in a different timezone which is actually UTC. Also with this release 1.9.42.116 this can be synchronized. The following parameter has been added to Cerebro (use either during instantiation or with cerebro.run

    • tz (default: None)

      Adds a global timezone for strategies. The argument tz can be

      • None: in this case the datetime displayed by strategies will be
        in UTC, which has been always the standard behavior

      • pytz instance. It will be used as such to convert UTC times to
        the chosen timezone

      • string. Instantiating a pytz instance will be attempted.

      • integer. Use, for the strategy, the same timezone as the
        corresponding data in the self.datas iterable (0 would
        use the timezone from data0)

    It is also supported with the cerebro.addtz method:

    def addtz(self, tz):
        '''
        This can also be done with the parameter ``tz``
    
        Adds a global timezone for strategies. The argument ``tz`` can be
    
          - ``None``: in this case the datetime displayed by strategies will be
            in UTC, which has been always the standard behavior
    
          - ``pytz`` instance. It will be used as such to convert UTC times to
            the chosen timezone
    
          - ``string``. Instantiating a ``pytz`` instance will be attempted.
    
          - ``integer``. Use, for the strategy, the same timezone as the
            corresponding ``data`` in the ``self.datas`` iterable (``0`` would
            use the timezone from ``data0``)
    
        '''
    

    相关文章

      网友评论

          本文标题:14.3 Trading Calendar

          本文链接:https://www.haomeiwen.com/subject/ujukghtx.html