Exemple #1
0
def iterate_timestamps(security_type,
                       exchange,
                       start_timestamp: pd.Timestamp,
                       end_timestamp: pd.Timestamp,
                       level=TradingLevel.LEVEL_1DAY,
                       contain_all_timestamp=True,
                       kdata_use_begin_time=False) -> pd.Timestamp:
    """

    :param security_type:
    :type security_type: Union[str, zvt.domain.common.SecurityType]
    :param exchange:
    :type exchange: str
    :param start_timestamp:
    :type start_timestamp: Union[str, pd.Timestamp]
    :param end_timestamp:
    :type end_timestamp: Union[str, pd.Timestamp]
    :param level:
    :type level: zvt.domain.common.TradingLevel
    :param contain_all_timestamp: always contain begin and end timestamp
    :type contain_all_timestamp: bool
    :param kdata_use_begin_time: true means the interval [timestamp,timestamp+level),false means [timestamp-level,timestamp)
    :type kdata_use_begin_time: bool
    :return:
    :rtype: List[pandas._libs.tslibs.timestamps.Timestamp]
    """
    date_range = pd.date_range(start=start_timestamp,
                               end=end_timestamp,
                               freq='1D').tolist()

    if level == TradingLevel.LEVEL_1DAY:
        return date_range

    if level < TradingLevel.LEVEL_1DAY:
        start_end_list = get_trading_intervals(security_type=security_type,
                                               exchange=exchange)

        time_ranges = []

        for date in date_range:
            for start_end in start_end_list:
                start = start_end[0]
                end = start_end[1]

                start_date = date_and_time(the_date=date, the_time=start)
                end_date = date_and_time(the_date=date, the_time=end)

                if end == '00:00':
                    end_date = end_date + pd.Timedelta(days=1)

                time_range = pd.date_range(start=start_date,
                                           end=end_date,
                                           freq=level.to_pd_freq()).tolist()
                if contain_all_timestamp:
                    time_ranges += time_range
                else:
                    if kdata_use_begin_time:
                        time_ranges += time_range[:-1]
                    else:
                        time_ranges += time_range[1:]
        time_ranges = list(set(time_ranges))
        time_ranges.sort()
        return time_ranges

    return date_range
Exemple #2
0
 def is_open_timestamp(cls, timestamp):
     timestamp = pd.Timestamp(timestamp)
     return is_same_time(
         timestamp,
         date_and_time(the_date=timestamp.date(),
                       the_time=cls.get_trading_intervals()[0][0]))
Exemple #3
0
def is_close_time(entity_type, exchange, timestamp):
    return is_same_time(
        timestamp,
        date_and_time(the_date=timestamp,
                      the_time=get_trading_intervals(
                          entity_type=entity_type, exchange=exchange)[-1][-1]))