Administrator
2023-10-20 1e3b00bbbbd561918975888499f3d37eadf07144
9:25:00到9:30:00更新一次l1订阅代码
3个文件已修改
76 ■■■■ 已修改文件
huaxin_client/l1_client.py 60 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
huaxin_client/tool.py 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server.py 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
huaxin_client/l1_client.py
@@ -8,7 +8,6 @@
from huaxin_client import socket_util, l1_subscript_codes_manager
import xmdapi
from huaxin_client import tool, constant
from huaxin_client.client_network import SendResponseSkManager
from log_module.log import logger_system, logger_local_huaxin_l1, logger_l2_codes_subscript
level1_data_dict = {
@@ -45,6 +44,23 @@
        login_req = xmdapi.CTORATstpReqUserLoginField()
        self.__api.ReqUserLogin(login_req, 1)
    def subscribe_codes(self, codes_sh, codes_sz):
        # 重新订阅代码
        print(f"订阅数量:sh-{len(codes_sh)}  sz-{len(codes_sz)}")
        if codes_sh:
            ret = self.__api.SubscribeMarketData(codes_sh, xmdapi.TORA_TSTP_EXD_SSE)
            if ret != 0:
                print('SubscribeMarketData fail, ret[%d]' % ret)
            else:
                print('SubscribeMarketData success, ret[%d]' % ret)
        if codes_sz:
            ret = self.__api.SubscribeMarketData(codes_sz, xmdapi.TORA_TSTP_EXD_SZSE)
            if ret != 0:
                print('SubscribeMarketData fail, ret[%d]' % ret)
            else:
                print('SubscribeMarketData success, ret[%d]' % ret)
    def OnRspUserLogin(self, pRspUserLoginField, pRspInfoField, nRequestID):
        if pRspInfoField.ErrorID == 0:
            print('Login success! [%d]' % nRequestID)
@@ -56,21 +72,7 @@
            其它情况,订阅sub_arr集合中的合约行情
            '''
            print(f"订阅数量:sh-{len(self.codes_sh)}  sz-{len(self.codes_sz)}")
            if self.codes_sh:
                ret = self.__api.SubscribeMarketData(self.codes_sh, xmdapi.TORA_TSTP_EXD_SSE)
                if ret != 0:
                    print('SubscribeMarketData fail, ret[%d]' % ret)
                else:
                    print('SubscribeMarketData success, ret[%d]' % ret)
            if self.codes_sz:
                ret = self.__api.SubscribeMarketData(self.codes_sz, xmdapi.TORA_TSTP_EXD_SZSE)
                if ret != 0:
                    print('SubscribeMarketData fail, ret[%d]' % ret)
                else:
                    print('SubscribeMarketData success, ret[%d]' % ret)
            self.subscribe_codes(self.codes_sh, self.codes_sz)
            # sub_arr = [b'600004']
            # ret = self.__api.UnSubscribeMarketData(sub_arr, xmdapi.TORA_TSTP_EXD_SSE)
            # if ret != 0:
@@ -140,6 +142,24 @@
        logger_local_huaxin_l1.info(f"({request_id})新增加订阅的代码:{add_codes}")
is_re_subscript = False
# 重新订阅代码
def re_subscript(spi: MdSpi):
    try:
        global is_re_subscript
        if is_re_subscript:
            return
        is_re_subscript = True
        codes_sh, codes_sz = l1_subscript_codes_manager.request_l1_subscript_target_codes()
        if len(codes_sh) > 100 and len(codes_sz) > 100:
            logger_local_huaxin_l1.info(f"重新订阅 sh-{len(codes_sh)} sz-{len(codes_sz)}")
            spi.subscribe_codes(codes_sh, codes_sz)
    except:
        pass
def run(pipe_l2):
    logger_local_huaxin_l1.info("运行l1订阅服务")
    codes_sh = []
@@ -147,7 +167,6 @@
    for i in range(15):
        try:
            codes_sh, codes_sz = l1_subscript_codes_manager.get_codes()
            logger_local_huaxin_l1.info(f"获取上证,深证代码数量:sh-{len(codes_sh)} sz-{len(codes_sz)}")
            break
        except Exception as e:
@@ -212,6 +231,13 @@
            logging.exception(e)
        finally:
            time.sleep(3)
            # 判断是否需要重新订阅
            if tool.is_pre_trade_time():
                re_subscript(spi)
            else:
                global is_re_subscript
                is_re_subscript = False
    # 释放接口对象
    api.Release()
huaxin_client/tool.py
@@ -12,3 +12,13 @@
        return True
    else:
        return False
# 是否为交易前时间:9:25:00到9:30:00
def is_pre_trade_time():
    relative_timestamp = time.time() % (24 * 60 * 60) + 8 * 60 * 60
    start1 = 60 * 60 * 9 + 24 * 60
    end1 = 60 * 60 * 9 + 29 * 60
    if start1 < relative_timestamp < end1:
        return True
    return False
server.py
@@ -960,11 +960,11 @@
        time.sleep(1.5)
if __name__ == "__main__":
    codes = ["002270"]  # gpcode_manager.FirstGPCodesManager().get_first_gp_codes()
    codes = ["605151"]  # gpcode_manager.FirstGPCodesManager().get_first_gp_codes()
    for code in codes:
        volumes_data = inited_data.get_volumns_by_code(code, 150)
        volumes_data = volumes_data[1:]
        print(code, code_nature_analyse.is_up_too_high_in_120d(volumes_data))
        # volumes_data = volumes_data[1:]
        print(code, code_nature_analyse.is_have_latest_max_volume(volumes_data, 2))
        # try:
        #     global_data_loader.load_zyltgb()
        #     limit_up_price = float(gpcode_manager.get_limit_up_price(code))