7 Sprints 全部完成: Sprint 0: 基础设施 (DataManager + MariaDB) Sprint 1: 因子引擎 (34因子/12分类) Sprint 2: VectorBT 回测 (5策略+截面) Sprint 3: Optuna 优化 (+Walk-Forward) Sprint 4: ML 模型 (LightGBM+CatBoost) Sprint 5: Qwen 情绪因子 (三源新闻+日期对齐) Sprint 6: Agent 系统 (4Agent+日报.md/.html) 生产加固 (15项): Tushare双源fallback, SSH自动恢复, pool_pre_ping, save_daily先删后插, load_dotenv绝对路径, 日报5d/20d修复, RiskAgent改上证指数, 昨日对比+数据截止, mac_report utf8mb4, CLAUDE-*.md 9条已知Bug, demo全参数化, djapi数据源归一化, indexDatas API修正 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
70 lines
2.7 KiB
Python
70 lines
2.7 KiB
Python
|
||
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) |