Source code for koapy.backtrader.KrxTradingCalendar

import datetime

import pytz

from backtrader.tradingcal import TradingCalendarBase
from backtrader.utils.py3 import string_types
from pandas import DataFrame, DatetimeIndex, Timestamp


[docs]class ExchangeCalendarsTradingCalendar(TradingCalendarBase): # pylint: disable=no-member
[docs] params = ( ("calendar", None), ("cachesize", 365), )
def __init__(self): super().__init__() self._calendar = self.p.calendar if isinstance(self._calendar, string_types): from exchange_calendars import get_calendar self._calendar = get_calendar(self._calendar) self.dcache = DatetimeIndex([0.0]) self.idcache = DataFrame(index=DatetimeIndex([0.0])) self.csize = datetime.timedelta(days=self.p.cachesize) def _nextday(self, day): d = day + self._calendar.day return d, d.isocalendar()
[docs] def schedule( self, day, tz=None ): # pylint: disable=arguments-differ,unused-argument """ day: expecting naive datetime.datetime day in utc timezone tz: treat/localize internal naive datetimes to this timezone returns: (opening, closing) naive datetime.datetime pair in utc timezone """ session = Timestamp(day, tz=pytz.UTC).normalize() opening, closing = self._calendar.open_and_close_for_session(session) opening = opening.tz.localize(None).to_pydatetime() closing = closing.tz.localize(None).to_pydatetime() return opening, closing
[docs]class KrxTradingCalendar(ExchangeCalendarsTradingCalendar):
[docs] params = ( ("calendar", "XKRX"), ("cachesize", 365), )