"""
|
华鑫目标代码管理
|
"""
|
import json
|
import logging
|
import queue
|
import socket
|
import time
|
|
from code_attribute import global_data_loader, code_volumn_manager, first_target_code_data_processor
|
from code_attribute.code_data_util import ZYLTGBUtil
|
from db import redis_manager
|
from third_data import kpl_data_manager, kpl_api
|
from trade import current_price_process_manager
|
from utils import tool, global_util, socket_util
|
|
redisManager = redis_manager.RedisManager(4)
|
l2_codes_queue = queue.Queue()
|
|
|
# 华鑫Level2订阅代码管理
|
class HuaXinL2SubscriptCodesManager:
|
__L2_CODE_KEY = "huaxin_l2_code_list"
|
__SUBSCRIPT_KEY = "huaxin_subscript_codes"
|
__subscript_codes = []
|
|
@classmethod
|
def __get_redis(cls):
|
return redisManager.getRedis()
|
|
@classmethod
|
def clear(cls):
|
# cls.__get_redis().delete(cls.__L2_CODE_KEY)
|
l2_codes_queue.clear()
|
|
@classmethod
|
def push(cls, datas):
|
l2_codes_queue.put_nowait((int(time.time()), datas))
|
# cls.__get_redis().lpush(cls.__L2_CODE_KEY, json.dumps())
|
|
@classmethod
|
def pop(cls):
|
return l2_codes_queue.get()
|
# val = cls.__get_redis().lpop(cls.__L2_CODE_KEY)
|
|
# 设置订阅代码
|
@classmethod
|
def save_subscript_codes(cls, codes):
|
cls.__subscript_codes = codes
|
# cls.__get_redis().setex(cls.__SUBSCRIPT_KEY, tool.get_expire(), json.dumps(codes))
|
|
# 获取订阅的代码
|
@classmethod
|
def get_subscript_codes(cls):
|
return cls.__subscript_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)
|
# 保存今日实时量
|
code_volumn_manager.set_today_volumn(code, d[3])
|
|
zyltgb = 0
|
if code in global_util.zyltgb_map:
|
zyltgb = global_util.zyltgb_map[code]
|
# 量的单位为手(不是股)
|
fitem = {"code": code, "price": d[1], "volume": d[3] // (10000 * 100), "volumeUnit": 1, "time": "00:00:00",
|
"zyltgb": zyltgb // 10000, "zyltgbUnit": 1}
|
flist.append(fitem)
|
print("首板代码数量", len(flist))
|
try:
|
tick_datas = first_target_code_data_processor.process_first_codes_datas(flist)
|
current_price_process_manager.accept_prices(tick_datas)
|
except Exception as e:
|
logging.exception(e)
|
|
|
if __name__ == "__main__":
|
code = "002703"
|
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]
|
print(zyltgb)
|