Administrator
4 天以前 48fb7a00951f91bdc707e5dd2d196e5bccb752c3
l2/l2_data_util.py
@@ -33,6 +33,9 @@
# 买入订单号映射,只有原生的L2数据才有
local_today_buyno_map = {}
# 卖出订单号映射,只有原生的L2数据才有
local_today_sellno_map = {}
# 已经撤单的订单号
local_today_canceled_buyno_map = {}
@@ -74,9 +77,43 @@
        # 根据今日数据加载
        load_num_operate_map(local_today_num_operate_map, code, local_today_datas.get(code), force)
        load_buy_no_map(local_today_buyno_map, code, local_today_datas.get(code), force)
        load_sell_no_map(local_today_sellno_map, code, local_today_datas.get(code), force)
        load_canceled_buy_no_map(local_today_canceled_buyno_map, code, local_today_datas.get(code), force)
        return data_normal
    return True
# L2数据是否正常
def l2_data_is_normal(code):
    datas = local_today_datas.get(code)
    if not datas:
        # 初始化
        local_today_datas[code] = []
        load_num_operate_map(local_today_num_operate_map, code, local_today_datas.get(code))
        load_buy_no_map(local_today_buyno_map, code, local_today_datas.get(code))
        load_sell_no_map(local_today_sellno_map, code, local_today_datas.get(code))
        load_canceled_buy_no_map(local_today_canceled_buyno_map, code, local_today_datas.get(code))
    if datas and len(datas) != datas[-1]["index"] + 1:
        return False
    return True
# 加载所有的l2数据
def load_l2_data_all(force=False):
    datas = log_export.load_l2_from_log()
    for code in datas:
        if force:
            local_today_datas[code] = datas[code]
        else:
            if code not in local_today_datas:
                local_today_datas[code] = datas[code]
        load_num_operate_map(local_today_num_operate_map, code, local_today_datas.get(code), force)
        load_buy_no_map(local_today_buyno_map, code, local_today_datas.get(code), force)
        load_sell_no_map(local_today_sellno_map, code, local_today_datas.get(code), force)
        load_canceled_buy_no_map(local_today_canceled_buyno_map, code, local_today_datas.get(code), force)
    constant.L2_DATA_IS_LOADED = True
# 将数据根据num-operate分类
@@ -110,6 +147,25 @@
        key = "{}".format(data["val"]["orderNo"])
        if local_today_buyno_map[code].get(key) is None:
            local_today_buyno_map[code].setdefault(key, data)
# 将数据根据orderNo分类,原生数据才有
def load_sell_no_map(local_today_sellno_map, code, source_datas, clear=False):
    # 只有原生L2数据才会有此操作
    if constant.L2_SOURCE_TYPE != constant.L2_SOURCE_TYPE_HUAXIN:
        return
    if local_today_sellno_map.get(code) is None:
        local_today_sellno_map[code] = {}
    if clear:
        local_today_sellno_map[code] = {}
    for data in source_datas:
        if data["val"]["operateType"] != 2:
            continue
        # 只填充买入数据
        key = "{}".format(data["val"]["orderNo"])
        if local_today_sellno_map[code].get(key) is None:
            local_today_sellno_map[code].setdefault(key, data)
# 将数据根据orderNo分类已撤订单,原生数据才有
@@ -239,33 +295,12 @@
    return False
# 是否为大单
def is_big_money(val):
    price = float(val["price"])
    money = price * int(val["num"])
    if price > 3.0:
        if money >= 29900:
            return True
        else:
            return False
    else:
        max_money = price * 10000
        if money >= max_money * 0.95:
            return True
        else:
            return False
class L2DataUtil:
    @classmethod
    def is_same_time(cls, time1, time2):
        if constant.TEST:
            return True
        time1_s = time1.split(":")
        time1_second = int(time1_s[0]) * 3600 + int(time1_s[1]) * 60 + int(time1_s[2])
        time2_s = time2.split(":")
        time2_second = int(time2_s[0]) * 3600 + int(time2_s[1]) * 60 + int(time2_s[2])
        if abs(time2_second - time1_second) < 3:
        if abs(tool.trade_time_sub(time1, time2)) < 3:
            return True
        else:
            return False
@@ -585,4 +620,4 @@
if __name__ == "__main__":
    print(L2DataUtil.get_time_with_ms({"time": "10:00:00", "tms": 490}))
    print(L2DataUtil.time_sub_as_ms({"time": "09:46:05", "tms": 480}, {"time": "09:46:04", "tms": 90}))