Administrator
2024-11-27 abd7affcd9d83487001ce23a7a9596528554a258
扫入选票策略修改/主力流入前排板块修改
5个文件已修改
98 ■■■■■ 已修改文件
servers/data_server.py 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
servers/huaxin_trade_server.py 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
third_data/code_plate_key_manager.py 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
third_data/kpl_limit_up_data_manager.py 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
trade/buy_radical/radical_buy_data_manager.py 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
servers/data_server.py
@@ -13,7 +13,8 @@
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
@@ -803,15 +804,42 @@
            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
@@ -936,6 +964,7 @@
                        pass
                    try:
                        CodeLimitUpSequenceManager().set_current_limit_up_datas(result_list_)
                        ContainsLimitupCodesBlocksManager().set_current_limit_up_datas(result_list_)
                    except:
                        pass
                    try:
servers/huaxin_trade_server.py
@@ -879,7 +879,7 @@
            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,
third_data/code_plate_key_manager.py
@@ -13,6 +13,7 @@
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
@@ -333,7 +334,7 @@
# 实时开盘啦市场数据
class RealTimeKplMarketData:
    # 流入缓存
    # 流入缓存 [ID, 板块名称, 板块涨幅, 流入金额]
    top_in_list_cache = []
    # 流出缓存
    top_out_list_cache = []
@@ -361,7 +362,7 @@
        @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
@@ -380,10 +381,21 @@
            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
        # 记录精选流出日志
third_data/kpl_limit_up_data_manager.py
@@ -36,6 +36,45 @@
    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:
    """
    代码身位管理
@@ -319,3 +358,7 @@
        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()
trade/buy_radical/radical_buy_data_manager.py
@@ -629,8 +629,8 @@
            # 不是这个板块
            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: