✨ feat(data_manager): 添加批量更新数据功能并优化返回值为布尔类型
This commit is contained in:
parent
1abff8b130
commit
27632816a4
@ -38,17 +38,17 @@ class DataFetcher:
|
||||
# 确保pro中存在对应的API方法
|
||||
if not hasattr(pro, api_name):
|
||||
logger.error(f"Tushare API '{api_name}'不存在")
|
||||
return pd.DataFrame()
|
||||
return False
|
||||
|
||||
try:
|
||||
df = getattr(pro, api_name)()
|
||||
# 将数据保存到数据库
|
||||
db_manager.save_df_to_db(df, table_name=api_name, if_exists='replace')
|
||||
return df
|
||||
return True
|
||||
except Exception as e:
|
||||
logger.error(f"获取基础数据时出错: {e}")
|
||||
logger.debug(f"完整的错误追踪信息:\n{traceback.format_exc()}")
|
||||
return pd.DataFrame()
|
||||
return False
|
||||
|
||||
@staticmethod
|
||||
def get_trade_date(api_name, start_date=None, end_date=None, force_update=False, batch_size=100000):
|
||||
@ -71,7 +71,7 @@ class DataFetcher:
|
||||
# 确保pro中存在对应的API方法
|
||||
if not hasattr(pro, api_name):
|
||||
logger.error(f"Tushare API '{api_name}'不存在")
|
||||
return pd.DataFrame()
|
||||
return False
|
||||
|
||||
# 获取目标交易日历
|
||||
all_trade_dates = DataReader.get_trade_cal(start_date, end_date)
|
||||
@ -89,7 +89,7 @@ class DataFetcher:
|
||||
|
||||
if not dates_to_fetch:
|
||||
logger.info("所有数据已在数据库中,无需更新")
|
||||
return db_manager.load_df_from_db(table_name=table_name)
|
||||
return True
|
||||
logger.info(f"需要获取 {len(dates_to_fetch)} 个交易日的数据")
|
||||
|
||||
# 分批处理数据
|
||||
@ -126,7 +126,7 @@ class DataFetcher:
|
||||
logger.info(f"已处理剩余 {total_rows} 行数据")
|
||||
|
||||
logger.info("数据获取与处理完成")
|
||||
return db_manager.load_df_from_db(table_name=table_name)
|
||||
return True
|
||||
|
||||
@staticmethod
|
||||
def process_batch(batch_dfs, table_name, force_update):
|
||||
@ -144,6 +144,56 @@ class DataFetcher:
|
||||
# 保存数据,传入force_update参数
|
||||
db_manager.save_df_to_db(batch_df, table_name=table_name, force_update=force_update)
|
||||
|
||||
@staticmethod
|
||||
def update_all(trade_date_api=None, basic_api=None, start_date=None, end_date=None, force_update=False):
|
||||
"""
|
||||
更新所有数据
|
||||
"""
|
||||
# 获取所有API名称
|
||||
if trade_date_api is None:
|
||||
trade_date_api = [
|
||||
'moneyflow', # 个股资金流向
|
||||
'moneyflow_ind_dc', # 东财概念及行业板块资金流向(DC)
|
||||
'daily', # A股日线行情
|
||||
'daily_basic', # 每日指标,获取全部股票每日重要的基本面指标
|
||||
'stk_limit', # 每日涨跌停价格
|
||||
'cyq_perf', # 每日筹码及胜率
|
||||
'moneyflow_ths', # 同花顺资金流向
|
||||
'moneyflow_dc', # 东方财富资金流向
|
||||
'moneyflow_cnt_ths',# 同花顺概念板块资金流向(THS)
|
||||
'moneyflow_ind_ths',# 同花顺行业板块资金流向(THS)
|
||||
'kpl_concept', # 开盘啦题材库,获取开盘啦概念题材列表
|
||||
'kpl_concept_cons', # 开盘啦题材成分,获取开盘啦概念题材的成分股
|
||||
'kpl_list', # 获取开盘啦涨停、跌停、炸板等榜单数据
|
||||
'top_list', # 龙虎榜每日明细
|
||||
'top_inst', # 龙虎榜机构席位明细
|
||||
'limit_list_d', # 涨跌停列表(新),获取A股每日涨跌停、炸板数据情况,数据从2020年开始(不提供ST股票的统计)
|
||||
'ths_daily', # 同花顺板块指数行情
|
||||
'dc_index', # 东方财富概念板块,获取东方财富每个交易日的概念板块数据,支持按日期查询
|
||||
'stk_auction', # 当日集合竞价,获取当日个股和ETF的集合竞价成交情况,每天9点25后可以获取当日的集合竞价成交数据
|
||||
'ths_hot', # 获取同花顺App热榜数据,包括热股、概念板块、ETF、可转债、港美股等等,每日盘中提取4次,收盘后4次,最晚22点提取一次。
|
||||
|
||||
]
|
||||
if basic_api is None:
|
||||
basic_api = [
|
||||
'stock_basic', # 股票基本信息
|
||||
'trade_cal', # 交易日历
|
||||
'namechange', # 股票曾用名
|
||||
'ths_index', # 同花顺概念和行业指数
|
||||
'hm_list', # 游资名录
|
||||
'index_basic', # 指数基本信息
|
||||
]
|
||||
|
||||
# 使用get_trade_date更新trade_date_api列表中的所有API
|
||||
for api in trade_date_api:
|
||||
logger.info(f"更新API: {api}")
|
||||
DataFetcher.get_trade_date(api_name=api, start_date=start_date, end_date=end_date, force_update=force_update)
|
||||
|
||||
# 使用get_basic更新basic_api列表中的所有API
|
||||
for api in basic_api:
|
||||
logger.info(f"更新API: {api}")
|
||||
DataFetcher.get_basic(api_name=api)
|
||||
|
||||
|
||||
class DataReader:
|
||||
"""
|
||||
|
16
main.py
16
main.py
@ -3,12 +3,20 @@ from money_flow_analyzer import MoneyflowAnalyzer
|
||||
|
||||
if __name__ == "__main__":
|
||||
# 指定日期范围
|
||||
start_date = '20250101'
|
||||
start_date = '20250410'
|
||||
end_date = None
|
||||
|
||||
# 获取板块资金流向数据
|
||||
# 可以通过force_update=True参数强制更新指定日期范围的数据
|
||||
df = DataFetcher.get_trade_date('top_list',start_date, end_date, force_update=False)
|
||||
# 更新数据
|
||||
# trade_date_api = [
|
||||
# 'moneyflow',
|
||||
# 'moneyflow_ind_dc',
|
||||
# 'daily',
|
||||
# ]
|
||||
# basic_api = [
|
||||
# 'stock_basic',
|
||||
# 'trade_cal',
|
||||
# ]
|
||||
DataFetcher.update_all(start_date=start_date, end_date=end_date, force_update=False)
|
||||
|
||||
# analyzer = MoneyflowAnalyzer()
|
||||
# analyzer.main_flow_analyze(days_forward=10,use_consistent_samples=True)
|
Loading…
Reference in New Issue
Block a user