{"openapi":"3.1.0","info":{"title":"factor-eval API","description":"因子开发、IC 评估、回测、选股的一体化 HTTP API。\n\n**有状态服务**：进程内持有数据缓存，须先调用 `POST /data/load` 加载数据，之后的评估/回测/选股均基于该缓存。\n\n**多用户 + 认证**：先 `POST /auth/register` 注册（或 `/auth/login` 登录）拿到 token，之后所有请求带头 `Authorization: Bearer <token>`——自定义因子、因子库、评估任务按用户独立；行情数据全局共享。设环境变量 `FACTOR_EVAL_AUTH=off` 可关闭认证（退回 `X-User` 头免密模式，仅限本机调试）。\n\n错误响应统一为 `{\"detail\": \"错误信息\"}`。","version":"0.4.0"},"paths":{"/auth/register":{"post":{"tags":["认证"],"summary":"注册新用户","description":"注册并直接返回登录令牌。用户名唯一，密码只存 PBKDF2 哈希。限频：每 IP 每分钟 5 次。","operationId":"auth_register_auth_register_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/login":{"post":{"tags":["认证"],"summary":"登录获取令牌","description":"校验用户名密码，返回 Bearer token（默认 7 天有效，服务重启失效）。\n\n限频：每 IP 每分钟 20 次，且每个用户名每分钟 5 次（超限返回 429）。","operationId":"auth_login_auth_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/logout":{"post":{"tags":["认证"],"summary":"注销（吊销当前令牌）","operationId":"auth_logout_auth_logout_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/auth/change-password":{"post":{"tags":["认证"],"summary":"修改当前用户密码","description":"校验当前密码后更换密码，使旧令牌失效并返回新令牌。\n\n限频：每用户每分钟 5 次（超限返回 429），防止在线枚举当前密码。","operationId":"auth_change_password_auth_change_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangePasswordRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/profile":{"get":{"tags":["认证"],"summary":"获取当前用户的天梯资料","operationId":"auth_profile_get_auth_profile_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"put":{"tags":["认证"],"summary":"修改当前用户的天梯资料","operationId":"auth_profile_update_auth_profile_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/profiles/export":{"get":{"tags":["认证"],"summary":"一键导出用户私密资料与全部成绩（授权用户）","description":"只有通过 `FACTOR_EVAL_PROFILE_EXPORT_USERS` 环境变量配置的逗号分隔\n授权账号可以导出。ZIP 包含 users.csv 和 scores.csv。","operationId":"export_private_profiles_admin_profiles_export_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/auth/me":{"get":{"tags":["认证"],"summary":"当前登录用户","description":"返回当前 token 对应的用户名（用于前端校验 token 是否仍有效）。","operationId":"auth_me_auth_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health":{"get":{"tags":["系统"],"summary":"健康检查","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/compute/queue":{"get":{"tags":["系统"],"summary":"计算队列状态","operationId":"compute_queue_status_compute_queue_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/status":{"get":{"tags":["系统"],"summary":"服务状态","description":"返回数据是否已加载、股票数、日期范围、已注册自定义因子。","operationId":"status_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/data/symbols":{"get":{"tags":["数据"],"summary":"列出全市场股票代码","operationId":"list_symbols_data_symbols_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/data/current-symbols":{"get":{"tags":["数据"],"summary":"列出当前已加载的股票代码","description":"返回当前内存数据集中的完整股票列表，未加载数据时返回 400。","operationId":"list_current_symbols_data_current_symbols_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/data/universes":{"get":{"tags":["数据"],"summary":"列出可选股票池","description":"加载数据可选的股票池；可用 IF+IC 等组合值并自动去重。","operationId":"list_universes_data_universes_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/data/load":{"post":{"tags":["数据"],"summary":"加载行情数据视图","description":"从常驻全市场日线池创建当前用户的股票/日期视图。\n常驻模式不在此阶段预计算全部 Alpha158/Alpha360；后续评估、回测和选股\n会批量计算用户实际选择的因子，并在当前用户视图中缓存。","operationId":"load_data_data_load_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoadRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/factors":{"get":{"tags":["因子"],"summary":"列出可用因子","description":"返回内置 158 个 Alpha158 因子名 + 已注册自定义因子（名称 → 表达式）。","operationId":"list_factors_factors_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/factors/cache":{"get":{"tags":["因子"],"summary":"查询当前用户因子缓存","description":"返回当前登录用户的表达式因子和因子库元数据缓存审计摘要。\n\n只返回当前用户的条目数量、名称、路径（相对缓存根目录）和 SHA-256，\n不会把其他用户的因子内容暴露给调用方。","operationId":"factor_cache_status_factors_cache_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/factors/cache/restore":{"post":{"tags":["因子"],"summary":"恢复当前用户因子缓存","description":"从磁盘重新载入当前用户的 factors.json 和 factor_library.json。\n\n适用于服务启动后管理员恢复缓存文件的场景；已有文件不会被覆盖。\n控制面启用远程计算时，只有显式传 ``sync_remote=true`` 才会把恢复后的\n表达式因子同步到计算节点内存，默认不会跨节点发送用户因子内容。","operationId":"restore_factor_cache_factors_cache_restore_post","parameters":[{"name":"sync_remote","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Sync Remote"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/factors/categories":{"get":{"tags":["因子"],"summary":"列出滚动回测因子类别","description":"返回预定义因子类别、各类因子数和默认选取数。","operationId":"list_factor_categories_factors_categories_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/factors/define":{"post":{"tags":["因子"],"summary":"注册自定义因子","description":"注册 qlib 表达式因子。注册时会用单只股票试算校验，非法表达式立即返回 400。\n\n变量: `$open $high $low $close $volume $vwap`；\n函数: `Mean/Std/Max/Min/Sum/Ref/Delta/Corr/Rank/Slope/Rsqr/Resi/Log/Abs/Sign` 等。","operationId":"define_factor_factors_define_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DefineFactorRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/factors/define_bulk":{"post":{"tags":["因子"],"summary":"批量注册自定义因子","description":"批量注册 qlib 表达式因子（用户大批量上传用）。按批试算校验，\n非法表达式跳过并在 `errors` 中返回原因，其余正常注册；\n注册结果持久化，服务重启后自动恢复。","operationId":"define_factors_bulk_factors_define_bulk_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DefineFactorsBulkRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/factors/evaluate_stream":{"post":{"tags":["评估"],"summary":"流式评估大批量因子","description":"分批评估大批量因子（内存有界，适合万级以上自定义因子）。\n完整结果追加写入服务端 CSV 文件（绝对路径不回传给客户端），响应只返回\n按 |ICIR| 排序的前 `top_n` 条。因子极多时建议改用 `POST /jobs/evaluate`\n（带 batch_size）异步执行并轮询进度。","operationId":"evaluate_stream_factors_evaluate_stream_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EvaluateStreamRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/library":{"get":{"tags":["因子库"],"summary":"因子库列表","description":"返回因子库全部条目：`active`（在库因子名）与 `factors`\n（各因子的来源/入库时间/入库指标/状态，含已出库历史）。","operationId":"library_list_library_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/library/admit":{"post":{"tags":["因子库"],"summary":"因子入库筛选","description":"候选因子先过质量阈值（|IC均值| / |ICIR| / |t统计量|），再做相关性检查：\n与在库因子或已入选候选 |corr| > corr_max 即拒收。返回 `admitted`（入库）、\n`rejected`（拒收及原因）、`library_size`。","operationId":"library_admit_library_admit_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LibraryAdmitRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/library/review":{"post":{"tags":["因子库"],"summary":"因子出库复核","description":"用最近 `recent_months` 个月窗口复核在库因子：|ICIR| 低于阈值或方向翻转者\n出库（状态置 removed，历史保留，可重新入库）。返回 `removed` / `kept`。","operationId":"library_review_library_review_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LibraryReviewRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/library/remove":{"post":{"tags":["因子库"],"summary":"手动出库","description":"将指定因子手动出库（状态置 removed，历史记录保留）。","operationId":"library_remove_library_remove_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LibraryRemoveRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/factors/correlation":{"post":{"tags":["评估"],"summary":"因子两两相关矩阵","description":"逐日截面 rank 相关（跨期 pooled）。返回 `factors`（因子名顺序）与\n`matrix`（N×N 嵌套数组，与 factors 对齐；无法计算的位置为 null）。","operationId":"factor_correlation_factors_correlation_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CorrelationRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/factors/prune":{"post":{"tags":["评估"],"summary":"相关性剔除","description":"先对候选池做 IC 评估（质量 = RankIC 的 ICIR），再按 |ICIR| 降序贪心剔除：\n因子与已保留因子的 |corr| 超过 `corr_threshold` 即剔除，冲突时保留质量更高者。\n返回 `kept`（保留因子）、`dropped`（剔除因子及冲突对象/双方质量）、\n`quality`（各因子 ICIR）。","operationId":"prune_factors_factors_prune_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PruneRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/factors/score":{"post":{"tags":["评估"],"summary":"多因子截面打分","description":"多因子加权截面打分，返回 `scores`（全市场完整得分表，按分数降序，\n记录含 symbol/score/close）。method=zscore 或 rank（抗异常值）。","operationId":"factor_score_factors_score_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScoreRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/factors/evaluate":{"post":{"tags":["评估"],"summary":"评估指定因子","description":"对指定因子做 IC 评估，返回按 |ICIR| 降序的汇总记录\n（IC均值 / ICIR / t统计量 / IC>0占比 / 多空收益 为 RankIC 口径，\n另含 PearsonIC均值 / PearsonICIR / IC标准差 等 Pearson 口径列）。","operationId":"evaluate_factors_evaluate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EvaluateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/factors/evaluate_all":{"post":{"tags":["评估"],"summary":"批量评估因子集","description":"对指定因子集做 IC 评估（向量化实现，秒级完成）。\nfactor_set=alpha360 或 all 需要 load_data 时 alpha360=true。","operationId":"evaluate_all_factors_evaluate_all_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EvaluateAllRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/jobs/evaluate":{"post":{"tags":["评估"],"summary":"异步启动 IC 评估任务","description":"后台执行 IC 评估并立即返回 `job_id`，用 `GET /jobs/{job_id}`\n轮询进度（done/total/elapsed_s/eta_s），完成后在同一响应中取 `result`。\n设置 `batch_size` 后走流式评估（内存有界、CSV 落盘），适合大批量因子。","operationId":"start_eval_job_jobs_evaluate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EvalJobRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/jobs/{job_id}":{"get":{"tags":["评估"],"summary":"查询评估任务进度与结果","description":"返回 `status`(running/done/error)、`done`/`total`/`current`、\n`elapsed_s`（已用秒）、`eta_s`（预计剩余秒，刚启动时为 null）、\n完成后附 `result`（同 /factors/evaluate 响应）。","operationId":"get_eval_job_jobs__job_id__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/backtest/quantile":{"post":{"tags":["回测"],"summary":"多因子合成分组回测","description":"将多个因子按权重合成打分，分组回测。返回 `metrics`（绩效指标）\n与 `nav`（完整净值序列，{日期: 净值}）。","operationId":"backtest_quantile_backtest_quantile_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/backtest/ptrade/upload":{"post":{"tags":["回测"],"summary":"上传 PTrade pool15 策略并直接运行回测","description":"提取兼容配置和纯函数后交给 TzQuant 引擎执行。\n\n上传源码只存在于本次请求的临时目录，结束后立即删除。服务端不会执行\ninitialize/handle_data 或任意顶层代码；当前仅支持 pool15 兼容接口。","operationId":"backtest_ptrade_upload_backtest_ptrade_upload_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_backtest_ptrade_upload_backtest_ptrade_upload_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/backtest/walk_forward/template":{"get":{"tags":["回测"],"summary":"获取正式成绩提交模板","description":"返回当前用户的正式天梯合格提交 JSON、固定参数和调用示例。","operationId":"walk_forward_submission_template_backtest_walk_forward_template_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/scores/submission-template":{"get":{"tags":["回测"],"summary":"获取正式成绩提交模板（别名）","description":"与 /backtest/walk_forward/template 相同的兼容别名。","operationId":"score_submission_template_scores_submission_template_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/backtest/walk_forward":{"post":{"tags":["回测"],"summary":"滚动验证回测","description":"训练期按 ICIR 选因子定权重，样本外信号交由 Qlib 引擎连续执行。\n返回 `engine=qlib`、`metrics`、`nav` 及 `windows`。","operationId":"walk_forward_backtest_walk_forward_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalkForwardRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/scores/submit":{"post":{"tags":["回测"],"summary":"提交滚动回测成绩","description":"服务端重算滚动回测并追加一条成绩，不覆盖该选手的历史提交。","operationId":"submit_walk_forward_score_scores_submit_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalkForwardRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/scores/mine":{"get":{"tags":["回测"],"summary":"我的滚动回测提交记录","description":"返回当前选手的多次成绩提交，按时间倒序。","operationId":"my_score_submissions_scores_mine_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/scores/curve/{submission_id}":{"get":{"tags":["回测"],"summary":"成绩净值曲线","description":"返回一条成绩记录的降采样净值曲线：dates / nav（策略）/ bench（基准，可为 null）。","operationId":"score_nav_curve_scores_curve__submission_id__get","parameters":[{"name":"submission_id","in":"path","required":true,"schema":{"type":"string","title":"Submission Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/scores/leaderboard":{"get":{"tags":["回测"],"summary":"实时天梯排行榜","description":"按每位选手的历史最高标准分返回实时排名。","operationId":"score_leaderboard_scores_leaderboard_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/selection":{"post":{"tags":["选股"],"summary":"多因子加权截面选股","description":"按截面 z-score 加权打分排序，先按最低成交额和上市天数过滤，返回 `date`（截面日）、\n`long_top`（多头推荐）与 `short_bottom`（空头警示），记录含 symbol/score/close。","operationId":"selection_selection_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SelectRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AuthRequest":{"properties":{"username":{"type":"string","title":"Username","description":"用户名（字母/数字/下划线/连字符，最长 32）","examples":["alice"]},"password":{"type":"string","title":"Password","description":"密码（至少 6 位）"}},"type":"object","required":["username","password"],"title":"AuthRequest"},"BacktestRequest":{"properties":{"names":{"items":{"type":"string"},"type":"array","minItems":1,"title":"Names","description":"参与合成的因子名"},"weights":{"anyOf":[{"additionalProperties":{"type":"number"},"type":"object"},{"type":"null"}],"title":"Weights","description":"{因子名: 权重}（符号即方向）；null 为等权正向"},"long_short":{"type":"boolean","title":"Long Short","default":true},"periods":{"type":"integer","minimum":1.0,"title":"Periods","description":"调仓周期（交易日）","default":5},"quantiles":{"type":"integer","minimum":2.0,"title":"Quantiles","description":"分组数","default":5},"long_exposure":{"type":"number","maximum":1.0,"exclusiveMinimum":0.0,"title":"Long Exposure","description":"股票多头名义敞口","default":1.0},"short_exposure":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Short Exposure","description":"期指指数空头敞口；null 时与多头一致"},"futures_cost":{"type":"number","exclusiveMaximum":1.0,"minimum":0.0,"title":"Futures Cost","description":"期指指数代理腿单边成本","default":0.0002},"benchmark":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Benchmark","description":"空头指数/基准：IC/IF/IH/IM 期指主力连续；long_short=true 时必填"}},"type":"object","required":["names"],"title":"BacktestRequest"},"Body_backtest_ptrade_upload_backtest_ptrade_upload_post":{"properties":{"strategy":{"type":"string","contentMediaType":"application/octet-stream","title":"Strategy","description":"UTF-8 编码的 PTrade .py 策略文件"},"start":{"type":"string","title":"Start","description":"回测开始日 YYYY-MM-DD"},"end":{"type":"string","title":"End","description":"回测结束日 YYYY-MM-DD"},"data_source":{"type":"string","title":"Data Source","description":"clickhouse 或 qlib","default":"clickhouse"},"account":{"type":"number","title":"Account","description":"初始资金，默认 1000 万元","default":10000000.0},"dynamic_limits":{"type":"boolean","title":"Dynamic Limits","description":"使用 ClickHouse 官方每日涨跌停","default":true}},"type":"object","required":["strategy","start","end"],"title":"Body_backtest_ptrade_upload_backtest_ptrade_upload_post"},"ChangePasswordRequest":{"properties":{"current_password":{"type":"string","title":"Current Password","description":"当前密码"},"new_password":{"type":"string","title":"New Password","description":"新密码（至少 6 位）"}},"type":"object","required":["current_password","new_password"],"title":"ChangePasswordRequest"},"CorrelationRequest":{"properties":{"names":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Names","description":"因子名列表；null 表示对 factor_set 整个因子集计算"},"factor_set":{"type":"string","title":"Factor Set","description":"names 为 null 时的因子集：alpha158 / alpha360 / all","default":"alpha158"}},"type":"object","title":"CorrelationRequest"},"DefineFactorRequest":{"properties":{"name":{"type":"string","title":"Name","description":"因子名（自动转大写）"},"expression":{"type":"string","title":"Expression","description":"qlib 表达式，如 ($close-$open)/$close"}},"type":"object","required":["name","expression"],"title":"DefineFactorRequest"},"DefineFactorsBulkRequest":{"properties":{"factors":{"additionalProperties":{"type":"string"},"type":"object","title":"Factors","description":"{因子名: qlib 表达式} 字典，批量注册","examples":[{"MOM5":"$close/Ref($close,5)-1","VOLR5":"Mean($volume,5)/Mean($volume,20)"}]}},"type":"object","required":["factors"],"title":"DefineFactorsBulkRequest"},"EvalJobRequest":{"properties":{"names":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Names","description":"因子名列表；null 表示评估 factor_set 整个因子集"},"periods":{"items":{"type":"integer"},"type":"array","title":"Periods","description":"前瞻收益持有期（交易日）","default":[1,5,10]},"quantiles":{"type":"integer","title":"Quantiles","description":"分组数","default":5},"top_n":{"type":"integer","title":"Top N","description":"按 |ICIR| 排序后返回的条数","default":50},"factor_set":{"type":"string","title":"Factor Set","description":"names 为 null 时评估的因子集：alpha158 / alpha360 / all / custom","default":"alpha158"},"batch_size":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Batch Size","description":"设置后走流式评估（分批、内存有界、CSV 落盘），适合大批量因子"},"n_jobs":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"N Jobs","description":"分块并行线程数（默认 min(4, 核数)）；内存随线程数增长"}},"type":"object","title":"EvalJobRequest"},"EvaluateAllRequest":{"properties":{"periods":{"items":{"type":"integer"},"type":"array","title":"Periods","description":"前瞻收益持有期（交易日）","default":[1,5,10]},"quantiles":{"type":"integer","title":"Quantiles","description":"分组数","default":5},"top_n":{"type":"integer","title":"Top N","description":"按 |ICIR| 排序后返回的条数","default":50},"factor_set":{"type":"string","title":"Factor Set","description":"因子集：alpha158 / alpha360 / all（需加载时开启 alpha360）","default":"alpha158"}},"type":"object","title":"EvaluateAllRequest"},"EvaluateRequest":{"properties":{"names":{"items":{"type":"string"},"type":"array","title":"Names","description":"因子名列表（Alpha158 或已注册自定义因子）","examples":[["ROC5","KMID"]]},"periods":{"items":{"type":"integer"},"type":"array","title":"Periods","description":"前瞻收益持有期（交易日）","default":[1,5,10]},"quantiles":{"type":"integer","title":"Quantiles","description":"分组数","default":5},"top_n":{"type":"integer","title":"Top N","description":"按 |ICIR| 排序后返回的条数","default":50}},"type":"object","required":["names"],"title":"EvaluateRequest"},"EvaluateStreamRequest":{"properties":{"names":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Names","description":"因子名列表；null 表示按 factor_set 取全部"},"factor_set":{"type":"string","title":"Factor Set","description":"names 为 null 时的因子集：alpha158 / alpha360 / all / custom（全部自定义因子）","default":"custom"},"batch_size":{"type":"integer","title":"Batch Size","description":"每批评估的因子数（内存随批次有界）","default":200},"periods":{"items":{"type":"integer"},"type":"array","title":"Periods","description":"前瞻收益持有期（交易日）","default":[1,5,10]},"quantiles":{"type":"integer","title":"Quantiles","description":"分组数","default":5},"top_n":{"type":"integer","title":"Top N","description":"按 |ICIR| 排序后返回的条数（完整结果由服务端 CSV 落盘）","default":50},"include_pearson":{"type":"boolean","title":"Include Pearson","description":"同时输出 Pearson IC 口径（耗时约 +30%）","default":false},"n_jobs":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"N Jobs","description":"分块并行线程数（默认 min(4, 核数)）；内存随线程数增长"}},"type":"object","title":"EvaluateStreamRequest"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"LibraryAdmitRequest":{"properties":{"names":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Names","description":"候选因子名列表；null 表示按 factor_set 取全部"},"factor_set":{"type":"string","title":"Factor Set","description":"names 为 null 时的候选集：alpha158 / alpha360 / all / custom","default":"custom"},"abs_ic_min":{"type":"number","title":"Abs Ic Min","description":"入库阈值：|IC均值| 下限","default":0.02},"abs_icir_min":{"type":"number","title":"Abs Icir Min","description":"入库阈值：|ICIR| 下限","default":0.3},"abs_t_min":{"type":"number","title":"Abs T Min","description":"入库阈值：|t统计量| 下限","default":2.0},"corr_max":{"type":"number","title":"Corr Max","description":"入库阈值：与在库/已入选因子 |corr| 上限","default":0.7},"max_active":{"type":"integer","title":"Max Active","description":"库常驻因子容量上限（建议 100-200）；超容量按 |ICIR| 末位淘汰","default":150},"periods":{"items":{"type":"integer"},"type":"array","title":"Periods","description":"评估用的前瞻收益持有期","default":[1,5,10]},"quantiles":{"type":"integer","title":"Quantiles","description":"评估用的分组数","default":5},"batch_size":{"type":"integer","title":"Batch Size","description":"流式评估批次大小","default":200}},"type":"object","title":"LibraryAdmitRequest"},"LibraryRemoveRequest":{"properties":{"names":{"items":{"type":"string"},"type":"array","title":"Names","description":"要手动出库的因子名列表"},"reason":{"type":"string","title":"Reason","description":"出库原因（记入历史）","default":"手动出库"}},"type":"object","required":["names"],"title":"LibraryRemoveRequest"},"LibraryReviewRequest":{"properties":{"recent_months":{"type":"integer","title":"Recent Months","description":"复核窗口：最近 N 个月","default":6},"abs_icir_min":{"type":"number","title":"Abs Icir Min","description":"出库阈值：最近窗口 |ICIR| 低于该值出库","default":0.1},"check_flip":{"type":"boolean","title":"Check Flip","description":"ICIR 方向翻转（与全样本符号相反）也出库","default":true},"periods":{"items":{"type":"integer"},"type":"array","title":"Periods","description":"评估用的前瞻收益持有期","default":[1,5,10]},"quantiles":{"type":"integer","title":"Quantiles","description":"评估用的分组数","default":5}},"type":"object","title":"LibraryReviewRequest"},"LoadRequest":{"properties":{"limit":{"type":"integer","title":"Limit","description":"全市场取前 N 只（symbols/universe 为空时生效）；0 表示全部股票","default":500,"examples":[200]},"symbols":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Symbols","description":"显式股票列表，优先级最高","examples":[["000001.SZ","600519.SH"]]},"universe":{"anyOf":[{"type":"string"},{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Universe","description":"品种或品种列表：IF=沪深300, IH=上证50, IC=中证500, IM=中证1000, ALL=全品种；列表自动合并去重；兼容 IF+IC 字符串；优先于 limit（成分为官网当日快照）","examples":[["IF","IC"],"IF+IC"]},"start":{"type":"string","title":"Start","description":"天梯统一回测起始日","default":"2021-08-21"},"end":{"type":"string","title":"End","description":"天梯统一回测截止日","default":"2026-08-20"},"alpha360":{"type":"boolean","title":"Alpha360","description":"同时缓存 Alpha360 因子（计算量约为 Alpha158 的 2 倍）","default":false},"use_cache":{"type":"boolean","title":"Use Cache","description":"相同参数重复加载时命中本地磁盘缓存（秒级）；false 强制重新拉取并刷新缓存","default":true}},"type":"object","title":"LoadRequest"},"ProfileRequest":{"properties":{"team_name":{"type":"string","title":"Team Name","description":"团队名称（最长 40 字符）","default":""},"logo_data_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Data Url","description":"PNG/JPEG/WebP Logo data URL，解码后最大 128KB"},"phone":{"type":"string","maxLength":64,"title":"Phone","description":"必填的私密联系电话，仅用于领奖核对"},"email":{"type":"string","maxLength":254,"title":"Email","description":"必填的私密联系邮箱，仅用于领奖核对"}},"type":"object","required":["phone","email"],"title":"ProfileRequest"},"PruneRequest":{"properties":{"names":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Names","description":"候选因子名列表；null 表示 factor_set 整个因子集"},"factor_set":{"type":"string","title":"Factor Set","description":"names 为 null 时的因子集：alpha158 / alpha360 / all","default":"alpha158"},"corr_threshold":{"type":"number","title":"Corr Threshold","description":"相关阈值：与已保留因子 |corr| 超过该值即剔除","default":0.7},"periods":{"items":{"type":"integer"},"type":"array","title":"Periods","description":"质量评估（ICIR）用的前瞻收益持有期","default":[1,5,10]},"quantiles":{"type":"integer","title":"Quantiles","description":"质量评估用的分组数","default":5}},"type":"object","title":"PruneRequest"},"ScoreRequest":{"properties":{"names":{"items":{"type":"string"},"type":"array","title":"Names","description":"参与打分的因子名列表"},"weights":{"anyOf":[{"additionalProperties":{"type":"number"},"type":"object"},{"type":"null"}],"title":"Weights","description":"{因子名: 权重}（符号即方向）；null 为等权正向"},"date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date","description":"截面日期（YYYY-MM-DD），null 为最新交易日"},"method":{"type":"string","title":"Method","description":"打分口径：zscore（截面标准化）/ rank（截面 rank 归一，抗异常值）","default":"zscore"}},"type":"object","required":["names"],"title":"ScoreRequest"},"SelectRequest":{"properties":{"names":{"items":{"type":"string"},"type":"array","title":"Names","description":"参与打分的因子名列表"},"weights":{"anyOf":[{"additionalProperties":{"type":"number"},"type":"object"},{"type":"null"}],"title":"Weights","description":"{因子名: 权重}；null 为等权正向"},"top_n":{"type":"integer","title":"Top N","description":"多头/空头各返回的数量","default":20},"date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date","description":"截面日期（YYYY-MM-DD），null 为最新交易日"},"min_amount_cny":{"type":"number","minimum":0.0,"title":"Min Amount Cny","description":"截面日最低成交额（元）；0 表示不限制","default":0},"min_listed_days":{"type":"integer","minimum":0.0,"title":"Min Listed Days","description":"最低上市自然日数；0 表示不限制","default":0}},"type":"object","required":["names"],"title":"SelectRequest"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"WalkForwardRequest":{"properties":{"names":{"items":{"type":"string"},"type":"array","minItems":1,"title":"Names","description":"候选因子池（训练期从中做稳定性筛选）；提交成绩时不少于 10 个"},"train_months":{"type":"integer","minimum":10.0,"title":"Train Months","description":"训练窗口月数（不得少于 10）","default":12},"test_months":{"type":"integer","minimum":1.0,"title":"Test Months","description":"测试窗口月数","default":3},"step_months":{"type":"integer","minimum":1.0,"title":"Step Months","description":"窗口滚动步长（月）","default":3},"long_short":{"type":"boolean","title":"Long Short","description":"多空（false 为纯多头）","default":true},"quantiles":{"type":"integer","minimum":2.0,"title":"Quantiles","description":"分组数","default":5},"rebalance_periods":{"type":"integer","minimum":1.0,"title":"Rebalance Periods","description":"调仓周期（交易日）","default":5},"long_exposure":{"type":"number","maximum":1.0,"exclusiveMinimum":0.0,"title":"Long Exposure","description":"Qlib 股票多头风险敞口","default":0.95},"short_exposure":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Short Exposure","description":"期指指数空头敞口；null 时与多头一致"},"futures_cost":{"type":"number","exclusiveMaximum":1.0,"minimum":0.0,"title":"Futures Cost","description":"期指指数代理腿单边成本","default":0.0002},"category_counts":{"anyOf":[{"additionalProperties":{"type":"integer"},"type":"object"},{"type":"null"}],"title":"Category Counts","description":"正式天梯必须为 null；正式提交不允许自定义 category_counts"},"uncategorized_count":{"type":"integer","minimum":0.0,"title":"Uncategorized Count","description":"Alpha360/自定义等未分类因子的选取数","default":5},"selection_method":{"type":"string","pattern":"^(robust|legacy)$","title":"Selection Method","description":"legacy=仅按 |ICIR| 排序（默认）；robust=稳定性和去相关筛选","default":"legacy"},"min_abs_icir":{"type":"number","minimum":0.0,"title":"Min Abs Icir","description":"最低 |ICIR| 及半样本稳定分数","default":0.1},"min_abs_ic":{"type":"number","minimum":0.0,"title":"Min Abs Ic","description":"最低 |IC|","default":0.005},"corr_threshold":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Corr Threshold","description":"因子截面秩相关剔除阈值","default":0.75},"weight_shrinkage":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Weight Shrinkage","description":"ICIR 权重向等权收缩强度","default":0.5},"submit_score":{"type":"boolean","title":"Submit Score","description":"是否将本次标准分保存为一条正式天梯成绩","default":false},"official_universe":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Official Universe","description":"正式提交内部股票池标记；由服务端强制使用官方 IM 股票池，用户不可自定义"},"submission_key":{"anyOf":[{"type":"string","maxLength":80},{"type":"null"}],"title":"Submission Key","description":"提交幂等键；同一用户的相同键只保存一条成绩"},"benchmark":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Benchmark","description":"空头指数/基准：IC/IF/IH/IM 期指主力连续；long_short=true 时必填"}},"type":"object","required":["names"],"title":"WalkForwardRequest"}}},"tags":[{"name":"认证","description":"注册 / 登录 / 令牌"},{"name":"系统","description":"健康检查与服务状态"},{"name":"数据","description":"行情数据加载（ClickHouse → qlib 缓存）"},{"name":"因子","description":"因子列表与自定义因子注册（qlib 表达式、批量注册或直接注册因子值）"},{"name":"评估","description":"因子 IC / ICIR / RankIC / 多空收益评估、相关性分析与剔除、截面打分"},{"name":"因子库","description":"因子入库/出库筛选：质量阈值 + 相关性检查，最近窗口复核出库"},{"name":"回测","description":"分组回测与滚动验证，返回绩效指标与净值序列"},{"name":"选股","description":"多因子加权截面打分选股"}]}