| | |
| | | from log_module.log import logger_system, logger_debug, logger_kpl_limit_up, logger_request_api |
| | | from third_data.custom_block_in_money_manager import CodeInMoneyManager |
| | | from third_data.kpl_data_constant import LimitUpCodesBlockRecordManager, LimitUpDataConstant |
| | | from third_data.kpl_limit_up_data_manager import LatestLimitUpBlockManager, CodeLimitUpSequenceManager |
| | | from third_data.kpl_limit_up_data_manager import LatestLimitUpBlockManager, CodeLimitUpSequenceManager, \ |
| | | ContainsLimitupCodesBlocksManager |
| | | from third_data.third_blocks_manager import BlockMapManager |
| | | from trade.buy_radical.block_special_codes_manager import BlockSpecialCodesManager |
| | | from trade.buy_strategy import OpenLimitUpGoodBlocksBuyStrategy |
| | |
| | | try: |
| | | fdatas = [] |
| | | if type_ == 0: |
| | | in_blocks = RealTimeKplMarketData().get_top_market_jingxuan_blocks() |
| | | if not in_blocks: |
| | | in_blocks = set() |
| | | fdatas = RealTimeKplMarketData.top_in_list_cache |
| | | if not fdatas: |
| | | datas = self.__kplDataManager.get_data(KPLDataType.JINGXUAN_RANK) |
| | | fdatas = datas |
| | | # 返回是否在流入前几 |
| | | temp_datas=[] |
| | | for d in fdatas: |
| | | temp = list(d) |
| | | if d[1] in in_blocks: |
| | | temp.append(1) |
| | | else: |
| | | temp.append(0) |
| | | temp_datas.append(temp) |
| | | fdatas = temp_datas |
| | | elif type_ == 1: |
| | | out_blocks = RealTimeKplMarketData().get_top_market_jingxuan_out_blocks() |
| | | if not out_blocks: |
| | | out_blocks = set() |
| | | fdatas = RealTimeKplMarketData.top_out_list_cache |
| | | if not fdatas: |
| | | datas = self.__kplDataManager.get_data(KPLDataType.JINGXUAN_RANK_OUT) |
| | | fdatas = datas |
| | | # 返回是否在流入前几 |
| | | temp_datas = [] |
| | | for d in fdatas: |
| | | temp = list(d) |
| | | if d[1] in out_blocks: |
| | | temp.append(1) |
| | | else: |
| | | temp.append(0) |
| | | temp_datas.append(temp) |
| | | fdatas = temp_datas |
| | | |
| | | response_data = json.dumps({"code": 0, "data": fdatas}) |
| | | except: |
| | | pass |
| | |
| | | pass |
| | | try: |
| | | CodeLimitUpSequenceManager().set_current_limit_up_datas(result_list_) |
| | | ContainsLimitupCodesBlocksManager().set_current_limit_up_datas(result_list_) |
| | | except: |
| | | pass |
| | | try: |
| | |
| | | try: |
| | | volume = tool.get_buy_volume_by_money(limit_up_price, constant.AVAILABLE_BUY_MONEYS[0]) |
| | | result = huaxin_trade_api.order(huaxin_trade_api.TRADE_DIRECTION_BUY, code, volume, limit_up_price, |
| | | blocking=False, |
| | | bolcking=False, |
| | | shadow_price=shadow_price, shadow_volume=volume) |
| | | async_log_util.info(logger_trade, f"{code}下单结束:{result}") |
| | | buy_open_limit_up_strategy.BuyOpenLimitupDataManager().set_place_order_info(code, volume, volume, |
| | |
| | | from third_data import kpl_block_util, kpl_api, kpl_util |
| | | from settings.trade_setting import MarketSituationManager |
| | | from third_data.kpl_data_constant import LimitUpCodesBlockRecordManager |
| | | from third_data.kpl_limit_up_data_manager import ContainsLimitupCodesBlocksManager |
| | | from third_data.third_blocks_manager import BlockMapManager |
| | | from utils import global_util, tool, buy_condition_util |
| | | from log_module import async_log_util |
| | |
| | | |
| | | # 实时开盘啦市场数据 |
| | | class RealTimeKplMarketData: |
| | | # 流入缓存 |
| | | # 流入缓存 [ID, 板块名称, 板块涨幅, 流入金额] |
| | | top_in_list_cache = [] |
| | | # 流出缓存 |
| | | top_out_list_cache = [] |
| | |
| | | @return: |
| | | """ |
| | | # 流入阈值 |
| | | THRESHOLD_MONEY = 100* (tool.trade_time_sub(tool.get_now_time_str(), "09:30:00")//60)+1000 |
| | | THRESHOLD_MONEY = 100 * (tool.trade_time_sub(tool.get_now_time_str(), "09:30:00") // 60) + 1000 |
| | | THRESHOLD_MONEY = min(THRESHOLD_MONEY, 10000) |
| | | THRESHOLD_MONEY = max(THRESHOLD_MONEY, 1000) |
| | | THRESHOLD_MONEY = THRESHOLD_MONEY * 10000 |
| | |
| | | fb = BlockMapManager().filter_blocks({data[1]}) |
| | | if blocks & fb: |
| | | continue |
| | | |
| | | |
| | | for b in fb: |
| | | fblock_money[b] = data[3] |
| | | blocks |= fb |
| | | count += 1 |
| | | |
| | | # 如果该原因没有涨停票要往后移一位 |
| | | has_code = False |
| | | for b in fb: |
| | | if ContainsLimitupCodesBlocksManager().get_block_codes(b): |
| | | has_code = True |
| | | break |
| | | if has_code: |
| | | count += 1 |
| | | |
| | | if count >= 10: |
| | | break |
| | | # 记录精选流出日志 |
| | |
| | | return kpl_data_manager.KPLLimitUpDataRecordManager.total_datas |
| | | |
| | | |
| | | @tool.singleton |
| | | class ContainsLimitupCodesBlocksManager: |
| | | """ |
| | | 包含涨停代码的板块 |
| | | """ |
| | | __block_codes_dict = {} |
| | | |
| | | def __init__(self): |
| | | self.__load_data() |
| | | |
| | | def __load_data(self): |
| | | records = get_history_limit_up_datas(tool.get_now_date_str()) |
| | | if records: |
| | | codes = set([r[3] for r in records]) |
| | | for code in codes: |
| | | self.__add_code(code) |
| | | |
| | | def get_block_codes(self, block): |
| | | return self.__block_codes_dict.get(block) |
| | | |
| | | def __add_code(self, code): |
| | | blocks = LimitUpCodesBlockRecordManager().get_radical_buy_blocks(code) |
| | | for b in blocks: |
| | | if b not in self.__block_codes_dict: |
| | | self.__block_codes_dict[b] = set() |
| | | self.__block_codes_dict[b].add(code) |
| | | |
| | | def set_current_limit_up_datas(self, datas): |
| | | """ |
| | | 设置当前涨停数据 |
| | | @param datas: |
| | | @return: |
| | | """ |
| | | if datas: |
| | | codes = [x[0] for x in datas] |
| | | for code in codes: |
| | | self.__add_code(code) |
| | | |
| | | |
| | | class CodeLimitUpSequenceManager: |
| | | """ |
| | | 代码身位管理 |
| | |
| | | rate = int((volumes_data[0]["close"] - min_price) * 100 / min_price) |
| | | cls.__k_max_rate[code] = rate |
| | | return cls.__k_datas.get(code) |
| | | |
| | | |
| | | if __name__ == "__main__": |
| | | ContainsLimitupCodesBlocksManager() |
| | |
| | | # 不是这个板块 |
| | | if block in blocks: |
| | | history_codes.add(_code) |
| | | if len(history_codes) <= 4: |
| | | return False, f"板块历史涨停小于4个:{history_codes}" |
| | | if len(history_codes) < 3: |
| | | return False, f"板块历史涨停小于3个:{history_codes}" |
| | | # 获取当前涨停数量 |
| | | current_codes = set() |
| | | for k in LimitUpDataConstant.current_limit_up_datas: |