Administrator
2024-03-29 afa2f2b0f32a31b95d4045c569182e85f2f91d73
获取非持仓票的名称
2个文件已修改
125 ■■■■ 已修改文件
code_atrribute/gpcode_manager.py 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
trade/trade_strategy.py 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
code_atrribute/gpcode_manager.py
@@ -14,116 +14,22 @@
class CodesNameManager:
    __db = 0
    redisManager = redis_manager.RedisManager(0)
    __gp_list_names_first_cache = []
    __code_name_dict = {}
    @classmethod
    def __get_redis(cls):
        return cls.redisManager.getRedis()
    def set_code_name(cls, code, name):
        cls.__code_name_dict[code] = name
    @classmethod
    def list_code_name_dict(cls):
        dict_ = {}
        val = cls.list_first_code_name_dict()
        if val is not None:
            for k in val:
                dict_[k] = val[k]
        val = cls.list_second_code_name_dict()
        if val is not None:
            for k in val:
                dict_[k] = val[k]
        return dict_
    def get_code_name(cls, code):
        cls.__code_name_dict.get(code)
    @classmethod
    def list_first_code_name_dict(cls):
        val = RedisUtils.get(cls.__get_redis(), "gp_list_names_first")
        if val is not None:
            val = json.loads(val)
            return val
        return None
    @classmethod
    def list_first_code_name_dict_cache(cls):
        val = RedisUtils.get(cls.__get_redis(), "gp_list_names_first")
        if val is not None:
            val = json.loads(val)
            return val
        return None
    @classmethod
    def get_first_code_name(cls, code):
        val = RedisUtils.get(cls.__get_redis(), "gp_list_names_first")
        if not val:
            return None
        val = json.loads(val)
        for k in val:
            if val[k] == code:
                return k
        return None
    @classmethod
    def get_first_name_code(cls, name):
        val = RedisUtils.get(cls.__get_redis(), "gp_list_names_first")
        if not val:
            return None
        val = json.loads(val)
        return val.get(name)
    @classmethod
    def add_first_code_name(cls, code, name):
        val = RedisUtils.get(cls.__get_redis(), "gp_list_names_first")
        if not val:
            return None
        val = json.loads(val)
        val[name] = code
        cls.set_first_code_names(val)
    # 设置首板代码名称
    @classmethod
    def set_first_code_names(cls, datas):
        RedisUtils.set_async(cls.__db, "gp_list_names_first", json.dumps(datas))
    # 删除首板代码名称
    @classmethod
    def clear_first_code_names(cls):
        RedisUtils.delete(cls.__get_redis(), "gp_list_names_first")
    @classmethod
    def list_second_code_name_dict(cls):
        val = RedisUtils.get(cls.__get_redis(), "gp_list_names")
        if val is not None:
            val = json.loads(val)
            return val
        return None
    @classmethod
    def get_second_code_name(cls, code):
        val = RedisUtils.get(cls.__get_redis(), "gp_list_names")
        if not val:
            return None
        val = json.loads(val)
        for k in val:
            if val[k] == code:
                return k
    @classmethod
    def get_second_name_code(cls, name):
        val = RedisUtils.get(cls.__get_redis(), "gp_list_names")
        if not val:
            return None
        val = json.loads(val)
        return val.get(name)
    # 设置二板代码名称
    @classmethod
    def set_second_code_names(cls, datas):
        RedisUtils.set(cls.__get_redis(), "gp_list_names", json.dumps(datas))
    # 设置二板代码名称
    @classmethod
    def clear_second_code_names(cls):
        RedisUtils.delete(cls.__get_redis(), "gp_list_names")
    def request_code_name(cls, code):
        datas = HistoryKDatasUtils.get_gp_latest_info([code])
        if datas:
            name = datas[0]['sec_name']
            cls.set_code_name(code, name)
# 获取二板代码
@@ -215,4 +121,4 @@
    price = CodePrePriceManager.get_price_pre_cache(code)
    if price is None:
        return None
    return tool.to_price(decimal.Decimal(str(price)) * decimal.Decimal("0.9"))
    return tool.to_price(decimal.Decimal(str(price)) * decimal.Decimal("0.9"))
trade/trade_strategy.py
@@ -8,6 +8,7 @@
import constant
from code_atrribute import gpcode_manager
from code_atrribute.gpcode_manager import CodesNameManager
from code_atrribute.history_k_data_util import HistoryKDatasUtils
from huaxin_client.client_network import SendResponseSkManager
from huaxin_client.l2_data_transform_protocol import L2DataCallBack
@@ -198,6 +199,14 @@
                    fdata["available"] = d["availablePosition"]
                    fdata["cost_price"] = round(float(d["historyPosPrice"]), 2)
                    break
            if fdata['total'] <= 0:
                # 没有持仓,需要获取代码名称
                name = CodesNameManager.get_code_name(code)
                if not name:
                    threading.Thread(target=lambda: CodesNameManager.request_code_name(code), daemon=True).start()
                if name:
                    fdata["code_info"] = (code, name)
            # 有现价就获取现价
            current_price = L1DataProcessor.get_l1_current_price(code)
            pre_close_price = gpcode_manager.get_price_pre_cache(code)