Пример #1
0
    def daily(self, symbol=None):
        '''
        获取日线数据

        :return: pd.dataFrame or None
        '''
        reader = TdxExHqDailyBarReader()
        vipdoc = self.find_path(symbol=symbol, subdir='lday', ext='day')

        if symbol is not None:
            return reader.get_df(vipdoc)

        return None
Пример #2
0
    def daily(self, symbol=None):
        '''
        获取日线数据

        :return: pd.dataFrame or None
        '''
        reader = TdxExHqDailyBarReader()
        symbol = self.find_path(symbol)

        if symbol is not None:
            return reader.get_df(symbol)

        return None
Пример #3
0
def main(input, output, datatype):
    """
    通达信数据文件读取
    """

    if datatype == 'daily':
        reader = TdxDailyBarReader()
    elif datatype == 'ex_daily':
        reader = TdxExHqDailyBarReader()
    elif datatype == 'lc':
        reader = TdxLCMinBarReader()
    elif datatype == 'gbbq':
        reader = GbbqReader()
    elif datatype == 'block':
        reader = BlockReader()
    else:
        reader = TdxMinBarReader()

    try:
        df = reader.get_df(input)
        if (output):
            click.echo("写入到文件 : " + output)
            df.to_csv(output)
        else:
            print(df)
    except Exception as e:
        print(str(e))
Пример #4
0
def main(input, output, datatype):
    """
    通达信数据文件读取
    """

    if datatype == 'daily':
        reader = TdxDailyBarReader()
    elif datatype == 'ex_daily':
        reader = TdxExHqDailyBarReader()
    elif datatype == 'lc':
        reader = TdxLCMinBarReader()
    elif datatype == 'gbbq':
        reader = GbbqReader()
    elif datatype == 'block':
        reader = BlockReader()
    elif datatype == 'customblock':
        reader = CustomerBlockReader()
    elif datatype == 'history_financial' or datatype == 'hf':
        reader = HistoryFinancialReader()
    else:
        reader = TdxMinBarReader()

    try:
        df = reader.get_df(input)
        if output:
            click.echo("写入到文件 : " + output)
            df.to_csv(output)
        else:
            print(df)
    except Exception as e:
        print(str(e))
Пример #5
0
def get_source_data(file_path: Path, freq: str) -> pd.DataFrame:
    if not file_path.exists():
        logger.info(f"{str(file_path)} is not exists!")
        return pd.DataFrame()

    if file_path.parent.parent.name == "ds":
        if freq == "day":
            reader = TdxExHqDailyBarReader()
        else:
            reader = TdxLCMinBarReader()
    else:
        # Todo 对股票数据进行后复权
        if freq == "day":
            reader = TdxDailyBarReader()
        else:
            reader = TdxLCMinBarReader()

    try:
        df = reader.get_df(str(file_path))
    except:
        logger.warning(f"Cant read {str(file_path)} ")
        return pd.DataFrame()

    df = df.reset_index()
    df["date"] = df["date"].astype(str).astype(np.datetime64)

    return df
Пример #6
0
    def _get_source_data(self, file_path: Path) -> pd.DataFrame:

        if file_path.parent.parent.name == "ds":
            if self.freq == "day":
                reader = TdxExHqDailyBarReader()
            else:
                reader = TdxLCMinBarReader()
        else:
            if self.freq == "day":
                reader = TdxDailyBarReader()
            else:
                reader = TdxLCMinBarReader()

        try:
            df = reader.get_df(str(file_path))
        except:
            logger.warning(f"Cant read {str(file_path)} ")
            return pd.DataFrame()

        instrument = self.tdx_files_info[self.tdx_files_info["file_path"] ==
                                         file_path]['instrument'].iloc[0]
        if instrument in ['future', 'option']:
            df.rename(columns={
                'amount': "position",
                "jiesuan": "settle"
            },
                      inplace=True)
            if "hk_stock_amount" in df.columns:
                del df["hk_stock_amount"]

        df = df.reset_index()
        df[self.date_field_name] = df[self.date_field_name].astype(str).astype(
            np.datetime64)

        return df
Пример #7
0
def get_bar(code, start=None, end=None, freq='day', exchange=None):
    """
    股票成交量 volume 单位是100股
    """
    code = code.upper()
    standard_freq = parse_frequency_str(freq)

    try:
        tdx_code = _get_tdx_code_from_security_dataframe(code, exchange)
    except:
        util_log_info("Can't get tdx_code from {}".format(code))
        return

    if standard_freq in ['D', 'w', 'M', 'Q', 'Y']:
        file_path = _generate_path(code, 'D', tdx_code)
    elif standard_freq in ['1min', '5min', '30min', '60min']:
        file_path = _generate_path(code, '5min', tdx_code)
    elif standard_freq in ['1min']:
        file_path = _generate_path(code, '1min', tdx_code)
    else:
        util_log_info('Not supported frequency {}'.format(freq))
        return

    if not os.path.exists(file_path):
        util_log_info('=={}== {} file is not exists!'.format(code, file_path))
        return

    # 统一freq的数据结构
    if tdx_code in ['sh', 'sz']:
        if standard_freq in ['D', 'w', 'M', 'Q', 'Y']:
            reader = TdxDailyBarReader()
            df = reader.get_df(file_path)
        elif standard_freq in ['1min', '5min', '30min', '60min']:
            reader = TdxLCMinBarReader()
            df = reader.get_df(file_path)
        else:
            util_log_info('Not supported frequency {}'.format(freq))
            return
    else:
        if standard_freq in ['D', 'w', 'M', 'Q', 'Y']:
            reader = TdxExHqDailyBarReader()
            df = reader.get_df(file_path)
        elif standard_freq in ['1min', '5min', '30min', '60min']:
            reader = TdxLCMinBarReader()
            df = reader.get_df(file_path)
        else:
            util_log_info('Not supported frequency {}'.format(freq))
            return

    if len(df) < 1:
        return

    recorder = SECURITY_DATAFRAME.loc[code]

    if isinstance(recorder, pd.DataFrame):
        instrument = recorder.loc[recorder['tdx_code'] == tdx_code].loc[
            code, 'instrument']
        exchange = recorder.loc[recorder['tdx_code'] == tdx_code].loc[
            code, 'exchange']
    else:
        instrument = recorder['instrument']
        exchange = recorder['exchange']

    if instrument in ['future', 'option']:
        df.rename(columns={
            'amount': "position",
            "jiesuan": "settle"
        },
                  inplace=True)

    if start:
        start = pd.to_datetime(start)
        df = df[df.index >= start]

    if end:
        end = pd.to_datetime(end)
        df = df[df.index <= end]

    df['date'] = df.index
    df = df.assign(code=code, exchange=exchange)

    if standard_freq in ['w', 'M', 'Q', 'Y']:
        df = resample_from_daily_data(df, standard_freq)
    return df