Ejemplo n.º 1
0
def iterate_timestamps(entity_type, exchange, start_timestamp: pd.Timestamp, end_timestamp: pd.Timestamp,
                       level=IntervalLevel.LEVEL_1DAY, contain_all_timestamp=True,
                       kdata_use_begin_time=False) -> pd.Timestamp:
    """

    :param entity_type:
    :type entity_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.IntervalLevel
    :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 == IntervalLevel.LEVEL_1DAY:
        return date_range

    if level < IntervalLevel.LEVEL_1DAY:
        start_end_list = get_trading_intervals(entity_type=entity_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
Ejemplo n.º 2
0
def is_in_trading(entity_type, exchange, timestamp):
    current = now_pd_timestamp()
    timestamp = to_pd_timestamp(timestamp)
    if is_same_date(current, timestamp):
        for start, end in get_trading_intervals(entity_type=entity_type, exchange=exchange):
            if current > date_and_time(current, start) and current < date_and_time(current, end):
                return True
    return False
Ejemplo n.º 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]))