diff --git a/app/adapters/__pycache__/amazingdata_adapter.cpython-311.pyc b/app/adapters/__pycache__/amazingdata_adapter.cpython-311.pyc index 155d636..09aca4c 100644 Binary files a/app/adapters/__pycache__/amazingdata_adapter.cpython-311.pyc and b/app/adapters/__pycache__/amazingdata_adapter.cpython-311.pyc differ diff --git a/app/adapters/amazingdata_adapter.py b/app/adapters/amazingdata_adapter.py index 9694dfa..a796bbb 100644 --- a/app/adapters/amazingdata_adapter.py +++ b/app/adapters/amazingdata_adapter.py @@ -295,14 +295,27 @@ class AmazingDataAdapter(DataSourceAdapter): local_path=self.config.local_path, is_local=self.config.use_local_cache ) + print(f"[amazingdata_adapter _fetch_klines_sync]股本结构: {equity_dict}") if symbol in equity_dict: equity_df = equity_dict[symbol] - # 获取最新的股本数据 + print(f"[amazingdata_adapter _fetch_klines_sync]获取到 {len(equity_df)} 条股本结构数据") + # 获取最近交易日的 TOT_A_SHARE 作为总股本 if not equity_df.empty: + # 按日期排序,获取最新数据 + if 'ANN_DATE' in equity_df.columns: + equity_df = equity_df.sort_values('ANN_DATE') latest_equity = equity_df.iloc[-1] - tot_share = float(latest_equity.get('TOT_SHARE', 0)) * 10000 # 万股转股 - float_share = float(latest_equity.get('FLOAT_SHARE', 0)) * 10000 # 万股转股 - print(f"[amazingdata_adapter _fetch_klines_sync]总股本: {tot_share}, 流通股: {float_share}") + + # 获取 TOT_A_SHARE(A股总股本) + tot_a_share = float(latest_equity.get('TOT_A_SHARE', 0)) + tot_share = tot_a_share * 10000 # 万股转股 + + # 流通股使用 FLOAT_A_SHARE(流通A股) + float_a_share = float(latest_equity.get('FLOAT_A_SHARE', 0)) + float_share = float_a_share * 10000 # 万股转股 + + print(f"[amazingdata_adapter _fetch_klines_sync]最近交易日 TOT_A_SHARE: {tot_a_share} 万股, FLOAT_A_SHARE: {float_a_share} 万股") + print(f"[amazingdata_adapter _fetch_klines_sync]换算后总股本: {tot_share} 股, 流通股: {float_share} 股") else: tot_share = 0 float_share = 0 @@ -377,8 +390,10 @@ class AmazingDataAdapter(DataSourceAdapter): # ============================================ # 4.2 计算市值 # ============================================ + print(f"[amazingdata_adapter _fetch_klines_sync]close: {close}, 总股本: {tot_share}, 流通股本: {float_share}") total_market_cap = close * tot_share if tot_share > 0 and close > 0 else None float_market_cap = close * float_share if float_share > 0 and close > 0 else None + print(f"[amazingdata_adapter _fetch_klines_sync]总市值: {total_market_cap}, 流通市值: {float_market_cap}") # ============================================ # 4.3 计算可交易日数 diff --git a/app/services/__pycache__/stock_service.cpython-311.pyc b/app/services/__pycache__/stock_service.cpython-311.pyc index cdeff30..2ce52d3 100644 Binary files a/app/services/__pycache__/stock_service.cpython-311.pyc and b/app/services/__pycache__/stock_service.cpython-311.pyc differ diff --git a/app/services/stock_service.py b/app/services/stock_service.py index 45b5f74..3db2885 100644 --- a/app/services/stock_service.py +++ b/app/services/stock_service.py @@ -32,25 +32,23 @@ class StockService: except ValueError as e: raise ValueError(f"Invalid date format: {e}") - # todo 暂时不从数据库获取,后期放开 # 获取K线数据(从数据库) - # items = self.repository.get_klines( - # req.symbol, - # req.freq, - # start, - # end, - # req.adjust - # ) - items = [] # 先不从数据库获取,直接从适配器获取 + items = self.repository.get_klines( + req.symbol, + req.freq, + start, + end, + req.adjust + ) # 如果数据库没有数据,尝试从适配器获取 if not items: info(f"No data in DB for {req.symbol}, fetching from adapter...") items = self._fetch_from_adapter(req.symbol, req.start, req.end, req.freq) - # # 保存到数据库 - # if items: - # self._save_klines_to_db(req.symbol, req.freq, items) + # 保存到数据库 + if items: + self._save_klines_to_db(req.symbol, req.freq, items) # 处理复权(简化实现,实际需要复权系数表) if req.adjust != AdjustType.NONE: