Initial commit: cc-cursor 全链路量化研究平台
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>
This commit is contained in:
@@ -0,0 +1,125 @@
|
||||
import pandas as pd
|
||||
# 将项目根目录添加到 sys.path
|
||||
#project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||
#sys.path.append(project_root)
|
||||
|
||||
# 导入当站目录的config文件
|
||||
try:
|
||||
# 尝试相对导入(作为包的一部分)
|
||||
from .config import TS_TOKEN, START_DATE, END_DATE
|
||||
from .stock_utils import dataCorrect,get_trading_dates,tscodeCheck
|
||||
except (ImportError, SystemError):
|
||||
# 失败则使用绝对导入(直接运行脚本)
|
||||
from config import TS_TOKEN, START_DATE, END_DATE
|
||||
from stock_utils import dataCorrect,get_trading_dates,tscodeCheck
|
||||
|
||||
from .data_source import get_tushare_pro
|
||||
pro = get_tushare_pro()
|
||||
|
||||
def getStockMargin(tscode: str, start_date: str=START_DATE, end_date: str=END_DATE) -> pd.DataFrame:
|
||||
"""
|
||||
获取指定股票代码在时间区间内的每日融资明细数据
|
||||
|
||||
参数:
|
||||
tscode (str): 股票代码,格式如 '600000.SH'
|
||||
start_date (str): 开始日期,格式 'YYYY-MM-DD'
|
||||
end_date (str): 结束日期,格式 'YYYY-MM-DD'
|
||||
|
||||
返回:
|
||||
pd.DataFrame: 包含融资明细数据的DataFrame,列包括:
|
||||
- trade_date: 交易日期
|
||||
- tscode: 股票代码
|
||||
- rzye: 融资余额(元)
|
||||
- rqye float 融券余额(元)
|
||||
- rzmre float 融资买入额(元)
|
||||
- rqyl float 融券余量(股)
|
||||
- rzche float 融资偿还额(元)
|
||||
- rqchl float 融券偿还量(股)
|
||||
- rqmcl float 融券卖出量(股,份,手)
|
||||
- rzrqye float 融资融券余额(元)
|
||||
|
||||
异常处理:
|
||||
- 若tushare接口调用失败,打印错误信息并返回空DataFrame
|
||||
"""
|
||||
try:
|
||||
tscode=tscodeCheck(tscode)
|
||||
# 调用tushare接口
|
||||
df = pro.margin_detail(ts_code=tscode, start_date=start_date, end_date=end_date)
|
||||
cols=["rzye","rqye","rzmre","rqyl","rzche","rqchl","rqmcl","rzrqye"]
|
||||
df = dataCorrect(df,cols)
|
||||
if df.empty:
|
||||
print(f"未找到{tscode}在{start_date}至{end_date}期间的融资数据")
|
||||
return df
|
||||
except Exception as e:
|
||||
print(f"获取融资数据失败: {e}")
|
||||
return pd.DataFrame()
|
||||
|
||||
def getDailyMargin(trade_date: str = None, start_date: str = None, end_date: str = None, exchange_id: str = None) -> pd.DataFrame:
|
||||
"""
|
||||
获取指定日期或时间区间内的每日融资明细数据
|
||||
|
||||
参数:
|
||||
trade_date (str, optional): 指定单个交易日,格式 'YYYY-MM-DD'。与start_date/end_date互斥
|
||||
start_date (str, optional): 开始日期,格式 'YYYY-MM-DD'。需与end_date同时使用
|
||||
end_date (str, optional): 结束日期,格式 'YYYY-MM-DD'。需与start_date同时使用
|
||||
exchange_id (str, optional): 交易所代码,如 'SSE'(上交所)、'SZSE'(深交所)
|
||||
|
||||
返回:
|
||||
pd.DataFrame: 包含每日融资明细数据的DataFrame,列包括:
|
||||
- exchange_id: 交易所代码
|
||||
- trade_date: 交易日期
|
||||
- rzye: 融资余额(元)
|
||||
- rqye: 融券余额(元)
|
||||
- rzmre: 融资买入额(元)
|
||||
- rqyl: 融券余量(股)
|
||||
- rzche: 融资偿还额(元)
|
||||
- rqchl: 融券偿还量(股)
|
||||
- rqmcl: 融券卖出量(股,份,手)
|
||||
- rzrqye: 融资融券余额(元)
|
||||
|
||||
异常处理:
|
||||
- 若参数组合无效,打印错误信息并返回空DataFrame
|
||||
- 若tushare接口调用失败,打印错误信息并返回空DataFrame
|
||||
"""
|
||||
try:
|
||||
# 日期格式转换
|
||||
if trade_date:
|
||||
trade_date = trade_date.replace("-", "")
|
||||
if start_date:
|
||||
start_date = start_date.replace("-", "")
|
||||
if end_date:
|
||||
end_date = end_date.replace("-", "")
|
||||
# 参数校验
|
||||
if trade_date and (start_date or end_date):
|
||||
print("错误:trade_date不能与start_date/end_date同时使用")
|
||||
return pd.DataFrame()
|
||||
|
||||
if (start_date and not end_date) or (end_date and not start_date):
|
||||
print("错误:start_date和end_date必须同时使用")
|
||||
return pd.DataFrame()
|
||||
|
||||
# 调用tushare接口
|
||||
df = pro.margin(exchange_id=exchange_id,
|
||||
trade_date=trade_date,
|
||||
start_date=start_date,
|
||||
end_date=end_date)
|
||||
|
||||
if df.empty:
|
||||
print("未找到符合条件的融资数据")
|
||||
return df
|
||||
except Exception as e:
|
||||
print(f"获取每日融资数据失败: {e}")
|
||||
return pd.DataFrame()
|
||||
|
||||
if __name__ == "__main__":
|
||||
# 测试getStockMargin函数
|
||||
test_code = "600000.SH"
|
||||
test_start = "20150101"
|
||||
test_end = "20250731"
|
||||
|
||||
result = getStockMargin(test_code, test_start, test_end)
|
||||
print("返回结果示例:")
|
||||
print(result.head())
|
||||
|
||||
if not result.empty:
|
||||
print(f"\n返回数据行数: {len(result)}")
|
||||
Reference in New Issue
Block a user