from l2 import l2_data_source_util from l2.l2_data_util import local_today_datas, local_today_canceled_buyno_map, L2DataUtil class L2DataComputeUtil: """ L2数据计算帮助类 """ @classmethod def compute_left_buy_order(cls, code, start_index, end_index, limit_up_price, min_money=500000): """ 计算剩下的委托买单 @param code: 代码 @param start_index:起始索引(包含) @param end_index: 结束索引(包含) @param limit_up_price: 涨停价 @param min_money: 最小的资金 @return:笔数,手数 """ min_volume = min_money // int(limit_up_price * 100) total_datas = local_today_datas.get(code) canceled_buyno_map = local_today_canceled_buyno_map.get(code) total_count = 0 total_num = 0 for i in range(start_index, end_index + 1): data = total_datas[i] val = data['val'] if not L2DataUtil.is_limit_up_price_buy(val): continue if val['num'] < min_volume: continue left_count = l2_data_source_util.L2DataSourceUtils.get_limit_up_buy_no_canceled_count_v2(code, i, total_datas, canceled_buyno_map) if left_count > 0: total_count += 1 total_num += val["num"] return total_count, total_num @classmethod def compute_end_index(cls, code, start_index, end_index, limit_up_price, max_count, min_money=500000): """ 计算结束索引 @param code: 代码 @param start_index:起始索引(包含) @param end_index: 结束索引(包含) @param limit_up_price: 涨停价 @param max_count: 最大数量 @param min_money: 最小的资金 @return:结束索引 """ min_volume = min_money // int(limit_up_price * 100) total_datas = local_today_datas.get(code) canceled_buyno_map = local_today_canceled_buyno_map.get(code) total_count = 0 for i in range(start_index, end_index + 1): data = total_datas[i] val = data['val'] if not L2DataUtil.is_limit_up_price_buy(val): continue if val['num'] < min_volume: continue left_count = l2_data_source_util.L2DataSourceUtils.get_limit_up_buy_no_canceled_count_v2(code, i, total_datas, canceled_buyno_map) if left_count > 0: total_count += 1 if total_count >= max_count: return i return end_index @classmethod def is_canceled(cls, code, index, total_datas, canceled_buyno_map, trade_index, deal_order_nos): """ 是否已经撤单 @param deal_order_nos: 成交大单集合 @param trade_index: 成交进度位 @param index: 索引 @param code: 代码 @param total_datas: @param canceled_buyno_map:撤单的订单号 @return: """ cancel_data = l2_data_source_util.L2DataSourceUtils.get_limit_up_buy_canceled_data_v2(code, index, total_datas, canceled_buyno_map) if cancel_data: # 已经撤单 return cancel_data else: if trade_index and trade_index > index: # 成交进度大于索引位置,且还没成交 if total_datas[index]["val"]["orderNo"] not in deal_order_nos: return total_datas[index] return None