| | |
| | | def get_big_sell_orders(self): |
| | | return self.__big_sell_orders |
| | | |
| | | def add_transaction_data_for_accurate(self, item): |
| | | def add_transaction_data_for_accurate(self, item, big_order_money_threshold=299e4): |
| | | """ |
| | | 获取精确的买单信息 |
| | | @param big_order_money_threshold: 大单阈值 |
| | | @param data: |
| | | @return: |
| | | """ |
| | |
| | | def format_timestamp(timestamp): |
| | | time_str = str(timestamp) |
| | | return int(time_str[:5] if time_str[0] == '9' else time_str[:6]) |
| | | |
| | | money = round(item[2] * item[3]) |
| | | volume = item[3] |
| | | price = item[2] |
| | | order_time = item[4] |
| | | if item[0] not in self.__big_accurate_buy_order_dict: |
| | | # (买单号, 量, 金额, 时间, 最新成交价格) |
| | | self.__big_accurate_buy_order_dict[item[0]] = [item[0], 0, 0, order_time, price] |
| | | # (买单号, 量, 金额, 时间, 最新成交价格, 开始成交时间, 开始成交价格) |
| | | self.__big_accurate_buy_order_dict[item[0]] = [item[0], 0, 0, order_time, price, order_time, price] |
| | | buy_order_info = self.__big_accurate_buy_order_dict[item[0]] |
| | | buy_order_info[1] += volume |
| | | buy_order_info[2] += money |
| | |
| | | # 有可能是大单成交完成, 判断上个订单是否是大单 |
| | | last_buy_order = self.__big_accurate_buy_order_dict.get(self.__latest_buy_order[0]) |
| | | |
| | | if last_buy_order[2] > 299e4: |
| | | if last_buy_order[2] > big_order_money_threshold: |
| | | self.big_accurate_buy_order_queue.put_nowait(last_buy_order) |
| | | |
| | | # 如果数据过多需要移除过长时间的小金额数据 |
| | |
| | | |
| | | # 统计卖单 |
| | | if item[1] not in self.__big_accurate_sell_order_dict: |
| | | # (卖单号, 量, 金额, 时间, 最新成交价格) |
| | | self.__big_accurate_sell_order_dict[item[1]] = [item[1], 0, 0, order_time, price] |
| | | # (卖单号, 量, 金额, 时间, 最新成交价格, 开始成交时间, 开始成交价格) |
| | | self.__big_accurate_sell_order_dict[item[1]] = [item[1], 0, 0, order_time, price, order_time, price] |
| | | sell_order_info = self.__big_accurate_sell_order_dict[item[1]] |
| | | sell_order_info[1] += volume |
| | | sell_order_info[2] += money |
| | |
| | | if self.__latest_sell_order and self.__latest_sell_order[0] != item[1]: |
| | | # 有可能是大单成交完成, 判断上个订单是否是大单 |
| | | last_sell_order = self.__big_accurate_sell_order_dict.get(self.__latest_sell_order[0]) |
| | | if last_sell_order[2] > 299e4: |
| | | if last_sell_order[2] > big_order_money_threshold: |
| | | self.big_accurate_sell_order_queue.put_nowait(last_sell_order) |
| | | # 如果数据过多需要移除过长时间的小金额数据 |
| | | accurate_sell_count = len(self.__big_accurate_sell_order_dict.keys()) |
| | | if accurate_sell_count > 10000 and accurate_sell_count - self.__last_accurate_sell_count > 2000: |
| | | # 超过1w条数据且新增2000条数据 |
| | | # 超过1w条数据就要移除30分钟之前的数据 |
| | | now_time_int = int(tool.trade_time_add_second(l2_huaxin_util.convert_time(order_time), -3600).replace(":", "")) |
| | | now_time_int = int( |
| | | tool.trade_time_add_second(l2_huaxin_util.convert_time(order_time), -3600).replace(":", "")) |
| | | try: |
| | | remove_order_nos = [x for x in self.__big_accurate_sell_order_dict if |
| | | now_time_int > format_timestamp( |
| | |
| | | finally: |
| | | self.__last_accurate_sell_count = len(self.__big_accurate_sell_order_dict.keys()) |
| | | |
| | | def add_transaction_data(self, data): |
| | | def add_transaction_data(self, data, big_order_money_threshold=299e4): |
| | | item = (data["BuyNo"], data["SellNo"], data["TradePrice"], data["TradeVolume"], data["OrderTime"]) |
| | | # item = {"SecurityID": pTransaction['SecurityID'], "TradePrice": pTransaction['TradePrice'], |
| | | # "TradeVolume": pTransaction['TradeVolume'], |
| | |
| | | order_time = item[4] |
| | | |
| | | if self.accurate_buy: |
| | | self.add_transaction_data_for_accurate(item) |
| | | self.add_transaction_data_for_accurate(item, big_order_money_threshold=big_order_money_threshold) |
| | | |
| | | if not self.__latest_buy_order: |
| | | # (买单号, 量, 金额, 时间, 最新成交价格) |