コード例 #1
0
ファイル: base.py プロジェクト: sevencrime/marketTest
    def __init__(self, is_subscribe_record=False):
        if not SqliteDB.__first_init:
            # 先创建目录
            if not os.path.exists(db_save_folder):
                os.makedirs(db_save_folder)

            self.common = Common()
            self.logger = get_log()
            self.conn = sqlite3.connect(dbPath,
                                        check_same_thread=False,
                                        timeout=15)
            currentDayTimeStampInfo = self.common.getCurrentDayTimeStampInfo()
            self.todayBeginTimeStamp = currentDayTimeStampInfo[
                'todayBeginTimeStamp']
            self.todayEndTimeStamp = currentDayTimeStampInfo[
                'todayEndTimeStamp']
            self.is_subscribe_record = is_subscribe_record
            self.assemble_num = sql_assemble_num
            self.assemble_sql = ''
            self.assemble_float_num = 0
            self.transaction_num = sql_transaction_num
            self.transaction_float_num = 0
            # db_file = SETUP_DIR + "\\zmq_py3\\zmq_save_files\\db\\SIT_market_test.db"
            # if not os.path.exists(db_file):
            self.create_table()
            SqliteDB.__first_init = True
コード例 #2
0
 def __init__(self):
     super(TimerTask, self).__init__()
     self.logger = get_log("timerTask")
     self.max_instances = 20  # 最大并发数
     # self.scheduler = BlockingScheduler()
     self.scheduler = AsyncIOScheduler()
     self.common = Common()
コード例 #3
0
 def __init__(self, methodName='runTest'):
     super().__init__(methodName)
     self.logger = get_log()
     self.http = MarketHttpClient()
     self.market_token = self.http.get_market_token(
         self.http.get_login_token(phone=login_phone,
                                   pwd=login_pwd,
                                   device_id=login_device_id))
コード例 #4
0
ファイル: GlobalMap.py プロジェクト: sevencrime/marketTest
class GlobalMap:
    # 拼装成字典构造全局变量  借鉴_map  包含变量的增删改查
    logger = get_log()

    _map = {}

    def set_map(self, key, value):
        if (isinstance(value, dict)):
            # 把dict转为str
            value = json.dumps(value)
        self._map[key] = value

    def set_List(self, key, value):
        if (isinstance(value, list)):
            self._map[key] = value

    def set_value(self, **keys):
        try:
            for key_, value_ in keys.items():
                self._map[key_] = str(value_)
                # self.logger.debug(key_+":"+str(value_))
        except BaseException as msg:
            self.logger.error(msg)
            raise msg

    def set_bool(self, **keys):
        try:
            for key_, value_ in keys.items():
                self._map[key_] = value_
                # self.logger.debug(key_+":"+str(value_))
        except BaseException as msg:
            self.logger.error(msg)
            raise msg

    def del_map(self, key):
        try:
            # 删除变量
            # del语句作用在变量上,而不是数据对象上。
            del self._map[key]
            return self._map
        except KeyError:
            self.logger.error("key:'" + str(key) + "'  不存在")

    def get_value(self, *args):
        try:
            dic = {}
            for key in args:
                if len(args) == 1:
                    dic = self._map[key]
                    # self.logger.debug(key+":"+str(dic))
                elif len(args) == 1 and args[0] == 'all':
                    dic = self._map
                else:
                    dic[key] = self._map[key]
            return dic
        except KeyError:
            self.logger.warning("key:'" + str(key) + "'  不存在")
            return None
コード例 #5
0
 def __init__(self, methodName='runTest', check_json_list=None, is_before_data=False, sub_time=None, start_time=None, instr_code=None, exchange=None, peroid_type=None):
     super().__init__(methodName)
     self.check_json_list = check_json_list
     self.is_before_data = is_before_data
     self.sub_time = sub_time
     self.start_time = start_time
     self.instr_code = instr_code
     self.exchange = exchange
     self.peroid_type = peroid_type
     self.logger = get_log()
     self.tolerance_time = 30000
コード例 #6
0
ファイル: base_sql.py プロジェクト: rage-vampire/Python
 def __init__(self, is_subscribe_record=False):
     self.conn = sqlite3.connect(dbPath, check_same_thread=False)
     self.common = Common()
     self.logger = get_log()
     currentDayTimeStampInfo = self.common.getCurrentDayTimeStampInfo()
     self.todayBeginTimeStamp = currentDayTimeStampInfo['todayBeginTimeStamp']
     self.todayEndTimeStamp = currentDayTimeStampInfo['todayEndTimeStamp']
     self.is_subscribe_record = is_subscribe_record
     self.assemble_num = 100  # sqlite单条插入数值最多为500个
     self.assemble_sql = ''
     self.assemble_float_num = 0
     self.transaction_num = 1  # 为了减少执行sql的次数,此处优化为使用事务一次性批量插入: 此参数表示事务里执行的sql命令个数
     self.transaction_float_num = 0
コード例 #7
0
ファイル: ws_client.py プロジェクト: sevencrime/marketTest
 def __init__(self, url, loop=None, close_timeout=5):
     self.url = url
     self.loop = loop
     self.close_timeout = close_timeout
     self.logger = get_log()
コード例 #8
0
ファイル: base.py プロジェクト: rage-vampire/Python
 def __init__(self, db_path):
     self.db = rocksdb.DB(db_path,
                          rocksdb.Options(create_if_missing=False),
                          read_only=True)
     self.logger = get_log()
コード例 #9
0
 def __init__(self):
     self.logger = get_log()
コード例 #10
0
ファイル: pb_method.py プロジェクト: sevencrime/marketTest
# -*- coding: utf-8 -*-
# !/usr/bin/python
# @Author: WX
# @Create Time: 2020/6/22
# @Software: PyCharm


from pb_files.quote_type_def_pb2 import *
from pb_files.common_type_def_pb2 import *
from common.test_log.ed_log import get_log

logger = get_log()

def k_type_convert(input_str):
    if isinstance(input_str, int):
        return input_str
    try:
        return KLinePeriodType.Value(input_str)
    except:
        logger.error('Error klinePeriodType: {}'.format(input_str))


def exchange_convert(input_str):
    try:
        return ExchangeType.Value(input_str)
    except:
        logger.error('Error exchange: {}'.format(input_str))


def k_type_min(peroid):
    # 返回K线频率对应的分钟数
コード例 #11
0
 def __init__(self, host=redis_host, port=redis_port):
     self.host = host
     self.port = port
     self.conn = self.__connectPika(self.host, self.port)
     self.logger = get_log()
     self.common = Common()
コード例 #12
0
class Test_Comtrast_PRD():

    common = Common()
    logger = get_log()
    market_token = None

    @pytest.mark.parametrize("exchange, code", [
        ("SEHK", "00700"),
        ("SEHK", SEHK_indexCode1),
        (ASE_exchange, ASE_code1),
        (NASDAQ_exchange, NASDAQ_code1),
        (NYSE_exchange, NYSE_code1),
        (HK_exchange, HK_main1),
        (NYMEX_exchange, NYMEX_code1),
    ])
    def test_contrast_StartChartDataReq(self, SZ_api, HK_api, exchange, code):
        """订阅手机图表数据(手机专用)--订阅一个港股,frequence=4"""
        # exchange = SEHK_exchange
        # code = "00700"

        exchange = exchange
        code = code

        frequence = None
        start_time_stamp = int(time.time() * 1000)

        loop = asyncio.get_event_loop()
        asyncio.set_event_loop(loop)
        loop.run_until_complete(
            future=SZ_api.LoginReq(token=self.market_token,
                                   start_time_stamp=start_time_stamp,
                                   frequence=frequence))
        asyncio.run_coroutine_threadsafe(SZ_api.hearbeat_job(), loop)
        self.logger.debug(u'订阅深圳--手机图表')
        sz_rsp_list = loop.run_until_complete(
            future=SZ_api.StartChartDataReqApi(
                exchange, code, start_time_stamp, recv_num=1))

        app_rsp = sz_rsp_list[0]
        assert self.common.searchDicKV(app_rsp, 'retCode') == 'SUCCESS'
        sz_basic_json_list = app_rsp['basicData']
        sz_before_snapshot_json_list = app_rsp['snapshot']
        sz_before_orderbook_json_list = []
        if self.common.searchDicKV(sz_before_snapshot_json_list,
                                   "dataType") != "EX_INDEX":
            sz_before_orderbook_json_list = app_rsp['orderbook']

        del sz_basic_json_list["commonInfo"]
        del sz_before_snapshot_json_list["commonInfo"]

        loop.run_until_complete(
            future=HK_api.LoginReq(token=self.market_token,
                                   start_time_stamp=start_time_stamp,
                                   frequence=frequence))
        asyncio.run_coroutine_threadsafe(HK_api.hearbeat_job(), loop)
        self.logger.debug(u'订阅香港--手机图表')
        hk_rsp_list = loop.run_until_complete(
            future=HK_api.StartChartDataReqApi(
                exchange, code, start_time_stamp, recv_num=1))

        app_rsp = hk_rsp_list[0]
        assert self.common.searchDicKV(app_rsp, 'retCode') == 'SUCCESS'
        hk_basic_json_list = app_rsp['basicData']
        hk_before_snapshot_json_list = app_rsp['snapshot']
        hk_before_orderbook_json_list = []
        if self.common.searchDicKV(hk_before_snapshot_json_list,
                                   "dataType") != "EX_INDEX":
            hk_before_orderbook_json_list = app_rsp['orderbook']

        del hk_basic_json_list["commonInfo"]
        del hk_before_snapshot_json_list["commonInfo"]

        assert sz_basic_json_list == hk_basic_json_list
        assert sz_before_snapshot_json_list == hk_before_snapshot_json_list
        if sz_before_orderbook_json_list or hk_before_orderbook_json_list:
            del sz_before_orderbook_json_list["commonInfo"]
            del hk_before_orderbook_json_list["commonInfo"]
            assert sz_before_orderbook_json_list == hk_before_orderbook_json_list

    @pytest.mark.parametrize("exchange, code", [
        ("SEHK", "00700"),
        ("SEHK", SEHK_indexCode1),
        (ASE_exchange, ASE_code1),
        (NASDAQ_exchange, NASDAQ_code1),
        (NYSE_exchange, NYSE_code1),
        (HK_exchange, HK_main1),
        (NYMEX_exchange, NYMEX_code1),
    ])
    def test_contrast_QueryKLineMinMsgReqApi(self, SZ_api, HK_api, exchange,
                                             code):
        """分时查询--查询并订阅港股的分时数据: isSubKLineMin = True"""
        frequence = 100
        isSubKLineMin = False
        exchange = exchange
        code = code

        query_type = QueryKLineMsgType.UNKNOWN_QUERY_KLINE  # app 订阅服务该字段无意义
        direct = QueryKLineDirectType.WITH_BACK  # app 订阅服务该字段无意义
        start = 0  # app 订阅服务该字段无意义
        end = 0  # app 订阅服务该字段无意义
        vol = 0  # app 订阅服务该字段无意义
        start_time_stamp = int(time.time() * 1000)

        loop = asyncio.get_event_loop()
        asyncio.set_event_loop(loop)
        loop.run_until_complete(
            future=SZ_api.LoginReq(token=self.market_token,
                                   start_time_stamp=start_time_stamp,
                                   frequence=frequence))
        asyncio.run_coroutine_threadsafe(SZ_api.hearbeat_job(), loop)
        self.logger.debug(u'查询深圳分时数据')
        final_rsp = loop.run_until_complete(
            future=SZ_api.QueryKLineMinMsgReqApi(
                isSubKLineMin, exchange, code, query_type, direct, start, end,
                vol, start_time_stamp))

        sz_query_kline_min_rsp_list = final_rsp['query_kline_min_rsp_list'][0]

        assert self.common.searchDicKV(sz_query_kline_min_rsp_list,
                                       'retCode') == 'SUCCESS'

        loop.run_until_complete(
            future=HK_api.LoginReq(token=self.market_token,
                                   start_time_stamp=start_time_stamp,
                                   frequence=frequence))
        asyncio.run_coroutine_threadsafe(HK_api.hearbeat_job(), loop)
        self.logger.debug(u'查询深圳分时数据')
        final_rsp = loop.run_until_complete(
            future=HK_api.QueryKLineMinMsgReqApi(
                isSubKLineMin, exchange, code, query_type, direct, start, end,
                vol, start_time_stamp))

        hk_query_kline_min_rsp_list = final_rsp['query_kline_min_rsp_list'][0]

        assert self.common.searchDicKV(hk_query_kline_min_rsp_list,
                                       'retCode') == 'SUCCESS'

        assert sz_query_kline_min_rsp_list.get(
            "data") == hk_query_kline_min_rsp_list.get("data")

    @pytest.mark.parametrize("exchange, code", [
        ("SEHK", "00700"),
        ("SEHK", SEHK_indexCode1),
        (ASE_exchange, ASE_code1),
        (NASDAQ_exchange, NASDAQ_code1),
        (NYSE_exchange, NYSE_code1),
        (HK_exchange, HK_main1),
        (NYMEX_exchange, NYMEX_code1),
    ])
    def test_contrast_QueryFiveDaysKLineMinReqApi(self, SZ_api, HK_api,
                                                  exchange, code):
        """五日分时查询, 查询并订阅数据: isSubKLineMin = True"""
        frequence = 100
        isSubKLineMin = False
        exchange = exchange
        code = code
        start = None  # app 订阅服务该字段无意义
        start_time_stamp = int(time.time() * 1000)

        loop = asyncio.get_event_loop()
        asyncio.set_event_loop(loop)
        # 深圳
        loop.run_until_complete(
            future=SZ_api.LoginReq(token=self.market_token,
                                   start_time_stamp=start_time_stamp,
                                   frequence=frequence))
        asyncio.run_coroutine_threadsafe(SZ_api.hearbeat_job(), loop)
        final_rsp = loop.run_until_complete(
            future=SZ_api.QueryFiveDaysKLineMinReqApi(
                isSubKLineMin, exchange, code, start, start_time_stamp))
        sz_query_5day_klinemin_rsp_list = final_rsp[
            'query_5day_klinemin_rsp_list'][0]
        assert self.common.searchDicKV(sz_query_5day_klinemin_rsp_list,
                                       'retCode') == 'SUCCESS'

        # 香港
        loop.run_until_complete(
            future=HK_api.LoginReq(token=self.market_token,
                                   start_time_stamp=start_time_stamp,
                                   frequence=frequence))
        asyncio.run_coroutine_threadsafe(HK_api.hearbeat_job(), loop)
        final_rsp = loop.run_until_complete(
            future=HK_api.QueryFiveDaysKLineMinReqApi(
                isSubKLineMin, exchange, code, start, start_time_stamp))
        hk_query_5day_klinemin_rsp_list = final_rsp[
            'query_5day_klinemin_rsp_list'][0]
        assert self.common.searchDicKV(hk_query_5day_klinemin_rsp_list,
                                       'retCode') == 'SUCCESS'

        assert sz_query_5day_klinemin_rsp_list.get(
            "hk_query_5day_klinemin_rsp_list"
        ) == hk_query_5day_klinemin_rsp_list.get(
            "hk_query_5day_klinemin_rsp_list")

    @pytest.mark.parametrize("exchange, code", [
        ("SEHK", "00700"),
        ("SEHK", SEHK_indexCode1),
        (ASE_exchange, ASE_code1),
        (NASDAQ_exchange, NASDAQ_code1),
        (NYSE_exchange, NYSE_code1),
        (HK_exchange, HK_main1),
        (NYMEX_exchange, NYMEX_code1),
    ])
    def test_contrast_QueryKLineMsgReqApi(self, SZ_api, HK_api, exchange,
                                          code):
        """K线查询港股: 按BY_DATE_TIME方式查询, 1分K, 前一小时的数据, 并订阅K线数据"""
        frequence = None
        isSubKLine = False
        exchange = SEHK_exchange
        code = SEHK_code1
        peroid_type = KLinePeriodType.MINUTE
        query_type = QueryKLineMsgType.BY_VOL
        direct = QueryKLineDirectType.WITH_FRONT
        start_time_stamp = int(time.time() * 1000)
        start = start_time_stamp
        end = None
        vol = 80

        loop = asyncio.get_event_loop()
        asyncio.set_event_loop(loop)
        loop.run_until_complete(
            future=SZ_api.LoginReq(token=self.market_token,
                                   start_time_stamp=start_time_stamp,
                                   frequence=frequence))
        asyncio.run_coroutine_threadsafe(SZ_api.hearbeat_job(), loop)
        self.logger.debug(u'查询K线数据,并检查返回结果')
        final_rsp = loop.run_until_complete(future=SZ_api.QueryKLineMsgReqApi(
            isSubKLine, exchange, code, peroid_type, query_type, direct, start,
            end, vol, start_time_stamp))
        sz_query_kline_rsp_list = final_rsp['query_kline_rsp_list']
        assert self.common.searchDicKV(sz_query_kline_rsp_list[0],
                                       'retCode') == 'SUCCESS'

        loop.run_until_complete(
            future=HK_api.LoginReq(token=self.market_token,
                                   start_time_stamp=start_time_stamp,
                                   frequence=frequence))
        asyncio.run_coroutine_threadsafe(HK_api.hearbeat_job(), loop)
        self.logger.debug(u'查询K线数据,并检查返回结果')
        final_rsp = loop.run_until_complete(future=HK_api.QueryKLineMsgReqApi(
            isSubKLine, exchange, code, peroid_type, query_type, direct, start,
            end, vol, start_time_stamp))
        hk_query_kline_rsp_list = final_rsp['query_kline_rsp_list']
        assert self.common.searchDicKV(hk_query_kline_rsp_list[0],
                                       'retCode') == 'SUCCESS'

        assert sz_query_kline_rsp_list[0].get(
            "kData") == hk_query_kline_rsp_list[0].get("kData")

    @pytest.mark.parametrize("exchange, code", [
        ("SEHK", "00700"),
        (ASE_exchange, ASE_code1),
        (NASDAQ_exchange, NASDAQ_code1),
        (NYSE_exchange, NYSE_code1),
        (HK_exchange, HK_main1),
        (NYMEX_exchange, NYMEX_code1),
    ])
    def test_contrast_QueryTradeTickMsgReqApi(self, SZ_api, HK_api, exchange,
                                              code):
        """
        查询逐笔成交--查询5分钟的逐笔成交数据, 并订阅逐笔成交
        """
        frequence = 100
        isSubTrade = False
        exchange = exchange
        code = code
        type = QueryKLineMsgType.BY_VOL
        direct = QueryKLineDirectType.WITH_FRONT
        start_time_stamp = int(time.time() * 1000)
        start_time = start_time_stamp
        end_time = None
        vol = 100

        loop = asyncio.get_event_loop()
        asyncio.set_event_loop(loop)

        loop.run_until_complete(
            future=SZ_api.LoginReq(token=self.market_token,
                                   start_time_stamp=start_time_stamp,
                                   frequence=frequence))
        asyncio.run_coroutine_threadsafe(SZ_api.hearbeat_job(), loop)
        self.logger.debug(u'逐笔成交查询,并检查返回结果')
        _start = time.time()
        final_rsp = loop.run_until_complete(
            future=SZ_api.QueryTradeTickMsgReqApi(
                isSubTrade, exchange, code, type, direct, start_time, end_time,
                vol, start_time_stamp))
        self.logger.debug("查询回包时间 : {}".format(time.time() - _start))
        sz_query_trade_tick_rsp_list = final_rsp['query_trade_tick_rsp_list']

        assert self.common.searchDicKV(sz_query_trade_tick_rsp_list[0],
                                       'retCode') == 'SUCCESS'

        loop.run_until_complete(
            future=HK_api.LoginReq(token=self.market_token,
                                   start_time_stamp=start_time_stamp,
                                   frequence=frequence))
        asyncio.run_coroutine_threadsafe(HK_api.hearbeat_job(), loop)
        self.logger.debug(u'逐笔成交查询,并检查返回结果')
        final_rsp = loop.run_until_complete(
            future=HK_api.QueryTradeTickMsgReqApi(
                isSubTrade, exchange, code, type, direct, start_time, end_time,
                vol, start_time_stamp))
        hk_query_trade_tick_rsp_list = final_rsp['query_trade_tick_rsp_list']

        assert self.common.searchDicKV(hk_query_trade_tick_rsp_list[0],
                                       'retCode') == 'SUCCESS'

        assert sz_query_trade_tick_rsp_list[0].get(
            "tickData") == hk_query_trade_tick_rsp_list[0].get("tickData")