Administrator
2024-06-14 70bbbc724f11ffa7d36aadcc0fed99e9394b2e82
L2接口更新
6个文件已修改
116 ■■■■ 已修改文件
_lev2mdapi.cp37-win32.pyd 补丁 | 查看 | 原始文档 | blame | 历史
_lev2mdapi.cp37-win_amd64.pyd 补丁 | 查看 | 原始文档 | blame | 历史
_lev2mdapi.cpython-37m-x86_64-linux-gnu.so 补丁 | 查看 | 原始文档 | blame | 历史
huaxin_client/l2_client_for_cb.py 105 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lev2mdapi.py 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
utils/tool.py 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_lev2mdapi.cp37-win32.pyd
Binary files differ
_lev2mdapi.cp37-win_amd64.pyd
Binary files differ
_lev2mdapi.cpython-37m-x86_64-linux-gnu.so
Binary files differ
huaxin_client/l2_client_for_cb.py
@@ -73,57 +73,85 @@
        self.codes = codes
    def __split_codes(self, codes):
        """
        分离代码
        :param codes:
        :return:上证股票代码, 上证非股票代码, 深证代码
        """
        szse_codes = []
        sse_codes = []
        sse_other_codes = []
        sse_stock_codes = []
        for code in codes:
            market_type = tool.get_market_type(code)
            if market_type == tool.MARKET_TYPE_SZSE:
                szse_codes.append(code.encode())
            elif market_type == tool.MARKET_TYPE_SSE:
                sse_codes.append(code.encode())
        return sse_codes, szse_codes
                if tool.is_stock(code):
                    sse_stock_codes.append(code.encode)
                else:
                    sse_other_codes.append(code.encode())
        return sse_stock_codes, sse_other_codes, szse_codes
    # 新增订阅
    # 取消订阅
    def __unsubscribe_trans(self, _codes):
        sh, sz = self.__split_codes(_codes)
        logger_local_huaxin_l2_subscript.info(f"取消订阅上证:{sh}")
        sh_stock, sh_other, sz = self.__split_codes(_codes)
        logger_local_huaxin_l2_subscript.info(f"取消订阅上证:{sh_stock}")
        logger_local_huaxin_l2_subscript.info(f"取消订阅上证:{sh_other}")
        logger_local_huaxin_l2_subscript.info(f"取消订阅深证:{sz}")
        if sh:
        if sh_other:
            # 取消订阅逐笔成交
            self.__api.UnSubscribeTransaction(sh, lev2mdapi.TORA_TSTP_EXD_SSE)
            self.__api.UnSubscribeTransaction(sh_other, lev2mdapi.TORA_TSTP_EXD_SSE)
        if sh_stock:
            # 取消订阅逐笔成交
            self.__api.UnSubscribeNGTSTick(sh_stock, lev2mdapi.TORA_TSTP_EXD_SSE)
        if sz:
            self.__api.UnSubscribeTransaction(sz, lev2mdapi.TORA_TSTP_EXD_SZSE)
    def __subscribe_trans(self, _codes):
        sh, sz = self.__split_codes(_codes)
        logger_local_huaxin_l2_subscript.info(f"订阅上证:{sh}")
        sh_stock, sh_other, sz = self.__split_codes(_codes)
        logger_local_huaxin_l2_subscript.info(f"订阅上证:{sh_stock}")
        logger_local_huaxin_l2_subscript.info(f"订阅上证:{sh_other}")
        logger_local_huaxin_l2_subscript.info(f"订阅深证:{sz}")
        if sh:
        if sh_other:
            # 订阅逐笔成交
            result = self.__api.SubscribeTransaction(sh, lev2mdapi.TORA_TSTP_EXD_SSE)
            result = self.__api.SubscribeTransaction(sh_other, lev2mdapi.TORA_TSTP_EXD_SSE)
            logger_local_huaxin_l2_subscript.info(f"逐笔成交订阅结果sh:{result}")
        if sh_stock:
            # 订阅逐笔成交
            result = self.__api.SubscribeNGTSTick(sh_stock, lev2mdapi.TORA_TSTP_EXD_SSE)
            logger_local_huaxin_l2_subscript.info(f"逐笔成交订阅结果sh:{result}")
        if sz:
            result = self.__api.SubscribeTransaction(sz, lev2mdapi.TORA_TSTP_EXD_SZSE)
            logger_local_huaxin_l2_subscript.info(f"逐笔成交订阅结果sz:{result}")
    def __unsubscribe_market(self, _codes):
        sh, sz = self.__split_codes(_codes)
        if sh:
        sh_stock, sh_other, sz = self.__split_codes(_codes)
        if sh_other:
            # 取消订阅逐笔成交
            self.__api.UnSubscribeMarketData(sh, lev2mdapi.TORA_TSTP_EXD_SSE)
            self.__api.UnSubscribeXTSMarketData(sh, lev2mdapi.TORA_TSTP_EXD_SSE)
            self.__api.UnSubscribeMarketData(sh_other, lev2mdapi.TORA_TSTP_EXD_SSE)
            self.__api.UnSubscribeXTSMarketData(sh_other, lev2mdapi.TORA_TSTP_EXD_SSE)
        if sh_stock:
            self.__api.UnSubscribeMarketData(sh_stock, lev2mdapi.TORA_TSTP_EXD_SSE)
            self.__api.UnSubscribeNGTSTick(sh_stock, lev2mdapi.TORA_TSTP_EXD_SSE)
        if sz:
            self.__api.UnSubscribeMarketData(sz, lev2mdapi.TORA_TSTP_EXD_SZSE)
    def __subscribe_market(self, _codes):
        sh, sz = self.__split_codes(_codes)
        if sh:
        sh_stock, sh_other, sz = self.__split_codes(_codes)
        if sh_stock:
            # 订阅逐笔成交
            result = self.__api.SubscribeMarketData(sh, lev2mdapi.TORA_TSTP_EXD_SSE)
            result = self.__api.SubscribeMarketData(sh_stock, lev2mdapi.TORA_TSTP_EXD_SSE)
            logger_local_huaxin_l2_subscript.info(f"逐笔成交订阅结果sh:{result}")
            result = self.__api.SubscribeXTSMarketData(sh, lev2mdapi.TORA_TSTP_EXD_SSE)
            result = self.__api.SubscribeXTSMarketData(sh_stock, lev2mdapi.TORA_TSTP_EXD_SSE)
            logger_local_huaxin_l2_subscript.info(f"逐笔成交订阅结果sh:{result}")
        if sh_other:
            # 订阅逐笔成交
            result = self.__api.SubscribeMarketData(sh_other, lev2mdapi.TORA_TSTP_EXD_SSE)
            logger_local_huaxin_l2_subscript.info(f"逐笔成交订阅结果sh:{result}")
            result = self.__api.SubscribeXTSMarketData(sh_other, lev2mdapi.TORA_TSTP_EXD_SSE)
            logger_local_huaxin_l2_subscript.info(f"逐笔成交订阅结果sh:{result}")
        if sz:
            result = self.__api.SubscribeMarketData(sz, lev2mdapi.TORA_TSTP_EXD_SZSE)
@@ -215,6 +243,20 @@
        except Exception as e:
            logging.exception(e)
    def OnRspSubNGTSTick(self, pSpecificSecurity, pRspInfo, nRequestID, bIsLast):
        if pRspInfo["ErrorID"] == 0:
            self.subscripted_transaction_codes.add(pSpecificSecurity['SecurityID'])
            logger_local_huaxin_l2_subscript.info(f"成交订阅成功:{pSpecificSecurity['SecurityID']}")
    def OnRspUnSubNGTSTick(self, pSpecificSecurity, pRspInfo, nRequestID, bIsLast):
        try:
            code = pSpecificSecurity['SecurityID']
            self.subscripted_transaction_codes.discard(code)
            logger_local_huaxin_l2_subscript.info(f"成交取消订阅:{pSpecificSecurity['SecurityID']}")
        except Exception as e:
            logging.exception(e)
    def OnRspSubMarketData(self, pSpecificSecurity, pRspInfo, nRequestID, bIsLast):
        if pRspInfo["ErrorID"] == 0:
            self.subscripted_market_codes.add(pSpecificSecurity['SecurityID'])
@@ -244,6 +286,25 @@
                        (pTransaction['SecurityID'], pTransaction['TradePrice'], pTransaction['TradeTime']))
        except Exception as e:
            logger_local_huaxin_l2_error.exception(e)
    def OnRtnNGTSTick(self, pTick):
        try:
            # 输出逐笔成交数据
            if pTick['TickType'] == b'T':
                item = {"SecurityID": pTick['SecurityID'], "TradePrice": pTick['Price'],
                        "TradeVolume": pTick['Volume'],
                        "OrderTime": pTick['TickTime'], "MainSeq": pTick['MainSeq'],
                        "SubSeq": pTick['SubSeq'], "BuyNo": pTick['BuyNo'],
                        "SellNo": pTick['SellNo'],
                        "ExecType": '1'}
                huaxin_l2_log.info(logger_local_huaxin_l2_transaction, f"{item}")
                if self.buyStrategyDataManager.add_transaction_info(item):
                    l2_transaction_price_queue.put_nowait(
                        (pTick['SecurityID'], pTick['Price'], pTick['TickTime']))
        except Exception as e:
            logger_local_huaxin_l2_error.exception(e)
    def OnRtnMarketData(self, pDepthMarketData, FirstLevelBuyNum, FirstLevelBuyOrderVolumes, FirstLevelSellNum,
                        FirstLevelSellOrderVolumes):
@@ -278,7 +339,8 @@
            market_call_back_queue.put_nowait((pDepthMarketData['SecurityID'], pDepthMarketData['LastPrice'], rate,
                                               pDepthMarketData['BidPrice1'], pDepthMarketData['BidVolume1'],
                                               pDepthMarketData['TotalVolumeTrade'], pDepthMarketData['TotalBidVolume'],
                                               pDepthMarketData['TotalAskVolume'], pDepthMarketData['PreClosePrice'], pDepthMarketData['DataTimeStamp']))
                                               pDepthMarketData['TotalAskVolume'], pDepthMarketData['PreClosePrice'],
                                               pDepthMarketData['DataTimeStamp']))
            code = pDepthMarketData['SecurityID']
            if code.find("00") == 0 or code.find("60") == 0:
                if rate >= 0.05:
@@ -296,7 +358,8 @@
        except Exception as e:
            logger_debug.exception(e)
    def OnRtnXTSMarketData(self, pMarketData, FirstLevelBuyNum, FirstLevelBuyOrderVolumes, FirstLevelSellNum, FirstLevelSellOrderVolumes):
    def OnRtnXTSMarketData(self, pMarketData, FirstLevelBuyNum, FirstLevelBuyOrderVolumes, FirstLevelSellNum,
                           FirstLevelSellOrderVolumes):
        d = {"dataTimeStamp": pMarketData['DataTimeStamp'], "securityID": pMarketData['SecurityID'],
             "preClosePrice": pMarketData['PreClosePrice'],
             "lastPrice": pMarketData['LastPrice'],
lev2mdapi.py
@@ -1,4 +1,3 @@
# -*- coding: utf-8 -*-
# This file was automatically generated by SWIG (http://www.swig.org).
# Version 4.0.2
#
utils/tool.py
@@ -344,6 +344,15 @@
        return MARKET_TYPE_UNKNOWN
def is_stock(code):
    """
    是否是股票
    :param code:
    :return:
    """
    return code.find("00") == 0 or code.find("30") == 0 or code.find("60") == 0 or code.find("68") == 0
def get_limit_up_rate(code):
    # 获取涨停倍数
    if code.find("00") == 0 or code.find("60") == 0:
@@ -368,6 +377,7 @@
    limit_up_price = to_price(decimal.Decimal(str(pre_close_price)) * decimal.Decimal(f"{get_limit_up_rate(code)}"))
    return limit_up_price
# 将时间戳s格式化
def to_time_str(timestamp_second, format_="%H:%M:%S"):
    return datetime.datetime.fromtimestamp(timestamp_second).strftime(format_)