def get_can_open_time(self, cfg): next_open_time_cfg_name = "n_o_t" delay_timedelta_cfg_name = "d_td" if next_open_time_cfg_name in cfg: _t1 = xq.get_next_open_time(cfg[next_open_time_cfg_name], self.now()) else: _t1 = None if delay_timedelta_cfg_name in cfg: _t2 = self.now() + xq.get_interval_timedelta( cfg[delay_timedelta_cfg_name]) else: _t2 = None if _t1 and _t2: return max(_t1, _t2) if _t1: return _t1 elif _t2: return _t2 else: return None
def __get_klines_1min_cache1(self, symbol, interval, s_time, e_time): """ 获取分钟k线 """ if interval not in self.k1ms_cache or ( interval in self.k1ms_cache and self.k1ms_cache_s_time[interval] != s_time): # 把整个间隔的分钟k线都取下来 next_interval_time = s_time + xq.get_interval_timedelta(interval) self.k1ms_cache[interval] = self.__get_klines_1min( symbol, s_time, next_interval_time) self.k1ms_cache_s_time[interval] = s_time tmp_len = int((e_time - s_time).total_seconds() / 60) if tmp_len >= len(self.k1ms_cache[interval]): return self.k1ms_cache[interval] e_timestamp = e_time.timestamp() * 1000 while tmp_len > 0: if self.k1ms_cache[interval][tmp_len]["open_time"] <= e_timestamp: break tmp_len -= 1 return self.k1ms_cache[interval][:tmp_len]
'--display', action='store_true', help='display info') args = parser.parse_args() # print(args) if not (args.s and args.r and args.k and args.m): parser.print_help() exit(1) start_time, end_time = split_time_range(args.r) print("range: [%s, %s)" % (start_time, end_time)) interval = args.k collection = xq.get_kline_collection(args.s, interval) td = xq.get_interval_timedelta(interval) period = xq.get_interval_seconds(interval) tick_time = xq.get_open_time(interval, start_time) if tick_time < start_time: tick_time = xq.get_open_time(interval, start_time + td) db = md.MongoDB(mongo_user, mongo_pwd, args.m, db_url) target_len = int( (int(end_time.timestamp()) - int(start_time.timestamp())) / period) print("Target length:", target_len) klines = db.find_sort( collection, { "open_time": { "$gte": int(start_time.timestamp()) * 1000, "$lt": int(end_time.timestamp()) * 1000