import pandas as pd from .data_source import get_tushare_pro # 导入当站目录的config文件 try: # 尝试相对导入(作为包的一部分) from .config import TS_TOKEN, START_DATE, END_DATE from .stock_utils import dataCorrect except (ImportError, SystemError): # 失败则使用绝对导入(直接运行脚本) from config import TS_TOKEN, START_DATE, END_DATE from stock_utils import dataCorrect def getStockParam(TS_CODE,START_DATE=START_DATE,END_DATE=END_DATE): pro = get_tushare_pro() """ 从tushare daily_basic接口获取单只股票的所有基础数据,并进行数据修正。 Parameters: TS_CODE (str): 股票代码,格式为 '股票代码.SZ' 或 '股票代码.SH',例如 '000001.SZ' Returns: pd.DataFrame: 包含股票基础数据的DataFrame,字段说明如下: ts_code: 股票代码 trade_date: 交易日期 close: 收盘价 turnover_rate: 换手率(%) turnover_rate_f: 换手率(自由流通股) volume_ratio: 量比 pe: 市盈率(总市值/净利润,亏损的PE为空) pe_ttm: 市盈率(TTM,亏损的PE为空) pb: 市净率(总市值/净资产) ps: 市销率(总市值/营业收入) ps_ttm: 市销率(TTM) dv_ratio: 股息率(%) dv_ttm: 股息率(TTM) total_share: 总股本(万股) float_share: 流通股本(万股) free_share: 自由流通股本(万股) total_mv: 总市值(万元) circ_mv: 流通市值(万元) Raises: Exception: 如果从Tushare接口获取数据时发生错误。 """ try: # 获取股票基础数据 df = pro.daily_basic(ts_code=TS_CODE, start_date=START_DATE, end_date=END_DATE) # 需要修正的列 cols = ['close', 'turnover_rate', 'turnover_rate_f', 'volume_ratio', 'pe', 'pe_ttm', 'pb', 'ps', 'ps_ttm', 'dv_ratio', 'dv_ttm', 'total_share', 'float_share', 'free_share', 'total_mv', 'circ_mv'] # 调用dataCorrect函数进行数据修正 df = dataCorrect(df, cols) return df except Exception as e: # 捕获并处理异常 print(f"错误: 获取股票 {TS_CODE} 的基础数据时发生错误: {e}") return pd.DataFrame() if __name__ == "__main__": # 简单测试 import datetime yesterday = (datetime.datetime.now() - datetime.timedelta(days=1)).strftime("%Y%m%d") test_df = getStockParam("601398.SH", START_DATE=yesterday, END_DATE=yesterday) print(test_df)