Administrator
2023-08-02 caee9ee5f819c9b86fa8e2e0fd9d77a2ba79dc7f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
"""
华鑫目标代码管理
"""
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)