| | |
| | | 华鑫目标代码管理 |
| | | """ |
| | | import json |
| | | import socket |
| | | |
| | | from code_attribute import global_data_loader |
| | | from code_attribute.code_data_util import ZYLTGBUtil |
| | | from db import redis_manager |
| | | from utils import tool |
| | | from third_data import kpl_data_manager, kpl_api |
| | | from utils import tool, global_util, socket_util |
| | | |
| | | redisManager = redis_manager.RedisManager(0) |
| | | |
| | | |
| | | def __get_redis(): |
| | | return redisManager.getRedis() |
| | | # 华鑫Level2订阅代码管理 |
| | | class HuaXinL2SubscriptCodesManager: |
| | | __L2_CODE_KEY = "huaxin_l2_code_list" |
| | | __SUBSCRIPT_KEY = "huaxin_subscript_codes" |
| | | |
| | | @classmethod |
| | | def __get_redis(cls): |
| | | return redisManager.getRedis() |
| | | |
| | | __L2_CODE_KEY = "huaxin_l2_code_list" |
| | | @classmethod |
| | | def clear(cls): |
| | | cls.__get_redis().delete(cls.__L2_CODE_KEY) |
| | | |
| | | __SUBSCRIPT_KEY = "huaxin_subscript_codes" |
| | | @classmethod |
| | | def push(cls, datas): |
| | | cls.__get_redis().lpush(cls.__L2_CODE_KEY, json.dumps(datas)) |
| | | |
| | | @classmethod |
| | | def pop(cls): |
| | | val = cls.__get_redis().lpop(cls.__L2_CODE_KEY) |
| | | if val: |
| | | return json.loads(val) |
| | | return val |
| | | |
| | | def clear(): |
| | | __get_redis().delete(__L2_CODE_KEY) |
| | | # 设置订阅代码 |
| | | @classmethod |
| | | def save_subscript_codes(cls, codes): |
| | | cls.__get_redis().setex(cls.__SUBSCRIPT_KEY, tool.get_expire(), json.dumps(codes)) |
| | | |
| | | |
| | | def push(datas): |
| | | __get_redis().lpush(__L2_CODE_KEY, json.dumps(datas)) |
| | | |
| | | |
| | | def pop(): |
| | | val = __get_redis().lpop(__L2_CODE_KEY) |
| | | if val: |
| | | # 获取订阅的代码 |
| | | @classmethod |
| | | def get_subscript_codes(cls): |
| | | val = cls.__get_redis().get(cls.__SUBSCRIPT_KEY) |
| | | if not val: |
| | | return [] |
| | | return json.loads(val) |
| | | return val |
| | | |
| | | |
| | | # 设置订阅代码 |
| | | def save_subscript_codes(codes): |
| | | __get_redis().setex(__SUBSCRIPT_KEY, tool.get_expire(), json.dumps(codes)) |
| | | # 根据华鑫L2选出目标代码 |
| | | class HuaXinL1TargetCodesManager: |
| | | |
| | | @classmethod |
| | | def set_level_1_codes_datas(cls, datas): |
| | | yesterday_codes = kpl_data_manager.get_yesterday_limit_up_codes() |
| | | # 订阅的代码 |
| | | flist = [] |
| | | for d in datas: |
| | | code = d[0] |
| | | # 格式 (代码,现价,涨幅,量,更新时间) |
| | | # 剔除昨日涨停的票 |
| | | if code in yesterday_codes: |
| | | continue |
| | | # 剔除股价大于40块的票 |
| | | if d[1] > 40: |
| | | continue |
| | | # 获取自由流通市值 |
| | | if code not in global_util.zyltgb_map: |
| | | zylt = ZYLTGBUtil.get(code) |
| | | if zylt: |
| | | global_util.zyltgb_map[code] = zylt |
| | | if code not in global_util.zyltgb_map: |
| | | zylt = kpl_api.getZYLTAmount(code) |
| | | if zylt: |
| | | # 保存自由流通股本 |
| | | ZYLTGBUtil.save(code, zylt // 10000, 1) |
| | | global_util.zyltgb_map[code] = int(zylt) |
| | | zyltgb = 0 |
| | | if code in global_util.zyltgb_map: |
| | | zyltgb = global_util.zyltgb_map[code] |
| | | |
| | | # 获取订阅的代码 |
| | | def get_subscript_codes(): |
| | | val = __get_redis().get(__SUBSCRIPT_KEY) |
| | | if not val: |
| | | return [] |
| | | return json.loads(val) |
| | | fitem = {"code": code, "price": d[1], "volume": d[3] // 10000, "volumeUnit": 1, "time": "00:00:00", |
| | | "zyltgb": zyltgb, "zyltgbUnit": 1} |
| | | flist.append(fitem) |
| | | fdata = {"type": 22, "data": flist} |
| | | |
| | | addr, port = "", 9001 |
| | | sk = socket.socket() # 生成socket,连接server |
| | | sk.connect((addr, port)) |
| | | sk.sendall(socket_util.load_header(json.dumps(fdata).encode('utf8'))) |
| | | result, header = socket_util.recv_data(sk) |
| | | if result: |
| | | result = json.loads(result) |
| | | if result["code"] != 0: |
| | | raise Exception(result["msg"]) |