Administrator
2023-09-28 ea8a2631b6e08806399dff340f249843f70cf810
L2加入ms的数据
6个文件已修改
101 ■■■■ 已修改文件
l2/cancel_buy_strategy.py 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
l2/huaxin/l2_huaxin_util.py 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
l2/l2_data_manager_new.py 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
l2/l2_data_util.py 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
trade/huaxin/huaxin_trade_server.py 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
utils/data_export_util.py 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
l2/cancel_buy_strategy.py
@@ -1552,5 +1552,50 @@
        return None, ""
class LatestCancelIndexManager:
    __db = 0
    __redis_manager = redis_manager.RedisManager(0)
    __latest_cancel_index_cache = {}
    __instance = None
    def __new__(cls, *args, **kwargs):
        if not cls.__instance:
            cls.__instance = super(LatestCancelIndexManager, cls).__new__(cls, *args, **kwargs)
            cls.__load_datas()
        return cls.__instance
    @classmethod
    def __get_redis(cls):
        return cls.__redis_manager.getRedis()
    @classmethod
    def __load_datas(cls):
        __redis = cls.__get_redis()
        try:
            keys = RedisUtils.keys(__redis, "latest_cancel_index-*")
            for k in keys:
                code = k.split("-")[-1]
                val = RedisUtils.get(__redis, k)
                val = int(val)
                CodeDataCacheUtil.set_cache(cls.__latest_cancel_index_cache, code, val)
        finally:
            RedisUtils.realse(__redis)
    def __save_latest_cancel_index(self, code, index):
        RedisUtils.setex_async(self.__db, f"latest_cancel_index-{code}", tool.get_expire(), index)
    def set_latest_cancel_index(self, code, index):
        CodeDataCacheUtil.set_cache(self.__latest_cancel_index_cache, code, index)
        self.__save_latest_cancel_index(code, index)
    def get_latest_cancel_index_cache(self, code):
        result = CodeDataCacheUtil.get_cache(self.__latest_cancel_index_cache, code)
        if result[0]:
            return result[1]
        return None
    pass
if __name__ == "__main__":
    pass
l2/huaxin/l2_huaxin_util.py
@@ -13,6 +13,7 @@
    time_str = f"{item[5]}"
    if time_str.startswith("9"):
        time_str = f"0{time_str}"
    ms = "{:0<3}".format(time_str[6:])
    time_ = f"{time_str[0:2]}:{time_str[2:4]}:{time_str[4:6]}"
    price = item[1]
    if price <= 0:
@@ -35,7 +36,7 @@
        else:
            # 卖
            operateType = 2
    return {"time": time_, "price": price, "num": item[2] // 100, "limitPrice": limitPrice,
    return {"time": time_, "tms": ms, "price": price, "num": item[2] // 100, "limitPrice": limitPrice,
            "operateType": operateType, "cancelTime": 0, "cancelTimeUnit": 0, "orderNo": item[8],
            "mainSeq": item[6], "subSeq": item[7]}
@@ -86,3 +87,13 @@
    for i in range(0, len(fdatas)):
        fdatas[i]["index"] = start_index + i
    return fdatas
if __name__ == "__main__":
    ds =["('605167', 10.08, 68500, '1', '0', 9303108, 2, 439438, 436472, 'D', 1695864632451)",
         "('603439', 17.97, 27800, '1', '0', 9304966, 6, 435127, 407524, 'D', 1695864649883)",
         "('002369', 0.0, 100800, '1', '2', 93051880, 2011, 1431910, 1160638, 'D', 1695864651875)"
         ]
    for d in ds:
        d = eval(d)
        print(__convert_order(d, 15.55))
l2/l2_data_manager_new.py
@@ -19,7 +19,7 @@
from l2 import safe_count_manager, l2_data_manager, l2_log, l2_data_source_util, code_price_manager, \
    transaction_progress, cancel_buy_strategy, l2_data_log
from l2.cancel_buy_strategy import SecondCancelBigNumComputer, HourCancelBigNumComputer, DCancelBigNumComputer, \
    LCancelBigNumComputer
    LCancelBigNumComputer, LatestCancelIndexManager
from l2.l2_data_manager import L2DataException
from l2.l2_data_util import local_today_datas, L2DataUtil, local_today_num_operate_map, local_today_buyno_map, \
    local_latest_datas, local_today_canceled_buyno_map
@@ -232,6 +232,7 @@
    __WantBuyCodesManager = gpcode_manager.WantBuyCodesManager()
    __TradeTargetCodeModeManager = TradeTargetCodeModeManager()
    __TradeOrderIdManager = trade_huaxin.TradeOrderIdManager()
    __LatestCancelIndexManager = LatestCancelIndexManager()
    # 获取代码评分
    @classmethod
@@ -509,20 +510,13 @@
        #     cancel_data, cancel_msg = s_cancel(buy_single_index, buy_exec_index)
        if not cancel_data:
            cancel_data, cancel_msg = h_cancel(buy_single_index, buy_exec_index)
        # l2_log.debug(code, "撤单计算结束")
        # _start_time = l2_data_log.l2_time(code, tool.get_now_timestamp() - _start_time,
        #                                   "已下单-撤单 判断是否需要撤单")
        if cancel_data:
            l2_log.debug(code, "触发撤单,撤单位置:{} ,撤单原因:{}", cancel_data["index"], cancel_msg)
            l2_log.trade_record(code, "撤单", "'index':{} , 'msg':'{}'", cancel_data["index"], cancel_msg)
            # 撤单
            cls.cancel_buy(code, cancel_msg)
            # _start_time = l2_data_log.l2_time(code, tool.get_now_timestamp() - _start_time,
            #                                   "已下单-撤单 耗时")
            cls.cancel_buy(code, cancel_msg, cancel_index=cancel_data["index"])
            # 撤单成功,继续计算下单
            cls.__process_not_order(code, cancel_data["index"] + 1, end_index, capture_time, is_first_code)
            # _start_time = l2_data_log.l2_time(code, tool.get_now_timestamp() - _start_time,
            #                                   "处理剩余数据 耗时")
        else:
            pass
@@ -770,7 +764,8 @@
                    if not L2DataUtil.is_limit_up_price_buy(val):
                        continue
                    left_count = l2_data_source_util.L2DataSourceUtils.get_limit_up_buy_no_canceled_count_v2(code,
                                                                                                             data["index"],
                                                                                                             data[
                                                                                                                 "index"],
                                                                                                             total_data,
                                                                                                             local_today_canceled_buyno_map.get(
                                                                                                                 code))
@@ -787,7 +782,9 @@
                for i in range(trade_index + 1, total_data[-1]["index"] + 1):
                    if L2DataUtil.is_limit_up_price_buy(total_data[i]["val"]):
                        left_count = l2_data_source_util.L2DataSourceUtils.get_limit_up_buy_no_canceled_count_v2(code,
                                                                                                                 total_data[i]["index"],
                                                                                                                 total_data[
                                                                                                                     i][
                                                                                                                     "index"],
                                                                                                                 total_data,
                                                                                                                 local_today_canceled_buyno_map.get(
                                                                                                                     code))
@@ -903,7 +900,7 @@
            pass
    @classmethod
    def cancel_buy(cls, code, msg=None, source="l2"):
    def cancel_buy(cls, code, msg=None, source="l2", cancel_index=None):
        # 是否是交易队列触发
        buy_single_index, buy_exec_index, buy_compute_index, num, count, max_num_set, buy_volume_rate = cls.__get_order_begin_pos(
            code)
@@ -926,6 +923,9 @@
                l2_log.cancel_debug(code, "撤单中断,原因:{}", reason)
                l2_log.debug(code, "撤单中断,原因:{}", reason)
                return False
            if cancel_index is None:
                cancel_index = total_datas[-1]["index"]
            cls.__LatestCancelIndexManager.set_latest_cancel_index(code, cancel_index)
            cancel_result = cls.__cancel_buy(code)
            if cancel_result:
                trade_result_manager.real_cancel_success(code, buy_single_index, buy_exec_index, total_datas)
l2/l2_data_util.py
@@ -444,6 +444,15 @@
            return True
        return False
    # l2时间差值
    @classmethod
    def time_sub_as_ms(cls, val1, val2):
        # 计算时间差值
        sub_s = tool.trade_time_sub(val1["time"], val2["time"])
        sub_ms = int(val1["tms"]) - int(val2["tms"])
        fs = sub_s * 1000 + sub_ms
        return fs
class L2TradeQueueUtils(object):
    # 买入数据是否已撤
@@ -558,4 +567,4 @@
if __name__ == "__main__":
    print(load_l2_data("002235"))
    print(L2DataUtil.time_sub_as_ms({"time": "13:00:00", "time_ms": "980"}, {"time": "11:29:59", "time_ms": "590"}))
trade/huaxin/huaxin_trade_server.py
@@ -31,7 +31,7 @@
from l2 import l2_data_manager_new, l2_log, code_price_manager, l2_data_util, l2_data_manager, transaction_progress, \
    l2_data_log
from l2.cancel_buy_strategy import HourCancelBigNumComputer, LCancelBigNumComputer, DCancelBigNumComputer, \
    GCancelBigNumComputer, SecondCancelBigNumComputer, LCancelRateManager
    GCancelBigNumComputer, SecondCancelBigNumComputer, LCancelRateManager, LatestCancelIndexManager
from l2.huaxin import huaxin_target_codes_manager
from l2.huaxin.huaxin_target_codes_manager import HuaXinL1TargetCodesManager
from l2.l2_data_manager_new import L2TradeDataProcessor
@@ -382,7 +382,7 @@
            except Exception as e:
                hx_logger_l2_transaction.exception(e)
            finally:
                async_log_util.info(hx_logger_l2_transaction, f"{code}处理用时:{int((time.time() - __start_time) * 1000)}")
                async_log_util.info(hx_logger_l2_upload, f"{code}处理成交用时:{int((time.time() - __start_time) * 1000)}")
    @classmethod
    def l2_market_data(cls, code, data):
utils/data_export_util.py
@@ -95,7 +95,7 @@
        cancel_style = xlwt.easyxf('pattern: pattern solid, fore_colour gray25')
        ws.write(index, 0, data["index"], style)
        ws.write(index, 1, data["val"]["time"], style)
        ws.write(index, 1, data["val"]["time"] + (f".{data['val']['tms']}" if "tms" in data["val"] else ''), style)
        cancel_time = data["val"]["cancelTime"]
        if cancel_time == '0':
            cancel_time = ''
@@ -149,8 +149,6 @@
            cancel_data = l2.l2_data_util.local_today_canceled_buyno_map.get(code).get(str(data["val"]["orderNo"]))
            # 买
            if cancel_data:
                if cancel_data["index"] == 137:
                    print("进入断点")
                try:
                    ws.write(index, 8, "{}-{}".format(cancel_data["index"], cancel_data["val"]["time"]), cancel_style)
                except Exception as e: