Esempio n. 1
0
    def __init__(self, thread_num=2, *args, **kwargs):
        self.thread_num = thread_num
        self._queue = queue.Queue(maxsize=200)
        self.api_no_connection = TdxHq_API()
        self._api_worker = Thread(
            target=self.api_worker, args=(), name='API Worker')
        self._api_worker.start()

        self.executor = ThreadPoolExecutor(self.thread_num)
Esempio n. 2
0
    def __init__(self, **kwargs):

        try:
            default = settings.get('SERVER').get('HQ')[0]
            self.bestip = config.get('BESTIP').get('HQ', default)
        except ValueError:
            self.config = None

        self.client = TdxHq_API(**kwargs)
Esempio n. 3
0
def request_data(stklist, parse_one_result, ip, port):
    """请求失败将抛出异常"""
    api = TdxHq_API()
    hku_check(api.connect(ip, port),
              'Failed connect tdx ({}:{})!'.format(ip, port))
    quotes_list = api.get_security_quotes(stklist)
    result = [parse_one_result(q)
              for q in quotes_list] if quotes_list is not None else []
    return [r for r in result if r is not None]
Esempio n. 4
0
    def fetch_bars(self, typ: SeType, code, start, end, freq):
        try:
            tdxApi = TdxHq_API()
            ex_nbr = map_exchange_to_tdx_number[Exchange.from_type_and_code(typ, code)]
            if typ == SeType.Stock or typ == SeType.ETF:
                tdx_fetch_func = tdxApi.get_security_bars
            elif typ == SeType.Index:
                tdx_fetch_func = tdxApi.get_index_bars
            else:
                raise Exception('Unsupported se type')

            #timeout is in seconds.
            with tdxApi.connect(self.server['ip'], self.server['port'], time_out=3):
                frequence = map_freq_to_tdx_number[freq][0]
                days_between = date_time_utils.Date.from_str(end).delta_to(start).days + 1
                if days_between > MAX_DAYS:
                    days_between = MAX_DAYS
                max_count = int(map_freq_to_tdx_number[freq][1] * days_between)
                tmp_list = []
                n_start = 0
                while n_start < max_count:
                    fetch_size = min(max_count - n_start, BATCH_SIZE)
                    tmp_res = tdx_fetch_func(
                        frequence,
                        ex_nbr,
                        code, n_start, fetch_size
                    )
                    if tmp_res is None or len(tmp_res) < 1:
                        break
                    n_start += len(tmp_res)
                    tmp_list.extend(tmp_res)
                if n_start == 0:
                    print('No rows fetched for {}'.format(code))
                # print('total fetched rows for {}: {}'.format(code, n_start))
                data = tdxApi.to_df(tmp_list)

                if len(data) < 1:
                    return None
                data = data[data['open'] != 0]
                cols_to_drop = ['year', 'month', 'day']

                if freq.is_minutes():
                    data = data.assign(datetime=data['datetime'].apply(lambda x: str(x[0:19])),
                                       date=data['datetime'].apply(lambda x: str(x[0:10])),
                                       code=str(code)) \
                        .set_index('datetime', drop=True, inplace=False) \
                        .drop(cols_to_drop, axis=1)
                else:
                    cols_to_drop.extend(['datetime', 'hour', 'minute'])
                    data = data.assign(datetime=data['datetime'],
                                       date=data['datetime'].apply(lambda x: str(x[0:10])),
                                       code=str(code)) \
                        .set_index('date', drop=True, inplace=False) \
                        .drop(cols_to_drop, axis=1)
                return data
        except Exception as e:
            print('exception caught: {}'.format(e))
Esempio n. 5
0
 def __hq_tick(self, code):
     api = TdxHq_API()
     ip, port = self.__hq.get()
     with api.connect(ip, port):
         df = api.get_security_quotes(code)
         if df is not None:
             df = api.to_df(df)
         api.disconnect()
         self.__hq.put((ip, port))
         return df
Esempio n. 6
0
 def __init__(self, thread_num=3, *args, **kwargs):
     self.thread_num = thread_num
     self._queue = queue.Queue(maxsize=thread_num*2)
     self.api_no_connection = TdxHq_API()
     self._api_worker = Thread(
          target=self.api_worker, args=(), name='API Worker')
     self.executor = ThreadPoolExecutor(self.thread_num)
     
     self._timer=LoopTimer(3,self.__test_connected)
     self._timer.start()
Esempio n. 7
0
 def __init__(self,ip="192.168.0.106",online=True):
     self.mongo = MongoDB(ip=ip)
     self.api = TdxHq_API(heartbeat=True)
     self.TDX_IP_SETS = STOCK_IP_SETS
     self.collection = "BASIC_INFO"
     self.file_incon = FILE_INCON
     self.file_tdxhy = FILE_TDXHY
     self.file_tdxzs = FILE_TDXZS
     
     self.online = online #版本库获取最新文件
Esempio n. 8
0
def get_company_info():
    api = TdxHq_API()
    if api.connect('119.147.212.81', 7709):
        print(api.get_company_info_category(TDXParams.MARKET_SZ,
                                            '000001'))  #查询公司信息目录,参数:市场代码, 股票代码
        api.get_company_info_content(0, '000001',
                                     os.getcwd() + "/tdx_file/" + '000001.txt',
                                     0, 100)  #读取公司信息详情,参数文件路径不知干什么
        print(api.get_finance_info(0, '000001'))  #读取财务信息
        api.disconnect()
Esempio n. 9
0
def multiple_task(code, timeout=100):
    api = TdxHq_API()
    api.connect('115.238.90.165', 7709)
    market = __select_market_code(code)
    res = api.get_security_bars(1, market, code, 0, 800)
    
    re=[changer(x,code) for x in res]
    #print(re)
    #res=api.get_security_quotes([(__select_market_code(code), code)])
    return re
Esempio n. 10
0
        def __init__(self, *args, **kwargs):
            self.thread_num = kwargs.pop('thread_num', 4)
            self.ip = kwargs.pop('ip', '14.17.75.71')
            self.executor = ThreadPoolExecutor(self.thread_num)

            self.queue = queue.Queue(self.thread_num)
            for i in range(self.thread_num):
                api = TdxHq_API(args, kwargs)
                api.connect(self.ip)
                self.queue.put(api)
Esempio n. 11
0
def ping(ip):
    api = TdxHq_API()
    __time1 = datetime.datetime.now()
    try:
        with api.connect(ip, 7709):
            if len(api.get_security_list(0, 1)) > 800:
                return datetime.datetime.now() - __time1
    except:
        print('Bad REPSONSE %s' % ip)
        return datetime.timedelta(9, 9, 0)
Esempio n. 12
0
def original_quotes():
    api = TdxHq_API()
    api.connect(best_ip)
    now = datetime.now()
    #data=api.get_security_quotes((get_market(x), x))
    #print(data)
    data = [api.get_security_quotes([(get_market(x), x) for x in code[80 * pos:80 * (pos + 1)]]) for pos in range(int(len(code) / 80) + 1)]

    
    return data[0:-1]
Esempio n. 13
0
def api(retry_count=3):
    for _ in range(retry_count):
        try:
            api = TdxHq_API(heartbeat=True)
            api.connect(ct._get_server(), ct.T_PORT)
        except Exception as e:
            print(e)
        else:
            return api
    raise IOError(ct.NETWORK_URL_ERROR_MSG)
Esempio n. 14
0
 def __init__(self, thread_num=2, timeout=1, sleep_time=1, *args, **kwargs):
     super().__init__(name='QATdxExecutor')
     self.thread_num = thread_num
     self._queue = queue.Queue(maxsize=200)
     self.api_no_connection = TdxHq_API()
     self._api_worker = Thread(
         target=self.api_worker, args=(), name='API Worker')
     self._api_worker.start()
     self.timeout = timeout
     self.executor = ThreadPoolExecutor(self.thread_num)
     self.sleep_time = sleep_time
Esempio n. 15
0
 def __init__(self, db_interface: DBInterface = None, host: str = None, port: int = None):
     super().__init__(db_interface)
     if host is None:
         conf = get_global_config()
         host = conf['tdx_server']['host']
         port = conf['tdx_server']['port']
     self.api = TdxHq_API()
     self.host = host
     self.port = port
     self._factor_param = utils.load_param('tdx_param.json')
     self.stock_ticker = StockTickers(db_interface)
Esempio n. 16
0
def QA_fetch_get_stock_realtime(code=['000001', '000002'], ip=best_ip, port=7709):
    api = TdxHq_API()
    __data = pd.DataFrame()
    with api.connect(ip, port):
        code = [code] if type(code) is str else code
        for id_ in range(int(len(code) / 80) + 1):
            __data = __data.append(api.to_df(api.get_security_quotes(
                [(__select_market_code(x), x) for x in code[80 * id_:80 * (id_ + 1)]])))
            __data['datetime'] = datetime.datetime.now()
        data = __data[['datetime', 'code', 'open', 'high', 'low', 'price']]
        return data.set_index('code', drop=False, inplace=False)
Esempio n. 17
0
 def api_worker(self):                
     for item in stock_ip_list:
         
         _sec = self._test_speed(ip=item['ip'], port=item['port'],time_out=0.5)
         if _sec < 0.15:
           try:
             self._queue.put(TdxHq_API(heartbeat=False,auto_retry=True).connect(
                 ip=item['ip'], port=item['port']))
             break
           except Exception:
             pass     
Esempio n. 18
0
def get_block_info():
    api = TdxHq_API()
    if api.connect('119.147.212.81', 7709):
        data = api.get_and_parse_block_info("block.dat")  #一般板块
        #print(api.get_and_parse_block_info("block_zs.dat"))  #指数板块
        #print(api.get_and_parse_block_info("block_fg.dat"))  #风格板块
        #print(api.get_and_parse_block_info("block_gn.dat"))  #概念板块
        datadf = api.to_df(data)
        print(datadf)

        api.disconnect()
Esempio n. 19
0
def get_kline_data():
    api = TdxHq_API()
    if api.connect('119.147.212.81', 7709):
        data = api.get_security_bars(
            9, 0, '000001', 0,
            10)  # 返回普通list,五个参数分别为:category(k线),市场代码(深市),股票代码,开始时间,记录条数
        print(data)
        data = api.to_df(api.get_security_bars(9, 0, '000001', 0,
                                               10))  # 返回DataFrame
        print(data)
        api.disconnect()
Esempio n. 20
0
def QA_fetch_get_index_min(code, start, end, frequence='1min', ip=None, port=None):
    '指数分钟线'
    global best_ip
    if ip is None and port is None and best_ip['stock']['ip'] is None and best_ip['stock']['port'] is None:
        best_ip = select_best_ip()
        ip = best_ip['stock']['ip']
        port = best_ip['stock']['port']
    elif ip is None and port is None and best_ip['stock']['ip'] is not None and best_ip['stock']['port'] is not None:
        ip = best_ip['stock']['ip']
        port = best_ip['stock']['port']
    else:
        pass
    api = TdxHq_API()
    type_ = ''

    start_date = str(start)[0:10]
    today_ = datetime.date.today()
    lens = QA_util_get_trade_gap(start_date, today_)
    if str(frequence) in ['5', '5m', '5min', 'five']:
        frequence, type_ = 0, '5min'
        lens = 48 * lens
    elif str(frequence) in ['1', '1m', '1min', 'one']:
        frequence, type_ = 8, '1min'
        lens = 240 * lens
    elif str(frequence) in ['15', '15m', '15min', 'fifteen']:
        frequence, type_ = 1, '15min'
        lens = 16 * lens
    elif str(frequence) in ['30', '30m', '30min', 'half']:
        frequence, type_ = 2, '30min'
        lens = 8 * lens
    elif str(frequence) in ['60', '60m', '60min', '1h']:
        frequence, type_ = 3, '60min'
        lens = 4 * lens

    if lens > 20800:
        lens = 20800
    with api.connect(ip, port):

        if str(code)[0] in ['5', '1']:  # ETF
            data = pd.concat([api.to_df(api.get_security_bars(
                frequence, 1 if str(code)[0] in ['0', '8', '9', '5'] else 0, code, (int(lens / 800) - i) * 800, 800)) for i in range(int(lens / 800) + 1)], axis=0)
        else:
            data = pd.concat([api.to_df(api.get_index_bars(
                frequence, 1 if str(code)[0] in ['0', '8', '9', '5'] else 0, code, (int(lens / 800) - i) * 800, 800)) for i in range(int(lens / 800) + 1)], axis=0)
        data = data\
            .assign(datetime=pd.to_datetime(data['datetime']), code=str(code))\
            .drop(['year', 'month', 'day', 'hour', 'minute'], axis=1, inplace=False)\
            .assign(code=code)\
            .assign(date=data['datetime'].apply(lambda x: str(x)[0:10]))\
            .assign(date_stamp=data['datetime'].apply(lambda x: QA_util_date_stamp(x)))\
            .assign(time_stamp=data['datetime'].apply(lambda x: QA_util_time_stamp(x)))\
            .assign(type=type_).set_index('datetime', drop=False, inplace=False)[start:end]
        # data
        return data.assign(datetime=data['datetime'].apply(lambda x: str(x)))
Esempio n. 21
0
    def __init__(self, *args, **kwargs):
        if kwargs.pop('best_ip', False):
            self.ip = self.best_ip
        else:
            self.ip = '14.17.75.71'

        self.ip = kwargs.pop('ip', '14.17.75.71')

        self.thread_num = kwargs.pop('thread_num', 1)

        if not PY2 and self.thread_num != 1:
            self.use_concurrent = True
        else:
            self.use_concurrent = False

        self.api = TdxHq_API(args, kwargs)
        if self.use_concurrent:
            self.apis = [
                TdxHq_API(args, kwargs) for i in range(self.thread_num)
            ]
            self.executor = ThreadPoolExecutor(self.thread_num)
Esempio n. 22
0
    def _test_speed(self, ip, port=7709):

        api = TdxHq_API(raise_exception=True, auto_retry=False)
        _time = datetime.datetime.now()
        try:
            with api.connect(ip, port):
                if len(api.get_security_list(0, 1)) > 800:
                    return (datetime.datetime.now() - _time).total_seconds()
                else:
                    return datetime.timedelta(9, 9, 0).total_seconds()
        except Exception as e:
            return datetime.timedelta(9, 9, 0).total_seconds()
Esempio n. 23
0
 def api_worker(self):
     data = []
     if self._queue.qsize() < 80:
         for item in info_ip_list:
             _sec = self._test_speed(item)
             if _sec < 0.1:
                 self._queue.put(
                     TdxHq_API(heartbeat=False).connect(ip=item, time_out=0.05))
     else:
         self._queue_clean()
         Timer(0, self.api_worker).start()
     Timer(300, self.api_worker).start()
Esempio n. 24
0
 def __init__(self, thread_num=2, timeout=1, max_size=80, *args, **kwargs):
     self.thread_num = thread_num
     self.max_size = max_size if isinstance(max_size,
                                            int) else len(stock_ip_list)
     self._queue = queue.Queue(maxsize=self.max_size)
     self.api_no_connection = TdxHq_API()
     self._api_worker = Thread(target=self.api_worker,
                               args=(),
                               name='API Worker')
     self._api_worker.start()
     self.timeout = timeout
     self.executor = ThreadPoolExecutor(self.thread_num)
Esempio n. 25
0
def QA_fetch_get_stock_latest(code, ip=best_ip, port=7709):
    code = [code] if isinstance(code, str) else code
    api = TdxHq_API(multithread=True)
    with api.connect(ip, port):
        data = pd.concat([api.to_df(api.get_security_bars(
            9, __select_market_code(item), item, 0, 1)).assign(code=item) for item in code], axis=0)
        return data\
            .assign(date=pd.to_datetime(data['datetime']
                                        .apply(lambda x: x[0:10])), date_stamp=data['datetime']
                    .apply(lambda x: QA_util_date_stamp(str(x[0:10]))))\
            .set_index('date', drop=False)\
            .drop(['year', 'month', 'day', 'hour', 'minute', 'datetime'], axis=1)
Esempio n. 26
0
    def ping(self, ip, port):
        api = TdxHq_API()
        time1 = datetime.datetime.now()

        try:
            with api.connect(ip, int(port)):
                if len(api.get_security_list(0, 1)) > 800:
                    return datetime.datetime.now() - time1
                else:
                    return datetime.timedelta(9, 9, 0)
        except:
            return datetime.timedelta(9, 9, 0)
Esempio n. 27
0
def QA_fetch_get_index_day(code,
                           start_date,
                           end_date,
                           frequence='day',
                           ip=best_ip["stock"],
                           port=7709):
    '指数日线'
    api = TdxHq_API()
    if frequence in ['day', 'd', 'D', 'DAY', 'Day']:
        frequence = 9
    elif frequence in ['w', 'W', 'Week', 'week']:
        frequence = 5
    elif frequence in ['month', 'M', 'm', 'Month']:
        frequence = 6
    elif frequence in ['Q', 'Quarter', 'q']:
        frequence = 10
    elif frequence in ['y', 'Y', 'year', 'Year']:
        frequence = 11

    with api.connect(ip, port):

        start_date = str(start_date)[0:10]
        today_ = datetime.date.today()
        lens = QA_util_get_trade_gap(start_date, today_)

        if str(code)[0] in ['5', '1']:  # ETF
            data = pd.concat([
                api.to_df(
                    api.get_security_bars(
                        frequence,
                        1 if str(code)[0] in ['0', '8', '9', '5'] else 0, code,
                        (int(lens / 800) - i) * 800, 800))
                for i in range(int(lens / 800) + 1)
            ],
                             axis=0)
        else:
            data = pd.concat([
                api.to_df(
                    api.get_index_bars(
                        frequence,
                        1 if str(code)[0] in ['0', '8', '9', '5'] else 0, code,
                        (int(lens / 800) - i) * 800, 800))
                for i in range(int(lens / 800) + 1)
            ],
                             axis=0)
        data = data.assign(date=data['datetime'].apply(lambda x: str(x[0:10]))).assign(code=str(code))\
            .assign(date_stamp=data['datetime'].apply(lambda x: QA_util_date_stamp(str(x)[0:10])))\
            .set_index('date', drop=False, inplace=False)\
            .assign(code=code)\
            .drop(['year', 'month', 'day', 'hour',
                   'minute', 'datetime'], axis=1)[start_date:end_date]
        return data.assign(date=data['date'].apply(lambda x: str(x)[0:10]))
Esempio n. 28
0
 def connect_api(self):
     """连接API"""
     # 连接增强行情API并检查连接情况
     try:
         if not self.connected:
             host = SETTINGS["TDX_HOST"]
             port = SETTINGS["TDX_PORT"]
             self.hq_api = TdxHq_API()
             self.hq_api.connect(host, port)
             self.connected = True
         return True
     except Exception:
         raise ConnectionError("pytdx连接错误")
Esempio n. 29
0
    def connect_api(self, host: str = "", port: int = 0):
        """连接行情api"""
        # 连接行情API并检查连接情况
        try:
            if not self.connect_status:
                self.hq_api = TdxHq_API()
                self.hq_api.connect(host, port)
                self.connect_status = True
                self.login_status = True
                self.subscribe_start()

        except Exception as e:
            return e
Esempio n. 30
0
    def __call__(self):
        count = 0
        try:
            connect = sqlite3.connect(self.sqlitefile)
            progress = ProgressBar(self)

            api = TdxHq_API()
            api.connect(self.ip, self.port)
            count = import_data(connect, self.market, self.ktype,
                                self.quotations, api, self.dest_dir, progress)
        except Exception as e:
            print(e)
        self.queue.put([self.task_name, self.market, self.ktype, None, count])