| | |
| | | # 扫入加红 |
| | | return constant.L_CANCEL_RATE_WITH_MUST_BUY_FOR_REDICAL_BUY, True |
| | | else: |
| | | deal_big_order_info = radical_buy_data_manager.get_total_deal_big_order_info(code, |
| | | gpcode_manager.get_limit_up_price_as_num( |
| | | code)) |
| | | deal_rate = round(deal_big_order_info[1] / deal_big_order_info[2], 2) |
| | | threshold_rate = 0.5 * deal_rate + 0.35 |
| | | threshold_rate = max(threshold_rate, 0.375) |
| | | threshold_rate = min(threshold_rate, 0.95) |
| | | return threshold_rate, False |
| | | # 根据成交额的大单成交占比来计算撤单比例 |
| | | big_money_rate = radical_buy_data_manager.TotalDealBigOrderInfoManager.get_big_order_rate(code) |
| | | if big_money_rate is not None: |
| | | threshold_rate = min(big_money_rate*3, 0.95) |
| | | return threshold_rate, False |
| | | else: |
| | | deal_big_order_info = radical_buy_data_manager.get_total_deal_big_order_info(code, |
| | | gpcode_manager.get_limit_up_price_as_num( |
| | | code)) |
| | | deal_rate = round(deal_big_order_info[1] / deal_big_order_info[2], 2) |
| | | threshold_rate = 0.5 * deal_rate + 0.35 |
| | | threshold_rate = max(threshold_rate, 0.375) |
| | | threshold_rate = min(threshold_rate, 0.95) |
| | | return threshold_rate, False |
| | | if must_buy: |
| | | if is_up: |
| | | return constant.L_CANCEL_RATE_UP_WITH_MUST_BUY, True |
| | |
| | | limit_up_price, |
| | | sell_1_price, sell_1_volume // 100, average_rate) |
| | | latest_3m_buy1_money_list = code_price_manager.Buy1PriceManager().get_latest_3m_buy1_money_list(code) |
| | | # -----------------------------重新计算L撤后--------------------------- |
| | | # 暂时不更新,无意义 |
| | | # 如果时涨停状态 |
| | | # if abs(float(limit_up_price) - float(buy_1_price)) < 0.001: |
| | | # # 是否处于下单状态 |
| | | # state = trade_manager.CodesTradeStateManager().get_trade_state_cache(code) |
| | | # if state == trade_manager.TRADE_STATE_BUY_DELEGATED or state == trade_manager.TRADE_STATE_BUY_PLACE_ORDER or constant.TEST: |
| | | # if latest_3m_buy1_money_list and tool.trade_time_sub(latest_3m_buy1_money_list[-1][0], |
| | | # latest_3m_buy1_money_list[0][0]) >= 2 * 60: |
| | | # # 2分钟以内,标准差在10%以内 |
| | | # c_start_index = None |
| | | # for i in range(len(latest_3m_buy1_money_list) - 1, -1, -1): |
| | | # if tool.trade_time_sub(latest_3m_buy1_money_list[-1][0], |
| | | # latest_3m_buy1_money_list[i][0]) >= 2 * 60: |
| | | # c_start_index = i |
| | | # break |
| | | # if c_start_index is not None: |
| | | # latest_3m_buy1_money_list = copy.deepcopy(latest_3m_buy1_money_list[c_start_index:]) |
| | | # latest_3m_buy1_money_list = [x[1] for x in latest_3m_buy1_money_list] |
| | | # avg_val = numpy.mean(numpy.array(latest_3m_buy1_money_list)) |
| | | # max_val = max(latest_3m_buy1_money_list) |
| | | # min_val = min(latest_3m_buy1_money_list) |
| | | # if abs(max_val - avg_val) / avg_val < 0.1 and abs(min_val - avg_val) / avg_val < 0.1: |
| | | # # 买1封单额平稳 |
| | | # LCancelBigNumComputer().re_compute_l_down_watch_indexes(code) |
| | | |
| | | threading.Thread(target=lambda: update_kpl_jx_block(code, buy_1_price, limit_up_price), daemon=True).start() |
| | | # 拉取总大单成交 |
| | | threading.Thread(target=lambda: radical_buy_data_manager.TotalDealBigOrderInfoManager.update_big_order_info(code, data["totalValueTrade"]), daemon=True).start() |
| | | |
| | | async_log_util.info(hx_logger_l2_market_data, f"{code}#{data}") |
| | | |
| | |
| | | # 小于3块/大于50块 |
| | | continue |
| | | |
| | | index += 1 |
| | | if int(float(limit_up_info_map[code][2])) < 50: |
| | | continue |
| | | |
| | | index += 1 |
| | | # [(板块, 代码名称, 代码, 涨停次数, 自由市值)] |
| | | fdatas.append( |
| | | (b, limit_up_info_map[code][1], code, code_block_dict[code][b], |
| | |
| | | return self.__codes |
| | | |
| | | |
| | | class TotalDealBigOrderInfoManager: |
| | | """ |
| | | 总成交大单信息管理 |
| | | """ |
| | | # {代码:(数据,更新时间)} |
| | | __l2_big_order_deal_info_dict = {} |
| | | # 大单成交比例 |
| | | __l2_big_order_deal_rate_dict = {} |
| | | |
| | | @classmethod |
| | | def update_big_order_info(cls, code, total_trade_value): |
| | | """ |
| | | 更新大单信息 |
| | | @param code: 代码 |
| | | @param total_trade_value: 总成交额 |
| | | @return: |
| | | """ |
| | | # (净流入金额, (大单买金额, 大单买数量), (大单卖金额, 大单卖数量)) |
| | | deal_big_order_detail_info = get_l2_big_order_deal_info(code) |
| | | if deal_big_order_detail_info: |
| | | cls.__l2_big_order_deal_info_dict[code] = (deal_big_order_detail_info, tool.get_now_time_str()) |
| | | if total_trade_value == 0: |
| | | total_trade_value = 1 |
| | | cls.__l2_big_order_deal_rate_dict[code] = round(deal_big_order_detail_info[1][0]/total_trade_value, 2) |
| | | |
| | | @classmethod |
| | | def get_big_order_info(cls, code): |
| | | """ |
| | | @param code: |
| | | @return:((净流入金额, (大单买金额, 大单买数量), (大单卖金额, 大单卖数量)), 更新时间) |
| | | """ |
| | | return cls.__l2_big_order_deal_info_dict.get(code) |
| | | |
| | | |
| | | @classmethod |
| | | def get_big_order_rate(cls, code): |
| | | """ |
| | | 获取大单占整个成交额的比例 |
| | | @param code: |
| | | @return: |
| | | """ |
| | | return cls.__l2_big_order_deal_rate_dict.get(code) |
| | | |
| | | |
| | | |
| | | |
| | | def get_total_detal_big_order_details(code): |
| | | """ |
| | | 获取成交大单详情 |
| | |
| | | """ |
| | | 获取成交大单信息 |
| | | @param code_: |
| | | @return:(净流入金额, (大单买金额, 大单买数量), (大单卖金额, 大单卖数量)) |
| | | @return:{"code": (净流入金额, (大单买金额, 大单买数量), (大单卖金额, 大单卖数量))} |
| | | """ |
| | | response_data = requests.get( |
| | | "http://127.0.0.1:9005/get_codes_money_info?codes=" + urllib.parse.quote(json.dumps(list(codes)))) |