Administrator
2024-08-08 18d75b1a7f6fe88fc92abf94ba83b042a26836c6
bug修改/早上买入策略修改
3个文件已修改
1个文件已添加
104 ■■■■■ 已修改文件
l2/l2_transaction_data_manager.py 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
log_module/log.py 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
servers/data_server.py 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
trade/buy_strategy.py 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
l2/l2_transaction_data_manager.py
@@ -101,7 +101,7 @@
        @return:
        """
        if code not in self.__total_buy_datas_dict:
            return 0
            return []
        return [x[2] for x in self.__total_buy_datas_dict[code]]
    def get_total_sell_money(self, code):
log_module/log.py
@@ -135,6 +135,10 @@
        logger.add(self.get_path("ths", "code_operate"),
                   filter=lambda record: record["extra"].get("name") == "code_operate",
                   rotation="00:00", compression="zip", enqueue=True)
        logger.add(self.get_path("strategy", "buy_strategy"),
                   filter=lambda record: record["extra"].get("name") == "buy_strategy",
                   rotation="00:00", compression="zip", enqueue=True)
        # 显示在控制台
        # logger.add(sys.stdout,
        #            filter=lambda record: record["extra"].get("name") == "code_operate", enqueue=True)
@@ -420,6 +424,8 @@
logger_mysql_debug = __mylogger.get_logger("mysql_debug")
logger_buy_strategy = __mylogger.get_logger("buy_strategy")
# -------------------------------华鑫日志---------------------------------
hx_logger_l2_orderdetail = __mylogger.get_logger("hx_l2_orderdetail")
hx_logger_l2_transaction = __mylogger.get_logger("hx_l2_transaction")
servers/data_server.py
@@ -10,6 +10,7 @@
from l2.l2_transaction_data_manager import HuaXinBuyOrderManager
from log_module.log import logger_system, logger_debug, logger_kpl_limit_up, logger_request_api
from third_data.kpl_limit_up_data_manager import LatestLimitUpBlockManager, CodeLimitUpSequenceManager
from trade.buy_strategy import OpenLimitUpGoodBlocksBuyStrategy
from utils import global_util, tool, data_export_util
from code_attribute import gpcode_manager
from log_module import log, log_analyse, log_export, async_log_util
@@ -816,6 +817,11 @@
                        CodeLimitUpSequenceManager().set_current_limit_up_datas(result_list_)
                    except:
                        pass
                    try:
                        OpenLimitUpGoodBlocksBuyStrategy.set_current_limit_up_data(result_list_)
                    except:
                        pass
                    self.__kplDataManager.save_data(type_, result_list_)
            except Exception as e:
                logger_debug.exception(e)
trade/buy_strategy.py
New file
@@ -0,0 +1,90 @@
"""
买入策略
"""
import constant
from log_module import async_log_util
from log_module.log import logger_buy_strategy
from third_data import kpl_api
from utils import tool
class OpenLimitUpGoodBlocksBuyStrategy:
    """
    开1的好板块买入策略
    """
    __excuted = False
    @classmethod
    def set_current_limit_up_data(cls, datas):
        """
        设置当前的涨停数据
        @param datas:
        @return:
        """
        now_time = int(tool.get_now_time_str().replace(":", ""))
        if now_time < int("092800") or now_time > int("093000"):
            return
        if cls.__excuted:
            return
        cls.__excuted = True
        # 形如: {"801038":['801038', '维生素', 7.325]}
        reason_id_info_dict = {}
        # 形如: {"801038":{}}
        reason_id_codes = {}
        for d in datas:
            code = d[0]
            limit_up_reason = d[5]
            # [['801038', '维生素', 7.325]]
            reasons = cls.__load_blocks(code, limit_up_reason)
            for r in reasons:
                reason_id_info_dict[r[0]] = r
                if r[0] not in reason_id_codes:
                    reason_id_codes[r[0]] = set()
                reason_id_codes[r[0]].add(code)
        reason_list = [reason_id_info_dict[x] for x in reason_id_info_dict]
        # 按涨幅倒序排
        reason_list.sort(key=lambda x: x[2], reverse=True)
        async_log_util.info(logger_buy_strategy, f"原因排序:{reason_list}")
        async_log_util.info(logger_buy_strategy, f"原因代码:{reason_id_codes}")
        max_lenth = len(reason_list)
        # 剔除宽泛原因
        for i in range(0, max_lenth):
            if i >= len(reason_list):
                break
            if reason_list[i][1] in constant.KPL_INVALID_BLOCKS:
                del reason_list[i]
                i -= 1
    @classmethod
    def __load_blocks(cls, code, limit_up_reason):
        """
        加载板块
        @param code:
        @return:
        """
        limit_up_reason_info = None
        jx_blocks = kpl_api.getCodeJingXuanBlocks(code)
        for x in jx_blocks:
            if x[1] == limit_up_reason:
                limit_up_reason_info = x
                break
        recommend_reasons = jx_blocks
        if len(jx_blocks) > 2:
            recommend_reasons = jx_blocks[:2]
        reasons = []
        if limit_up_reason_info:
            reasons.append(limit_up_reason_info)
        for r in recommend_reasons:
            if limit_up_reason_info and r[0] == limit_up_reason_info[0]:
                continue
            reasons.append(r)
        return reasons
if __name__ == "__main__":
    with open("C:\\Users\\Administrator\\Desktop\\新建文本文档 (2).txt", encoding="utf-8") as f:
        line = f.readline()
        line = eval(line)
        OpenLimitUpGoodBlocksBuyStrategy.set_current_limit_up_data(line)