l2/l2_limitup_sell_data_manager.py | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
l2_data_parser.py | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
trade/buy_radical/radical_buy_data_manager.py | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
trade/current_price_process_manager.py | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
l2/l2_limitup_sell_data_manager.py
@@ -5,6 +5,7 @@ from l2 import l2_log from log_module import async_log_util, log_export from log_module.log import hx_logger_l2_sell_delegate, hx_logger_l2_sell_deal from utils import tool class L2LimitUpSellDataManager: @@ -49,7 +50,7 @@ cls.__order_no_set_dict[code].discard(order_no) cls.__delegating_sell_num_dict[code] -= volume async_log_util.l2_data_log.info(hx_logger_l2_sell_delegate, f"{code}-卖撤-{order_no, price, volume}") f"{code}-卖撤-{(order_no, price, volume)}-{cls.__delegating_sell_num_dict[code]}") else: if d[3] != '1': # 卖 @@ -57,7 +58,7 @@ cls.__order_no_set_dict[code].add(order_no) cls.__delegating_sell_num_dict[code] += volume async_log_util.l2_data_log.info(hx_logger_l2_sell_delegate, f"{code}-卖-{order_no, price, volume}") f"{code}-卖-{(order_no, price, volume)}-{cls.__delegating_sell_num_dict[code]}") except: pass @@ -122,14 +123,25 @@ if code in cls.__delegating_sell_num_dict: cls.__delegating_sell_num_dict.pop(code) async_log_util.l2_data_log.info(hx_logger_l2_sell_deal, f"出现主动卖清除数据:{code}") if __name__ == "__main__": code = "300479" datas = log_export.load_huaxin_l2_sell_deal(code).get(code) print(datas) for i in range(len(datas)): if tool.trade_time_sub(datas[i][0], "09:44:00") > 0: datas = datas[:i] break total_volume = sum([x[1] for x in datas]) print("涨停卖成交", total_volume * 20.41) print("涨停卖成交", total_volume) datas = log_export.load_huaxin_l2_sell_delegate(code).get(code) total_delegate = sum([x[2][2] for x in datas]) print("总委托",total_delegate) fdatas = [] for x in datas: if int("093206") < int(x[0].replace(":", "")) < int("094254"): fdatas.append(x) total_delegate = sum([x[2][2] for x in fdatas]) print(fdatas) print("总委托", total_delegate, total_delegate*20.41) l2_data_parser.py
@@ -107,7 +107,7 @@ parse_order_detail(day) elif _type == 'Transaction': parse_transaction(day) elif _type == 'XTSTick': elif _type == 'NGTSTick': parse_ngtstick(day) elif _type == 'MarketData': parse_market_data(day) trade/buy_radical/radical_buy_data_manager.py
@@ -293,7 +293,7 @@ return money_list = [x[0] for x in fmoney_list] # 计算大单: 前2个大单的均值 self.__temp_big_order_threshold[code] = (int(sum(money_list[:2]) // 2), time.time()+10) self.__temp_big_order_threshold[code] = (int(sum(money_list[:2]) // 2), time.time() + 10) async_log_util.info(logger_l2_radical_buy_data, f"首次上板临时买大单:{code}-{self.__temp_big_order_threshold[code]}-{fmoney_list[:2]}") trade_record_log_util.add_common_msg(code, "首封大单设置", f"{self.__temp_big_order_threshold[code][0]}") @@ -414,8 +414,8 @@ if len(buy1_list) < 2: return False latest_buy1 = buy1_list[-1][1] if latest_buy1[0] * latest_buy1[1] > 500e4: # 最近的买1要小于500万 if not gpcode_manager.WantBuyCodesManager().is_in_cache(code) and latest_buy1[0] * latest_buy1[1] > 500e4: # 不是想买单:最近的买1要小于500万 return False latest_volume = latest_buy1[1] max_volume = max([x[1][1] for x in buy1_list]) @@ -494,10 +494,19 @@ jx_out_blocks = RealTimeKplMarketData.get_top_market_jingxuan_out_blocks() if jx_out_blocks: blocks = RadicalBuyBlockManager.get_code_blocks(code)[0] same_blocks = blocks & set(jx_out_blocks) if blocks: fblocks = set(blocks) else: fblocks = set() for b in blocks: # 辨识度的票不看净流出 block_codes = BlockSpecialCodesManager().get_block_codes(b) if block_codes and code in block_codes: # 辨识度 fblocks.discard(b) same_blocks = fblocks & set(jx_out_blocks) if same_blocks: return False, f"【{same_blocks}】板块精选流出", False return True, "", False @classmethod @@ -880,8 +889,6 @@ # return True, f"开1数量:{count},前排代码尚未成交:{history_before_codes_info[0]}" # return True, f"开1数量:{count},前排代码不可买:{history_before_codes_info[0]},历史前排-{history_before_codes_info},开1代码-{open_limit_up_block_codes}" # 曾涨停有后排才能买 if not cls.__is_have_back_codes(code, block): return False, f"【{block}】无后排" return True, f"开1数量:{count},历史-{history_index + 1} 实时-{current_index + 1}, 前排代码-{current_before_codes_info},开1代码-{open_limit_up_block_codes}" @classmethod @@ -1056,8 +1063,6 @@ deal_codes = RadicalBuyDealCodesManager().get_deal_codes() if pre_code in deal_codes: return False, f"前排代码已成交:{pre_code}" if not cls.__is_have_back_codes(code, block): return False, f"【{block}】无后排" return True, f"被顺位代码({pre_code}) 尚未成交" # pre_code不能买,才能买 @@ -1089,8 +1094,6 @@ else: # 代码为目标代码 pass if not cls.__is_have_back_codes(code, block): return False, f"【{block}】无后排" return True, f"满足买入需求: 实时前排代码-{current_before_codes_info} 历史前排代码-{history_before_codes_info}" @classmethod @@ -1156,8 +1159,11 @@ history_index, history_before_codes_info, limit_up_space_ge_60s_codes = cls.__get_history_index(code, block, yesterday_limit_up_codes, ignore_open_limit_up=False) if history_index > 5: return False, f"处于首板老{history_index + 1}" if history_before_codes_info: before_codes = set([x[0] for x in history_before_codes_info]) before_special_codes = before_codes & set(block_codes) if len(before_special_codes) >= 3: return False, f"前排辨识度>=3个({before_special_codes})" # 判断是净流入前排 in_blocks = RealTimeKplMarketData.get_top_market_jingxuan_blocks() @@ -1356,7 +1362,7 @@ if can_buy_blocks: msges.clear() for b in can_buy_blocks: if KPLPlateForbiddenManager().is_in_cache(b): if not is_can_buy_for_forbidden_plate(code, b, yesterday_limit_up_codes): msges.append(b) if msges: fmsges.append("禁止买入的板块##" + ",".join(msges)) @@ -1850,5 +1856,33 @@ return False def is_can_buy_for_forbidden_plate(code, block, yesterday_limit_up_codes): """ 被禁止的板块是否可买 @param code: @param block: @return: """ if not KPLPlateForbiddenManager().is_in_cache(block): # 板块没有被禁止 return True special_codes = BlockSpecialCodesManager().get_block_codes(block) if not special_codes: # 无辨识度 return False if code not in special_codes: # 当前票无辨识度 return False # 是不是首板第一个辨识度的票 data = RadicalBuyBlockManager().get_history_index(code, block, yesterday_limit_up_codes) if data[1]: before_codes = set([x[0] for x in data[1]]) before_codes &= set(special_codes) if before_codes: # 不是辨识度老大 return False return True if __name__ == '__main__': pass trade/current_price_process_manager.py
@@ -87,7 +87,7 @@ index = None # 如果当前板块不能买则不订阅 if KPLPlateForbiddenManager().is_in_cache(b): if not radical_buy_data_manager.is_can_buy_for_forbidden_plate(code, b, yesterday_limit_up_codes): continue if b in top_in_blocks: index = top_in_blocks.index(b) @@ -105,7 +105,7 @@ yesterday_limit_up_codes) if info[0] < 3: return index + 1 elif info[0] < 6: else: # 判断是否具有辨识度 special_codes = BlockSpecialCodesManager().get_block_codes(b) if special_codes and code in special_codes: @@ -114,7 +114,7 @@ # 尚未涨停过的代码,订阅板块有辨识度的前6 for b in blocks: # 如果当前板块不能买则不订阅 if KPLPlateForbiddenManager().is_in_cache(b): if not radical_buy_data_manager.is_can_buy_for_forbidden_plate(code, b, yesterday_limit_up_codes): continue if b not in top_in_blocks: continue @@ -122,14 +122,7 @@ special_codes = BlockSpecialCodesManager().get_block_codes(b) if not special_codes or code not in special_codes: continue # 查询在板块中的排序 info = RadicalBuyBlockManager().get_history_index(code, b, yesterday_limit_up_codes) if info[0] > 0: info = RadicalBuyBlockManager().filter_before_codes(code, b, info[0], info[1], yesterday_limit_up_codes) if info[0] >= 6: continue # 净流入 + 辨识度 + 整体身位老6之前 # 净流入 + 辨识度 return index + 1 return 10000