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
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()
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))
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
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
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
def __init__(self, url, loop=None, close_timeout=5): self.url = url self.loop = loop self.close_timeout = close_timeout self.logger = get_log()
def __init__(self, db_path): self.db = rocksdb.DB(db_path, rocksdb.Options(create_if_missing=False), read_only=True) self.logger = get_log()
def __init__(self): self.logger = get_log()
# -*- 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线频率对应的分钟数
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()
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")