cancel_strategy/s_l_h_cancel_strategy.py | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
l2/l2_data_manager_new.py | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
third_data/data_server.py | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
cancel_strategy/s_l_h_cancel_strategy.py
@@ -39,7 +39,7 @@ if can_buy_result and can_buy_result[0]: if can_buy_result[0][1] <= 1 and can_buy_result[0][2] >= 3: # 炸板率>60%以上就不加半红 if can_buy_result[0][3]<=0 or can_buy_result[0][2]/can_buy_result[0][3]>0.4: if can_buy_result[0][3] <= 0 or can_buy_result[0][2] / can_buy_result[0][3] > 0.4: half_must_buy = True except: pass @@ -47,24 +47,24 @@ if must_buy: return constant.S_FAST_RATE_WITH_MUST_BUY, "加红" elif half_must_buy: return round((constant.S_FAST_RATE + constant.S_FAST_RATE_WITH_MUST_BUY) / 2, 2),"半红" return round((constant.S_FAST_RATE + constant.S_FAST_RATE_WITH_MUST_BUY) / 2, 2), "半红" else: return constant.S_FAST_RATE,"常规" return constant.S_FAST_RATE, "常规" elif cancel_type == cls.TYPE_S_FAST_BIG: if must_buy: return constant.S_FAST_BIG_RATE_WITH_MUST_BUY, "加红" elif half_must_buy: return round((constant.S_FAST_RATE + constant.S_FAST_BIG_RATE_WITH_MUST_BUY) / 2, 2),"半红" return round((constant.S_FAST_RATE + constant.S_FAST_BIG_RATE_WITH_MUST_BUY) / 2, 2), "半红" else: return constant.S_FAST_RATE,"常规" return constant.S_FAST_RATE, "常规" elif cancel_type == cls.TYPE_S_SLOW: if must_buy: return constant.S_SLOW_RATE_WITH_MUST_BUY, "加红" elif half_must_buy: return round((constant.S_SLOW_RATE + constant.S_SLOW_RATE_WITH_MUST_BUY) / 2, 2),"半红" return round((constant.S_SLOW_RATE + constant.S_SLOW_RATE_WITH_MUST_BUY) / 2, 2), "半红" else: return constant.S_SLOW_RATE,"常规" return None,"" return constant.S_SLOW_RATE, "常规" return None, "" class SCancelBigNumComputer: @@ -292,7 +292,8 @@ total_datas[real_place_order_info[0]]['val']['orderNo'], min_sell_money=min_sell_money) sell_order_num = sum([x[1] for x in sell_orders]) // 100 rate = round(sell_order_num / total_num, 2) threshold_rate,threshold_rate_msg = SCancelRateManager.get_threshhold_rate(code, SCancelRateManager.TYPE_S_SLOW) threshold_rate, threshold_rate_msg = SCancelRateManager.get_threshhold_rate(code, SCancelRateManager.TYPE_S_SLOW) if rate > threshold_rate: return True, f"慢砸成交比例:{rate}/0.49({threshold_rate_msg}) 成交:{sell_order_num}/{total_num}" else: @@ -380,7 +381,8 @@ if total_num == 0: total_num = 1 threshold_rate,threshold_rate_msg = SCancelRateManager.get_threshhold_rate(code, SCancelRateManager.TYPE_S_FAST_BIG) threshold_rate, threshold_rate_msg = SCancelRateManager.get_threshhold_rate(code, SCancelRateManager.TYPE_S_FAST_BIG) if total_deal_money / (total_num * limit_up_price * 100) >= threshold_rate: # 大单成交额占总剩余总囊括的30% @@ -441,7 +443,8 @@ # 防止分母为0 total_fast_money = 1 rate = round(total_deal_money / total_fast_money, 2) threshold_rate,threshold_rate_msg = SCancelRateManager.get_threshhold_rate(code, SCancelRateManager.TYPE_S_FAST) threshold_rate, threshold_rate_msg = SCancelRateManager.get_threshhold_rate(code, SCancelRateManager.TYPE_S_FAST) if total_deal_money >= threash_money_w * 10000 and rate >= threshold_rate: return True, f"近1s有大卖单({round(total_deal_money / 10000, 1)}万/{threash_money_w}万({threshold_rate_msg}),成交占比:{total_deal_money}/{total_fast_money})" @@ -521,7 +524,6 @@ l2_log.s_cancel_debug(code, f"S慢砸监听范围:{watch_info}") except Exception as e: logger_l2_s_cancel.exception(e) # ---------------------------------L撤------------------------------- @@ -1219,7 +1221,8 @@ if cancel_data: if str(wi) in after_place_order_index_dict: # 真实下单位置之后的按照权重比例来计算 canceled_num += total_data[wi]["val"]["num"] * (10 - after_place_order_index_dict[str(wi)]) // 10 canceled_num += total_data[wi]["val"]["num"] * ( 10 - after_place_order_index_dict[str(wi)]) // 10 else: canceled_num += total_data[wi]["val"]["num"] @@ -1416,6 +1419,7 @@ print(self.__get_cancel_l_down_after_place_order_index_dict(code)) # --------------------------------H撤------------------------------- class HourCancelBigNumComputer: __db = 0 l2/l2_data_manager_new.py
@@ -672,7 +672,7 @@ current_total_sell_data = L2MarketSellManager().get_current_total_sell_data(code) place_order_count = trade_data_manager.PlaceOrderCountManager().get_place_order_count(code) # 只有初次下单 + 总抛压大于500w能激进下单 if place_order_count > 0 or current_total_sell_data[1] < 500 * 10000: if place_order_count > 0 or current_total_sell_data is None or current_total_sell_data[1] < 500 * 10000: return None if global_util.zyltgb_map.get(code) > 50 * 100000000: third_data/data_server.py
@@ -708,61 +708,63 @@ def __process_kpl_data(self, data_origin): def do_limit_up(result_list_): if result_list_: # 保存涨停时间 codes_set = set() limit_up_reasons = {} for d in result_list_: code = d[0] limit_up_reasons[code] = d[5] codes_set.add(code) if tool.is_shsz_code(code): limit_up_time = time.strftime("%H:%M:%S", time.localtime(d[2])) code_price_manager.Buy1PriceManager().set_limit_up_time(code, limit_up_time) add_codes = codes_set - self.__latest_limit_up_codes_set self.__latest_limit_up_codes_set = codes_set if limit_up_reasons: # 统计涨停原因的票的个数 limit_up_reason_code_dict = {} for code in limit_up_reasons: b = limit_up_reasons[code] if b not in limit_up_reason_code_dict: limit_up_reason_code_dict[b] = set() limit_up_reason_code_dict[b].add(code) cancel_buy_strategy.LCancelRateManager.set_block_limit_up_count(limit_up_reason_code_dict) if add_codes: for code in add_codes: # 根据涨停原因判断是否可以买 try: if result_list_: # 保存涨停时间 codes_set = set() limit_up_reasons = {} for d in result_list_: code = d[0] limit_up_reasons[code] = d[5] codes_set.add(code) if tool.is_shsz_code(code): try: # 判断是否下单 trade_state = trade_manager.CodesTradeStateManager().get_trade_state(code) if trade_state == trade_manager.TRADE_STATE_BUY_PLACE_ORDER or trade_state == trade_manager.TRADE_STATE_BUY_DELEGATED: # 委托中的订单,判断是否需要撤单 if not gpcode_manager.WantBuyCodesManager().is_in_cache(code): yesterday_codes = kpl_data_manager.get_yesterday_limit_up_codes() current_limit_up_datas, limit_up_record_datas, yesterday_current_limit_up_codes, before_blocks_dict = kpl_data_manager.KPLLimitUpDataRecordManager.latest_origin_datas, kpl_data_manager.KPLLimitUpDataRecordManager.total_datas, yesterday_codes, block_info.get_before_blocks_dict() if not current_limit_up_datas: current_limit_up_datas = [] if not limit_up_record_datas: limit_up_record_datas = [] # 买绝对老大 # 中途不能撤单 # if CodePlateKeyBuyManager.is_need_cancel(code, limit_up_reasons.get(code), # current_limit_up_datas, # limit_up_record_datas, # yesterday_current_limit_up_codes, # before_blocks_dict): # l2_data_manager_new.L2TradeDataProcessor.cancel_buy(code, # f"涨停原因({limit_up_reasons.get(code)})不是老大撤单", # "板块撤") except Exception as e: logger_debug.exception(e) kpl_data_manager.KPLLimitUpDataRecordManager.save_record(tool.get_now_date_str(), result_list_) self.__kplDataManager.save_data(type_, result_list_) limit_up_time = time.strftime("%H:%M:%S", time.localtime(d[2])) code_price_manager.Buy1PriceManager().set_limit_up_time(code, limit_up_time) add_codes = codes_set - self.__latest_limit_up_codes_set self.__latest_limit_up_codes_set = codes_set if limit_up_reasons: # 统计涨停原因的票的个数 limit_up_reason_code_dict = {} for code in limit_up_reasons: b = limit_up_reasons[code] if b not in limit_up_reason_code_dict: limit_up_reason_code_dict[b] = set() limit_up_reason_code_dict[b].add(code) cancel_buy_strategy.LCancelRateManager.set_block_limit_up_count(limit_up_reason_code_dict) if add_codes: for code in add_codes: # 根据涨停原因判断是否可以买 if tool.is_shsz_code(code): try: # 判断是否下单 trade_state = trade_manager.CodesTradeStateManager().get_trade_state(code) if trade_state == trade_manager.TRADE_STATE_BUY_PLACE_ORDER or trade_state == trade_manager.TRADE_STATE_BUY_DELEGATED: # 委托中的订单,判断是否需要撤单 if not gpcode_manager.WantBuyCodesManager().is_in_cache(code): yesterday_codes = kpl_data_manager.get_yesterday_limit_up_codes() current_limit_up_datas, limit_up_record_datas, yesterday_current_limit_up_codes, before_blocks_dict = kpl_data_manager.KPLLimitUpDataRecordManager.latest_origin_datas, kpl_data_manager.KPLLimitUpDataRecordManager.total_datas, yesterday_codes, block_info.get_before_blocks_dict() if not current_limit_up_datas: current_limit_up_datas = [] if not limit_up_record_datas: limit_up_record_datas = [] # 买绝对老大 # 中途不能撤单 # if CodePlateKeyBuyManager.is_need_cancel(code, limit_up_reasons.get(code), # current_limit_up_datas, # limit_up_record_datas, # yesterday_current_limit_up_codes, # before_blocks_dict): # l2_data_manager_new.L2TradeDataProcessor.cancel_buy(code, # f"涨停原因({limit_up_reasons.get(code)})不是老大撤单", # "板块撤") except Exception as e: logger_debug.exception(e) kpl_data_manager.KPLLimitUpDataRecordManager.save_record(tool.get_now_date_str(), result_list_) self.__kplDataManager.save_data(type_, result_list_) except Exception as e: logger_debug.exception(e) # 将"概念"二字替换掉 data = data_origin type_ = data["type"]