| | |
| | | 激进买数据管理 |
| | | """ |
| | | import constant |
| | | import l2_data_util |
| | | from code_attribute import code_nature_analyse, code_volumn_manager, gpcode_manager |
| | | from code_attribute.code_l1_data_manager import L1DataManager |
| | | from l2.l2_sell_manager import L2MarketSellManager |
| | | from l2.l2_transaction_data_manager import BigOrderDealManager |
| | | from l2.l2_transaction_data_manager import BigOrderDealManager, HuaXinBuyOrderManager |
| | | from log_module import async_log_util |
| | | from log_module.log import logger_l2_radical_buy |
| | | from third_data import kpl_data_manager |
| | |
| | | from utils import tool, global_util |
| | | |
| | | |
| | | class RadicalBuyDataManager(): |
| | | class RadicalBuyDataManager: |
| | | @classmethod |
| | | def is_code_can_buy(cls, code, deal_codes=None): |
| | | def is_code_can_buy(cls, code, deal_codes=None, is_refered=False): |
| | | """ |
| | | 代码是否可以买(根据代码本身属性) |
| | | @param deal_codes: 已经成交的代码 |
| | | @param is_refered: 是否是参考票 |
| | | @param code: 代码 |
| | | @param total_sell_volume: 总卖量 |
| | | @return: 是否可以买, 原因 |
| | |
| | | else: |
| | | # 拉黑且不是已经买入性质的拉黑 |
| | | return False, "已拉黑" |
| | | |
| | | if is_refered: |
| | | # 参考票没有大单 |
| | | volume_rate = code_volumn_manager.CodeVolumeManager().get_volume_rate(code, with_info=False) |
| | | if volume_rate is None: |
| | | volume_rate = 0.5 |
| | | big_order_deal_enough = is_big_order_deal_enough(code, volume_rate) |
| | | if not big_order_deal_enough[0] and big_order_deal_enough[2]: |
| | | return False, "交易前两分钟大单不足" |
| | | |
| | | return True, "" |
| | | |
| | | @classmethod |
| | |
| | | @classmethod |
| | | def place_order_success(cls, code): |
| | | # 如果有大单成交就加红 |
| | | deal_big_order_count = BigOrderDealManager().get_total_buy_count(code) |
| | | if deal_big_order_count > 0: |
| | | volume_rate = code_volumn_manager.CodeVolumeManager().get_volume_rate(code, with_info=False) |
| | | if volume_rate is None: |
| | | volume_rate = 0.5 |
| | | big_order_deal_enough = is_big_order_deal_enough(code, |
| | | volume_rate) # BigOrderDealManager().get_total_buy_count(code) |
| | | if big_order_deal_enough[0]: |
| | | gpcode_manager.MustBuyCodesManager().add_code(code) |
| | | |
| | | |
| | | class ExcludeIndexComputeCodesManager: |
| | | """ |
| | | 排除身位计算管理器 |
| | | """ |
| | | __codes_cache = set() |
| | | |
| | | @classmethod |
| | | def add_code(cls, code): |
| | | cls.__codes_cache.add(code) |
| | | |
| | | @classmethod |
| | | def remove_code(cls, code): |
| | | cls.__codes_cache.discard(code) |
| | | |
| | | @classmethod |
| | | def get_all_codes(cls): |
| | | return cls.__codes_cache |
| | | |
| | | @classmethod |
| | | def is_in_cache(cls, code): |
| | | return code in cls.__codes_cache |
| | | |
| | | |
| | | def is_big_order_deal_enough(code, volume_rate): |
| | | """ |
| | | 大单成交是否足够 |
| | | @param code: |
| | | @param volume_rate: |
| | | @return: 大单是否足够, 原因, 是否是短时生效 |
| | | """ |
| | | limit_up_price = gpcode_manager.get_limit_up_price_as_num(code) |
| | | refer_volume = code_volumn_manager.CodeVolumeManager().get_max_volume_in_5days(code) |
| | | if refer_volume is None: |
| | | refer_volume = 0 |
| | | |
| | | money_y = int(refer_volume * limit_up_price / 1e8) |
| | | money_y = min(money_y, 50) |
| | | money_y = max(money_y, 5) |
| | | before_time = tool.get_now_time_as_int() < 93200 |
| | | # 计算大单参考数量 |
| | | threshold_count = 1 # int(round(0.4 * money_y)) |
| | | if before_time: |
| | | threshold_count = int(round(0.4 * money_y * 1.5)) |
| | | threshold_money = threshold_count * 299 * 10000 |
| | | |
| | | if volume_rate >= 0.5 or True: |
| | | # 按量大于50%算 |
| | | # 当换手量>50%时,则,不需要每次扫入时需要≥2笔大单,而是累计需要≥2笔大单即可 |
| | | deal_big_order_money = BigOrderDealManager().get_total_buy_money(code) |
| | | try: |
| | | # 获取正在成交的订单 |
| | | dealing_order_info = HuaXinBuyOrderManager().get_dealing_order_info(code) |
| | | threshold_big_money = l2_data_util.get_big_money_val(limit_up_price, tool.is_ge_code(code)) |
| | | if dealing_order_info and dealing_order_info[2] >= threshold_big_money: |
| | | # 正在成交的订单是大单 |
| | | deal_big_order_money += dealing_order_info[2] |
| | | except Exception as e: |
| | | async_log_util.info(logger_l2_radical_buy, f"计算正在成交大单出错:{str(e)}") |
| | | |
| | | if deal_big_order_money >= threshold_money: |
| | | return True, f"量比-{volume_rate}, 总大单成交金额({deal_big_order_money})>={threshold_money}", before_time |
| | | else: |
| | | return False, f"量比-{volume_rate}, 总大单成交金额({deal_big_order_money})<{threshold_money}", before_time |
| | | else: |
| | | current_big_order_deal_count = EveryLimitupBigDealOrderManager.get_big_buy_deal_order_count(code) |
| | | if current_big_order_deal_count >= threshold_count: |
| | | return True, f"量比-{volume_rate}, 本次大单成交数量({current_big_order_deal_count})>={threshold_count}", before_time |
| | | else: |
| | | return False, f"量比-{volume_rate}, 本次大单成交数量({current_big_order_deal_count})<{threshold_count}", before_time |
| | | |
| | | |
| | | class EveryLimitupBigDealOrderManager: |
| | | """ |
| | | 每次上板的大单管理 |