예제 #1
0
    def init_task(self):
        config = self.config
        dest_dir = config['hdf5']['dir']
        sqlite_file_name = dest_dir + "/stock.db"

        self.tasks = []
        if self.config.getboolean('weight', 'enable', fallback=False):
            self.tasks.append(
                ImportWeightToSqliteTask(self.queue, sqlite_file_name,
                                         dest_dir))

        if self.config.getboolean('finance', 'enable', fallback=False):
            self.tasks.append(ImportHistoryFinanceTask(self.queue, dest_dir))

        task_count = 0
        if self.config.getboolean('ktype', 'day', fallback=False):
            task_count += 2
        if self.config.getboolean('ktype', 'min5', fallback=False):
            task_count += 2
        if self.config.getboolean('ktype', 'min', fallback=False):
            task_count += 2
        if self.config.getboolean('ktype', 'trans', fallback=False):
            task_count += 2
        if self.config.getboolean('ktype', 'time', fallback=False):
            task_count += 2

        self.send_message(['INFO', '搜索通达信服务器'])
        self.hosts = search_best_tdx()
        if not self.hosts:
            self.send_message(['INFO', '无法连接通达信行情服务器!请检查网络设置!'])
            return

        if task_count == 0:
            return

        use_tdx_number = min(
            task_count, len(self.hosts),
            self.config.getint('pytdx', 'use_tdx_number', fallback=10))
        split = task_count // use_tdx_number
        use_hosts = []
        for i in range(use_tdx_number):
            for j in range(split):
                use_hosts.append((self.hosts[i][2], self.hosts[i][3]))
        if len(use_hosts) < task_count:
            for i in range(task_count - len(use_hosts)):
                use_hosts.insert(0, (self.hosts[0][2], self.hosts[0][3]))
        # for i in range(len(use_hosts)):
        #     print(i, use_hosts[i])

        cur_host = 0

        # 以下按数据量从大到小依次使用速度从高到低的TDX服务器
        if self.config.getboolean('ktype', 'trans', fallback=False):
            today = datetime.date.today()
            trans_start_date = datetime.datetime.strptime(
                config['ktype']['trans_start_date'], '%Y-%m-%d').date()
            trans_max_days = (today - trans_start_date).days + 1
            self.tasks.append(
                ImportPytdxTransToH5(self.queue, sqlite_file_name, 'SH',
                                     self.quotations, use_hosts[cur_host][0],
                                     use_hosts[cur_host][1], dest_dir,
                                     trans_max_days))
            cur_host += 1
            self.tasks.append(
                ImportPytdxTransToH5(self.queue, sqlite_file_name, 'SZ',
                                     self.quotations, use_hosts[cur_host][0],
                                     use_hosts[cur_host][1], dest_dir,
                                     trans_max_days))
            cur_host += 1

        if self.config.getboolean('ktype', 'min', fallback=False):
            start_date = datetime.datetime.strptime(
                config['ktype']['min_start_date'], '%Y-%m-%d').date()
            self.tasks.append(
                ImportPytdxToH5(
                    self.queue, sqlite_file_name, 'SH', '1MIN',
                    self.quotations, use_hosts[cur_host][0],
                    use_hosts[cur_host][1], dest_dir,
                    start_date.year * 100000000 + start_date.month * 1000000 +
                    start_date.day * 10000))
            cur_host += 1
            self.tasks.append(
                ImportPytdxToH5(
                    self.queue, sqlite_file_name, 'SZ', '1MIN',
                    self.quotations, use_hosts[cur_host][0],
                    use_hosts[cur_host][1], dest_dir,
                    start_date.year * 100000000 + start_date.month * 1000000 +
                    start_date.day * 10000))
            cur_host += 1

        if self.config.getboolean('ktype', 'time', fallback=False):
            today = datetime.date.today()
            time_start_date = datetime.datetime.strptime(
                config['ktype']['time_start_date'], '%Y-%m-%d').date()
            time_max_days = (today - time_start_date).days + 1
            self.tasks.append(
                ImportPytdxTimeToH5(self.queue, sqlite_file_name, 'SH',
                                    self.quotations, use_hosts[cur_host][0],
                                    use_hosts[cur_host][1], dest_dir,
                                    time_max_days))
            cur_host += 1
            self.tasks.append(
                ImportPytdxTimeToH5(self.queue, sqlite_file_name, 'SZ',
                                    self.quotations, use_hosts[cur_host][0],
                                    use_hosts[cur_host][1], dest_dir,
                                    time_max_days))
            cur_host += 1

        if self.config.getboolean('ktype', 'min5', fallback=False):
            start_date = datetime.datetime.strptime(
                config['ktype']['min5_start_date'], '%Y-%m-%d').date()
            self.tasks.append(
                ImportPytdxToH5(
                    self.queue, sqlite_file_name, 'SH', '5MIN',
                    self.quotations, use_hosts[cur_host][0],
                    use_hosts[cur_host][1], dest_dir,
                    start_date.year * 100000000 + start_date.month * 1000000 +
                    start_date.day * 10000))
            cur_host += 1
            self.tasks.append(
                ImportPytdxToH5(
                    self.queue, sqlite_file_name, 'SZ', '5MIN',
                    self.quotations, use_hosts[cur_host][0],
                    use_hosts[cur_host][1], dest_dir,
                    start_date.year * 100000000 + start_date.month * 1000000 +
                    start_date.day * 10000))
            cur_host += 1

        if self.config.getboolean('ktype', 'day', fallback=False):
            start_date = datetime.datetime.strptime(
                config['ktype']['day_start_date'], '%Y-%m-%d').date()
            self.tasks.append(
                ImportPytdxToH5(
                    self.queue, sqlite_file_name, 'SH', 'DAY', self.quotations,
                    use_hosts[cur_host][0], use_hosts[cur_host][1], dest_dir,
                    start_date.year * 100000000 + start_date.month * 1000000 +
                    start_date.day * 10000))
            cur_host += 1
            self.tasks.append(
                ImportPytdxToH5(
                    self.queue, sqlite_file_name, 'SZ', 'DAY', self.quotations,
                    use_hosts[cur_host][0], use_hosts[cur_host][1], dest_dir,
                    start_date.year * 100000000 + start_date.month * 1000000 +
                    start_date.day * 10000))
            cur_host += 1
예제 #2
0
    def __call__(self):
        total_count = 0
        try:
            if self.config.getboolean('hdf5', 'enable', fallback=True):
                sqlite_file = "{}/stock.db".format(self.config['hdf5']['dir'])
                connect = sqlite3.connect(sqlite_file, timeout=1800)
                pytdx_import_weight = pytdx_import_weight_to_sqlite
                self.logger.debug('use sqlite import weight')
            else:
                db_config = {
                    'user': self.config['mysql']['usr'],
                    'password': self.config['mysql']['pwd'],
                    'host': self.config['mysql']['host'],
                    'port': self.config['mysql']['port']
                }
                connect = mysql.connector.connect(**db_config)
                pytdx_import_weight = pytdx_import_weight_to_mysql
                self.logger.debug('use mysql import weight')

        except Exception as e:
            #self.queue.put([self.msg_name, str(e), -1, 0, total_count])
            self.queue.put([self.msg_name, 'INFO', str(e), 0, 0])
            self.queue.put([self.msg_name, '', 0, None, total_count])
            return

        try:
            """
            download_dir = self.dest_dir + "/downloads"
            if not os.path.lexists(download_dir):
                os.makedirs(download_dir)

            self.queue.put([self.msg_name, '正在下载钱龙权息信息...', 0, 0, 0])
            net_file = urllib.request.urlopen(
                'http://www.qianlong.com.cn/download/history/weight.rar', timeout=60
            )
            buffer = net_file.read()

            self.queue.put([self.msg_name, '钱龙权息信息下载完成,正在校验是否存在更新...', 0, 0, 0])
            new_md5 = hashlib.md5(buffer).hexdigest()

            dest_filename = download_dir + '/weight.rar'
            old_md5 = None
            if os.path.exists(dest_filename):
                with open(dest_filename, 'rb') as oldfile:
                    old_md5 = hashlib.md5(oldfile.read()).hexdigest()

            #如果没变化不需要解压导入
            if new_md5 != old_md5:
                with open(dest_filename, 'wb') as file:
                    file.write(buffer)

                self.queue.put([self.msg_name, '正在解压钱龙权息信息...', 0, 0, 0])
                x = os.system('unrar x -o+ -inul {} {}'.format(dest_filename, download_dir))
                if x != 0:
                    raise Exception("无法找到unrar命令!")

                self.queue.put([self.msg_name, '正在导入钱龙权息数据...', 0, 0, 0])
                total_count = qianlong_import_weight(connect, download_dir + '/weight', 'SH')
                total_count += qianlong_import_weight(connect, download_dir + '/weight', 'SZ')
                self.queue.put([self.msg_name, '导入钱龙权息数据完毕!', 0, 0, total_count])

            else:
                self.queue.put([self.msg_name, '钱龙权息数据无变化', 0, 0, 0])
            """

            hosts = search_best_tdx()
            api = TdxHq_API()
            api.connect(hosts[0][2], hosts[0][3])

            self.queue.put([self.msg_name, '正在导入权息数据...', 0, 0, 0])
            total_count = pytdx_import_weight(api, connect, "SH")
            total_count += pytdx_import_weight(api, connect, "SZ")
            self.queue.put([self.msg_name, '导入权息数据完毕!', 0, 0, total_count])

            #self.queue.put([self.msg_name, '下载通达信财务信息(上证)...', 0, 0, 0])
            #x = pytdx_import_finance(connect, api, "SH")

            #self.queue.put([self.msg_name, '下载通达信财务信息(深证)...', 0, 0, 0])
            #x += pytdx_import_finance(connect, api, "SZ")
            #self.queue.put([self.msg_name, '导入通达信财务信息完毕!', 0, 0, x])

            api.disconnect()

        except Exception as e:
            self.logger.error(e)
            #self.queue.put([self.msg_name, str(e), -1, 0, total_count])
            self.queue.put([self.msg_name, 'INFO', str(e), 0, 0])
        finally:
            connect.commit()
            connect.close()

        self.queue.put([self.msg_name, '', 0, None, total_count])
예제 #3
0
    def __call__(self):
        total_count = 0
        try:
            connect = sqlite3.connect(self.sqlitefile)
        except Exception as e:
            #self.queue.put([self.msg_name, str(e), -1, 0, total_count])
            self.queue.put([self.msg_name, 'INFO', str(e), 0, 0])
            self.queue.put([self.msg_name, '', 0, None, total_count])
            return

        try:
            download_dir = self.dest_dir + "/downloads"
            if not os.path.lexists(download_dir):
                os.makedirs(download_dir)

            self.queue.put([self.msg_name, '正在下载钱龙权息信息...', 0, 0, 0])
            net_file = urllib.request.urlopen(
                'http://www.qianlong.com.cn/download/history/weight.rar',
                timeout=60)
            buffer = net_file.read()

            self.queue.put(
                [self.msg_name, '钱龙权息信息下载完成,正在校验是否存在更新...', 0, 0, 0])
            new_md5 = hashlib.md5(buffer).hexdigest()

            dest_filename = download_dir + '/weight.rar'
            old_md5 = None
            if os.path.exists(dest_filename):
                with open(dest_filename, 'rb') as oldfile:
                    old_md5 = hashlib.md5(oldfile.read()).hexdigest()

            #如果没变化不需要解压导入
            if new_md5 != old_md5:
                with open(dest_filename, 'wb') as file:
                    file.write(buffer)

                self.queue.put([self.msg_name, '正在解压钱龙权息信息...', 0, 0, 0])
                x = os.system('unrar x -o+ -inul {} {}'.format(
                    dest_filename, download_dir))
                if x != 0:
                    raise Exception("无法找到unrar命令!")

                self.queue.put([self.msg_name, '正在导入钱龙权息数据...', 0, 0, 0])
                total_count = qianlong_import_weight(connect,
                                                     download_dir + '/weight',
                                                     'SH')
                total_count += qianlong_import_weight(connect,
                                                      download_dir + '/weight',
                                                      'SZ')
                self.queue.put(
                    [self.msg_name, '导入钱龙权息数据完毕!', 0, 0, total_count])

            else:
                self.queue.put([self.msg_name, '钱龙权息数据无变化', 0, 0, 0])

            hosts = search_best_tdx()
            api = TdxHq_API()
            api.connect(hosts[0][2], hosts[0][3])

            self.queue.put([self.msg_name, '下载通达信权息信息(上证)...', 0, 0, 0])
            x = pytdx_import_finance(connect, api, "SH")

            self.queue.put([self.msg_name, '下载通达信权息信息(深证)...', 0, 0, 0])
            x += pytdx_import_finance(connect, api, "SZ")
            self.queue.put([self.msg_name, '导入通达信权息信息完毕!', 0, 0, x])

            api.disconnect()

        except Exception as e:
            #self.queue.put([self.msg_name, str(e), -1, 0, total_count])
            self.queue.put([self.msg_name, 'INFO', str(e), 0, 0])
        finally:
            connect.commit()
            connect.close()

        self.queue.put([self.msg_name, '', 0, None, total_count])
예제 #4
0
    def init_task(self):
        config = self.config
        dest_dir = config['hdf5']['dir']
        sqlite_file_name = dest_dir + "/stock.db"

        self.tasks = []
        if self.config.getboolean('weight', 'enable', fallback=False):
            self.tasks.append(ImportWeightToSqliteTask(self.queue, sqlite_file_name, dest_dir))

        if self.config.getboolean('finance', 'enable', fallback=False):
            self.tasks.append(ImportHistoryFinanceTask(self.queue, dest_dir))

        task_count = 0
        if self.config.getboolean('ktype', 'day', fallback=False):
            task_count += 2
        if self.config.getboolean('ktype', 'min5', fallback=False):
            task_count += 2
        if self.config.getboolean('ktype', 'min', fallback=False):
            task_count += 2
        if self.config.getboolean('ktype', 'trans', fallback=False):
            task_count += 2
        if self.config.getboolean('ktype', 'time', fallback=False):
            task_count += 2

        self.send_message(['INFO', '搜索通达信服务器'])
        self.hosts = search_best_tdx()
        if not self.hosts:
            self.send_message(['INFO', '无法连接通达信行情服务器!请检查网络设置!'])
            return

        if task_count == 0:
            return

        use_tdx_number = min(task_count, len(self.hosts), self.config.getint('pytdx', 'use_tdx_number', fallback=10))
        split = task_count // use_tdx_number
        use_hosts = []
        for i in range(use_tdx_number):
            for j in range(split):
                use_hosts.append((self.hosts[i][2], self.hosts[i][3]))
        if len(use_hosts) < task_count:
            for i in range(task_count - len(use_hosts)):
                use_hosts.insert(0, (self.hosts[0][2], self.hosts[0][3]))
        # for i in range(len(use_hosts)):
        #     print(i, use_hosts[i])

        cur_host = 0

        # 以下按数据量从大到小依次使用速度从高到低的TDX服务器
        if self.config.getboolean('ktype', 'trans', fallback=False):
            today = datetime.date.today()
            trans_start_date = datetime.datetime.strptime(config['ktype']['trans_start_date'], '%Y-%m-%d').date()
            trans_max_days = (today - trans_start_date).days + 1
            self.tasks.append(
                ImportPytdxTransToH5(
                    self.queue, sqlite_file_name, 'SH', self.quotations,
                    use_hosts[cur_host][0], use_hosts[cur_host][1],
                    dest_dir, trans_max_days
                )
            )
            cur_host += 1
            self.tasks.append(
                ImportPytdxTransToH5(
                    self.queue, sqlite_file_name, 'SZ', self.quotations,
                    use_hosts[cur_host][0], use_hosts[cur_host][1],
                    dest_dir, trans_max_days
                )
            )
            cur_host += 1

        if self.config.getboolean('ktype', 'min', fallback=False):
            start_date = datetime.datetime.strptime(config['ktype']['min_start_date'], '%Y-%m-%d').date()
            self.tasks.append(
                ImportPytdxToH5(
                    self.queue, sqlite_file_name, 'SH', '1MIN', self.quotations,
                    use_hosts[cur_host][0], use_hosts[cur_host][1],
                    dest_dir, start_date.year * 100000000 + start_date.month * 1000000 + start_date.day * 10000
                )
            )
            cur_host += 1
            self.tasks.append(
                ImportPytdxToH5(
                    self.queue, sqlite_file_name,
                    'SZ', '1MIN', self.quotations,
                    use_hosts[cur_host][0], use_hosts[cur_host][1],
                    dest_dir, start_date.year * 100000000 + start_date.month * 1000000 + start_date.day * 10000
                )
            )
            cur_host += 1

        if self.config.getboolean('ktype', 'time', fallback=False):
            today = datetime.date.today()
            time_start_date = datetime.datetime.strptime(config['ktype']['time_start_date'], '%Y-%m-%d').date()
            time_max_days = (today - time_start_date).days + 1
            self.tasks.append(ImportPytdxTimeToH5(self.queue, sqlite_file_name, 'SH',
                                                  self.quotations,
                                                  use_hosts[cur_host][0], use_hosts[cur_host][1],
                                                  dest_dir,
                                                  time_max_days))
            cur_host += 1
            self.tasks.append(ImportPytdxTimeToH5(self.queue, sqlite_file_name, 'SZ',
                                                  self.quotations,
                                                  use_hosts[cur_host][0], use_hosts[cur_host][1],
                                                  dest_dir,
                                                  time_max_days))
            cur_host += 1

        if self.config.getboolean('ktype', 'min5', fallback=False):
            start_date = datetime.datetime.strptime(config['ktype']['min5_start_date'], '%Y-%m-%d').date()
            self.tasks.append(
                ImportPytdxToH5(
                    self.queue, sqlite_file_name, 'SH', '5MIN',
                    self.quotations,
                    use_hosts[cur_host][0], use_hosts[cur_host][1],
                    dest_dir,
                    start_date.year * 100000000 + start_date.month * 1000000 + start_date.day * 10000
                )
            )
            cur_host += 1
            self.tasks.append(
                ImportPytdxToH5(
                    self.queue, sqlite_file_name, 'SZ', '5MIN',
                    self.quotations,
                    use_hosts[cur_host][0], use_hosts[cur_host][1],
                    dest_dir,
                    start_date.year * 100000000 + start_date.month * 1000000 + start_date.day * 10000
                )
            )
            cur_host += 1

        if self.config.getboolean('ktype', 'day', fallback=False):
            start_date = datetime.datetime.strptime(config['ktype']['day_start_date'], '%Y-%m-%d').date()
            self.tasks.append(
                ImportPytdxToH5(
                    self.queue, sqlite_file_name, 'SH', 'DAY',
                    self.quotations,
                    use_hosts[cur_host][0], use_hosts[cur_host][1],
                    dest_dir,
                    start_date.year * 100000000 + start_date.month * 1000000 + start_date.day * 10000
                )
            )
            cur_host += 1
            self.tasks.append(
                ImportPytdxToH5(
                    self.queue, sqlite_file_name, 'SZ', 'DAY',
                    self.quotations,
                    use_hosts[cur_host][0], use_hosts[cur_host][1],
                    dest_dir,
                    start_date.year * 100000000 + start_date.month * 1000000 + start_date.day * 10000
                )
            )
            cur_host += 1
예제 #5
0
    def __call__(self):
        total_count = 0
        try:
            connect = sqlite3.connect(self.sqlitefile)
        except Exception as e:
            #self.queue.put([self.msg_name, str(e), -1, 0, total_count])
            self.queue.put([self.msg_name, 'INFO', str(e), 0, 0])
            self.queue.put([self.msg_name, '', 0, None, total_count])
            return

        try:
            download_dir = self.dest_dir + "/downloads"
            if not os.path.lexists(download_dir):
                os.makedirs(download_dir)
            
            self.queue.put([self.msg_name, '正在下载钱龙权息信息...', 0, 0, 0])
            net_file = urllib.request.urlopen('http://www.qianlong.com.cn/download/history/weight.rar', timeout=60)
            buffer = net_file.read()

            self.queue.put([self.msg_name, '钱龙权息信息下载完成,正在校验是否存在更新...', 0, 0, 0])
            new_md5 = hashlib.md5(buffer).hexdigest()

            dest_filename = download_dir + '/weight.rar'
            old_md5 = None
            if os.path.exists(dest_filename):
                with open(dest_filename, 'rb') as oldfile:
                    old_md5 = hashlib.md5(oldfile.read()).hexdigest()

            #如果没变化不需要解压导入
            if new_md5 != old_md5:
                with open(dest_filename, 'wb') as file:
                    file.write(buffer)

                self.queue.put([self.msg_name, '正在解压钱龙权息信息...', 0, 0, 0])
                x = os.system('unrar x -o+ -inul {} {}'.format(dest_filename, download_dir))
                if x != 0:
                    raise Exception("无法找到unrar命令!")

                self.queue.put([self.msg_name, '正在导入钱龙权息数据...', 0, 0, 0])
                total_count = qianlong_import_weight(connect, download_dir + '/weight', 'SH')
                total_count += qianlong_import_weight(connect, download_dir + '/weight', 'SZ')
                self.queue.put([self.msg_name, '导入钱龙权息数据完毕!', 0, 0, total_count])

            else:
                self.queue.put([self.msg_name, '钱龙权息数据无变化', 0, 0, 0])

            hosts = search_best_tdx()
            api = TdxHq_API()
            api.connect(hosts[0][2], hosts[0][3])

            self.queue.put([self.msg_name, '下载通达信权息信息(上证)...', 0, 0, 0])
            x = pytdx_import_finance(connect, api, "SH")

            self.queue.put([self.msg_name, '下载通达信权息信息(深证)...', 0, 0, 0])
            x += pytdx_import_finance(connect, api, "SZ")
            self.queue.put([self.msg_name, '导入通达信权息信息完毕!', 0, 0, x])

            api.disconnect()

        except Exception as e:
            #self.queue.put([self.msg_name, str(e), -1, 0, total_count])
            self.queue.put([self.msg_name, 'INFO', str(e), 0, 0])
        finally:
            connect.commit()
            connect.close()

        self.queue.put([self.msg_name, '', 0, None, total_count])