{"openapi":"3.1.0","info":{"title":"easy-tdx API","description":"通达信行情数据 REST + WebSocket API","version":"1.0.0"},"paths":{"/api/v1/security/count":{"get":{"tags":["market"],"summary":"Security Count","description":"获取市场证券总数。","operationId":"security_count_api_v1_security_count_get","parameters":[{"name":"market","in":"query","required":true,"schema":{"type":"string","description":"市场: SZ, SH, BJ","title":"Market"},"description":"市场: SZ, SH, BJ"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CountResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/security/list":{"get":{"tags":["market"],"summary":"Security List","description":"获取证券列表（每页约1000条）。","operationId":"security_list_api_v1_security_list_get","parameters":[{"name":"market","in":"query","required":true,"schema":{"type":"string","description":"市场: SZ, SH, BJ","title":"Market"},"description":"市场: SZ, SH, BJ"},{"name":"start","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"分页起始位置","default":0,"title":"Start"},"description":"分页起始位置"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataFrameResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/security/list-all":{"get":{"tags":["market"],"summary":"Security List All","description":"获取沪深 A 股完整列表。","operationId":"security_list_all_api_v1_security_list_all_get","parameters":[{"name":"pages","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"拉取页数（每个市场每页1000条）","default":1,"title":"Pages"},"description":"拉取页数（每个市场每页1000条）"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataFrameResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/quotes":{"post":{"tags":["market"],"summary":"Security Quotes","description":"批量获取实时五档行情（最多80只/次）。","operationId":"security_quotes_api_v1_quotes_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataFrameResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/market/stat":{"get":{"tags":["market"],"summary":"Market Stat","description":"获取 A 股全市场涨跌统计。","operationId":"market_stat_api_v1_market_stat_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataFrameResponse"}}}}}}},"/api/v1/market/session":{"get":{"tags":["market"],"summary":"Market Session","description":"A 股有效行情时段判断（供前端自动刷新门控校准）。\n\n窗口 09:15~11:30、13:00~15:05（含集合竞价缓冲，午休除外），周一至周五。\n节假日不做日历判断——盘外误判为盘中只会多拉一次快照，无副作用。","operationId":"market_session_api_v1_market_session_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Market Session Api V1 Market Session Get"}}}}}}},"/api/v1/market/core-leaders":{"get":{"tags":["market"],"summary":"Core Leaders","description":"核心龙头池（159 只，按东方财富全行业龙头名单整理）。\n\n数据资产供前端展示/导出；扫描场景走 ``universe=\"core\"``（screen scan\n与 /market/strength 均支持）。","operationId":"core_leaders_api_v1_market_core_leaders_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataFrameResponse"}}}}}}},"/api/v1/fund-flow":{"get":{"tags":["market"],"summary":"Fund Flow","description":"获取个股当日资金流向。\n\n口径注意：按聚合后单笔成交额分档，与东财/同花顺\"主力净流入\"不可比（Issue #55）。","operationId":"fund_flow_api_v1_fund_flow_get","parameters":[{"name":"market","in":"query","required":true,"schema":{"type":"string","description":"市场: SZ, SH","title":"Market"},"description":"市场: SZ, SH"},{"name":"code","in":"query","required":true,"schema":{"type":"string","minLength":6,"maxLength":6,"description":"6位股票代码","title":"Code"},"description":"6位股票代码"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataFrameResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/fund-flow/history":{"get":{"tags":["market"],"summary":"History Fund Flow","description":"获取个股历史日线资金流向。\n\n口径注意：按聚合后单笔成交额分档，与东财/同花顺\"主力净流入\"不可比（Issue #55）。","operationId":"history_fund_flow_api_v1_fund_flow_history_get","parameters":[{"name":"market","in":"query","required":true,"schema":{"type":"string","description":"市场: SZ, SH","title":"Market"},"description":"市场: SZ, SH"},{"name":"code","in":"query","required":true,"schema":{"type":"string","minLength":6,"maxLength":6,"description":"6位股票代码","title":"Code"},"description":"6位股票代码"},{"name":"start","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Start"}},{"name":"count","in":"query","required":false,"schema":{"type":"integer","maximum":800,"minimum":1,"default":100,"title":"Count"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataFrameResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/market/strength":{"get":{"tags":["market"],"summary":"Market Strength","description":"全市场强势股排名（基于本地通达信 .day 日线文件）。\n\n按 5/20/60 日涨幅加权合成强势分。三种预设：\n\n- **steady**: 中长期稳健（60日主导 + 波动率惩罚），选出稳着涨的票\n- **breakout**: 近期妖股爆发（5日主导，纯涨幅），选出短期最猛的票\n- **balanced**: 三周期均衡 + 波动率调整\n\n注意：需要本地 vipdoc 数据，扫描 ~5000 只约 30-60 秒。","operationId":"market_strength_api_v1_market_strength_get","parameters":[{"name":"preset","in":"query","required":false,"schema":{"type":"string","description":"预设模式: steady(中长期稳健) / breakout(近期妖股) / balanced(均衡)","default":"steady","title":"Preset"},"description":"预设模式: steady(中长期稳健) / breakout(近期妖股) / balanced(均衡)"},{"name":"w5","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"自定义 5 日权重（覆盖预设）","title":"W5"},"description":"自定义 5 日权重（覆盖预设）"},{"name":"w20","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"自定义 20 日权重（覆盖预设）","title":"W20"},"description":"自定义 20 日权重（覆盖预设）"},{"name":"w60","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"自定义 60 日权重（覆盖预设）","title":"W60"},"description":"自定义 60 日权重（覆盖预设）"},{"name":"vol_adjusted","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"波动率惩罚开关（覆盖预设）","title":"Vol Adjusted"},"description":"波动率惩罚开关（覆盖预设）"},{"name":"top_n","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"description":"返回前 N 名","default":50,"title":"Top N"},"description":"返回前 N 名"},{"name":"universe","in":"query","required":false,"schema":{"type":"string","description":"范围: all/sh/sz/core（core=核心龙头池159只）","default":"all","title":"Universe"},"description":"范围: all/sh/sz/core（core=核心龙头池159只）"},{"name":"min_listed_days","in":"query","required":false,"schema":{"type":"integer","minimum":30,"description":"最小上市天数","default":65,"title":"Min Listed Days"},"description":"最小上市天数"},{"name":"min_amount","in":"query","required":false,"schema":{"type":"number","minimum":0,"description":"最近 5 日日均成交额下限（元）","default":0.0,"title":"Min Amount"},"description":"最近 5 日日均成交额下限（元）"},{"name":"vipdoc","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"离线数据目录（默认自动检测）","title":"Vipdoc"},"description":"离线数据目录（默认自动检测）"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataFrameResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/bars":{"get":{"tags":["bars"],"summary":"Security Bars","description":"获取股票K线数据（MAC 协议，支持复权）。\n\n优先走 AsyncMacClient.get_stock_kline（支持 NONE/QFQ/HFQ 复权 + QFQ 负价兜底）；\nMAC 主机未连接时自动回退 AsyncTdxClient.get_security_bars（无复权，adjust 参数忽略）。\n输出契约与旧版一致：日线返回 ``date`` 列，分钟线返回 ``datetime`` 列。\n\n``category=MIN_120`` 为 120 分钟线：MAC 原生 ``Period.MINS × times=120``\n优先，失败则取 2 倍 60M 数据相邻两根聚合（open=first/high=max/low=min/\nclose=last/vol·amount=sum），标准客户端回退路径最多合成 400 根。\n\n每根 bar 附带衍生字段：``pre_close``（前收，首根=本根开盘）、``change``、\n``change_pct``、``amplitude_pct``（振幅%）。pre_close ≤ 0.01 时按 0.01\n兜底（QFQ 复权后早期价格可能为 0/负）。\n\nvol 单位：分钟线/日线 = 成交量(股)；周/月/季/年线服务端原样返回真实\n成交量/100，回退路径（标准 TdxClient）已 ×100 还原为股。","operationId":"security_bars_api_v1_bars_get","parameters":[{"name":"market","in":"query","required":true,"schema":{"type":"string","description":"市场: SZ, SH, BJ","title":"Market"},"description":"市场: SZ, SH, BJ"},{"name":"code","in":"query","required":true,"schema":{"type":"string","minLength":6,"maxLength":6,"title":"Code"}},{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"K线周期: MIN_1, MIN_5, MIN_15, MIN_30, MIN_60, MIN_120(120分钟), DAY, WEEK, MONTH, SEASON, YEAR","default":"DAY","title":"Category"},"description":"K线周期: MIN_1, MIN_5, MIN_15, MIN_30, MIN_60, MIN_120(120分钟), DAY, WEEK, MONTH, SEASON, YEAR"},{"name":"start","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Start"}},{"name":"count","in":"query","required":false,"schema":{"type":"integer","maximum":800,"minimum":1,"default":800,"title":"Count"}},{"name":"bar_time","in":"query","required":false,"schema":{"type":"string","description":"时间戳: start=bar开始时间(默认) / end=bar结束时间(对齐Tushare)","default":"start","title":"Bar Time"},"description":"时间戳: start=bar开始时间(默认) / end=bar结束时间(对齐Tushare)"},{"name":"adjust","in":"query","required":false,"schema":{"type":"string","description":"复权: NONE=不复权 / QFQ=前复权(默认) / HFQ=后复权（需 MAC 客户端）","default":"QFQ","title":"Adjust"},"description":"复权: NONE=不复权 / QFQ=前复权(默认) / HFQ=后复权（需 MAC 客户端）"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataFrameResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/bars/index":{"get":{"tags":["bars"],"summary":"Index Bars","description":"获取指数K线数据。\n\nvol 单位：日线/周线/月线/季线/年线 = 成交量(手)（周及以上周期服务端\n原样返回真实成交量/100，已 ×100 还原）；**分钟线协议不提供成交量**\n（报文中该字段实为成交额/100），vol 为 ``null``，请勿当作成交量使用。\n\n每根 bar 同样附带 ``pre_close/change/change_pct/amplitude_pct`` 衍生字段。","operationId":"index_bars_api_v1_bars_index_get","parameters":[{"name":"market","in":"query","required":true,"schema":{"type":"string","description":"市场: SZ, SH","title":"Market"},"description":"市场: SZ, SH"},{"name":"code","in":"query","required":true,"schema":{"type":"string","minLength":6,"maxLength":6,"title":"Code"}},{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"K线周期","default":"DAY","title":"Category"},"description":"K线周期"},{"name":"start","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Start"}},{"name":"count","in":"query","required":false,"schema":{"type":"integer","maximum":800,"minimum":1,"default":800,"title":"Count"}},{"name":"bar_time","in":"query","required":false,"schema":{"type":"string","description":"时间戳: start=bar开始时间(默认) / end=bar结束时间(对齐Tushare)","default":"start","title":"Bar Time"},"description":"时间戳: start=bar开始时间(默认) / end=bar结束时间(对齐Tushare)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataFrameResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/minute":{"get":{"tags":["bars"],"summary":"Minute Time","description":"获取今日分时数据。","operationId":"minute_time_api_v1_minute_get","parameters":[{"name":"market","in":"query","required":true,"schema":{"type":"string","description":"市场: SZ, SH","title":"Market"},"description":"市场: SZ, SH"},{"name":"code","in":"query","required":true,"schema":{"type":"string","minLength":6,"maxLength":6,"title":"Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataFrameResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/minute/history":{"get":{"tags":["bars"],"summary":"History Minute Time","description":"获取历史某日分时数据。","operationId":"history_minute_time_api_v1_minute_history_get","parameters":[{"name":"market","in":"query","required":true,"schema":{"type":"string","description":"市场: SZ, SH","title":"Market"},"description":"市场: SZ, SH"},{"name":"code","in":"query","required":true,"schema":{"type":"string","minLength":6,"maxLength":6,"title":"Code"}},{"name":"date","in":"query","required":true,"schema":{"type":"integer","description":"日期 YYYYMMDD","title":"Date"},"description":"日期 YYYYMMDD"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataFrameResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/transaction":{"get":{"tags":["bars"],"summary":"Transaction Data","description":"获取当日逐笔成交。","operationId":"transaction_data_api_v1_transaction_get","parameters":[{"name":"market","in":"query","required":true,"schema":{"type":"string","description":"市场: SZ, SH","title":"Market"},"description":"市场: SZ, SH"},{"name":"code","in":"query","required":true,"schema":{"type":"string","minLength":6,"maxLength":6,"title":"Code"}},{"name":"start","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Start"}},{"name":"count","in":"query","required":false,"schema":{"type":"integer","maximum":800,"minimum":1,"default":800,"title":"Count"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataFrameResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/transaction/history":{"get":{"tags":["bars"],"summary":"History Transaction Data","description":"获取历史逐笔成交。","operationId":"history_transaction_data_api_v1_transaction_history_get","parameters":[{"name":"market","in":"query","required":true,"schema":{"type":"string","description":"市场: SZ, SH","title":"Market"},"description":"市场: SZ, SH"},{"name":"code","in":"query","required":true,"schema":{"type":"string","minLength":6,"maxLength":6,"title":"Code"}},{"name":"date","in":"query","required":true,"schema":{"type":"integer","description":"日期 YYYYMMDD","title":"Date"},"description":"日期 YYYYMMDD"},{"name":"start","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Start"}},{"name":"count","in":"query","required":false,"schema":{"type":"integer","maximum":800,"minimum":1,"default":800,"title":"Count"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataFrameResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/xdxr":{"get":{"tags":["finance"],"summary":"Xdxr Info","description":"获取除权除息历史记录。","operationId":"xdxr_info_api_v1_xdxr_get","parameters":[{"name":"market","in":"query","required":true,"schema":{"type":"string","description":"市场: SZ, SH","title":"Market"},"description":"市场: SZ, SH"},{"name":"code","in":"query","required":true,"schema":{"type":"string","minLength":6,"maxLength":6,"title":"Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataFrameResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/finance":{"get":{"tags":["finance"],"summary":"Finance Info","description":"获取最新财务数据。","operationId":"finance_info_api_v1_finance_get","parameters":[{"name":"market","in":"query","required":true,"schema":{"type":"string","description":"市场: SZ, SH","title":"Market"},"description":"市场: SZ, SH"},{"name":"code","in":"query","required":true,"schema":{"type":"string","minLength":6,"maxLength":6,"title":"Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataFrameResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/company/category":{"get":{"tags":["finance"],"summary":"Company Info Category","description":"获取公司信息文件目录。","operationId":"company_info_category_api_v1_company_category_get","parameters":[{"name":"market","in":"query","required":true,"schema":{"type":"string","description":"市场: SZ, SH","title":"Market"},"description":"市场: SZ, SH"},{"name":"code","in":"query","required":true,"schema":{"type":"string","minLength":6,"maxLength":6,"title":"Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataFrameResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/company/content":{"get":{"tags":["finance"],"summary":"Company Info Content","description":"读取公司信息文本。","operationId":"company_info_content_api_v1_company_content_get","parameters":[{"name":"market","in":"query","required":true,"schema":{"type":"string","description":"市场: SZ, SH","title":"Market"},"description":"市场: SZ, SH"},{"name":"code","in":"query","required":true,"schema":{"type":"string","minLength":6,"maxLength":6,"title":"Code"}},{"name":"filename","in":"query","required":true,"schema":{"type":"string","description":"文件名","title":"Filename"},"description":"文件名"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"length","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1024,"title":"Length"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"string"},"title":"Response Company Info Content Api V1 Company Content Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/financial/file-list":{"get":{"tags":["finance"],"summary":"Financial File List","description":"获取可用的历史专业财报文件列表。","operationId":"financial_file_list_api_v1_financial_file_list_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataFrameResponse"}}}}}}},"/api/v1/financial/records":{"get":{"tags":["finance"],"summary":"Financial Records","description":"下载财报 zip 并解析为记录列表。","operationId":"financial_records_api_v1_financial_records_get","parameters":[{"name":"filename","in":"query","required":true,"schema":{"type":"string","description":"财报文件名，如 tdxfin/gpcw20260331.zip","title":"Filename"},"description":"财报文件名，如 tdxfin/gpcw20260331.zip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataFrameResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/formula/validate":{"post":{"tags":["formula"],"summary":"Validate Formula","description":"校验公式语法并给出信号/数值输出归类（不取行情）。","operationId":"validate_formula_api_v1_formula_validate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormulaValidateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormulaValidateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/formula/compute":{"post":{"tags":["formula"],"summary":"Compute Formula","description":"在 K 线上计算公式：最后一根各列值 + 可选最近 N 根明细。","operationId":"compute_formula_api_v1_formula_compute_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormulaComputeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Compute Formula Api V1 Formula Compute Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/formula/backtest/run/async":{"post":{"tags":["formula"],"summary":"Run Formula Backtest Async","description":"提交公式回测后台任务（信号列下一根开盘成交），轮询 /backtest/tasks/{id}。","operationId":"run_formula_backtest_async_api_v1_formula_backtest_run_async_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormulaBacktestRequest"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Run Formula Backtest Async Api V1 Formula Backtest Run Async Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/formula/screen/run/async":{"post":{"tags":["formula"],"summary":"Run Formula Screen Async","description":"提交公式选股后台任务：信号列最后一根 = 1 的标的 + 数值列（供排序）。","operationId":"run_formula_screen_async_api_v1_formula_screen_run_async_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormulaScreenRequest"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Run Formula Screen Async Api V1 Formula Screen Run Async Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/block":{"get":{"tags":["block"],"summary":"Block Info","description":"获取并解析板块文件。","operationId":"block_info_api_v1_block_get","parameters":[{"name":"filename","in":"query","required":true,"schema":{"type":"string","description":"板块文件名: block_zs.dat(行业指数), block_gn.dat(概念), block_fg.dat(风格)","title":"Filename"},"description":"板块文件名: block_zs.dat(行业指数), block_gn.dat(概念), block_fg.dat(风格)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataFrameResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/chanlun/analyze":{"post":{"tags":["chanlun"],"summary":"Chanlun Analyze","description":"执行缠论分析。\n\n自动从 TDX 服务器获取 K 线数据，运行完整缠论计算管道，\n返回笔、中枢、线段、买卖点、背驰等分析结果。","operationId":"chanlun_analyze_api_v1_chanlun_analyze_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChanlunRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Chanlun Analyze Api V1 Chanlun Analyze Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/board-mac/list":{"get":{"tags":["board-mac"],"summary":"Board List","description":"获取板块列表（默认按涨跌幅降序；要取涨速传 sort_column=SPEED）。","operationId":"board_list_api_v1_board_mac_list_get","parameters":[{"name":"board_type","in":"query","required":false,"schema":{"type":"string","description":"板块类型: ALL/HY/HY2/GN/FG/DQ","default":"ALL","title":"Board Type"},"description":"板块类型: ALL/HY/HY2/GN/FG/DQ"},{"name":"count","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"default":500,"title":"Count"}},{"name":"sort_column","in":"query","required":false,"schema":{"type":"string","description":"排序键: CHANGE_PCT/SPEED/CHANGE_3D/CHANGE_5D/CHANGE_10D/CHANGE_20D/CHANGE_60D/YTD；sort_value 列即该指标值（CHANGE_PCT 时恒 0，涨跌幅=price/pre_close-1）","default":"CHANGE_PCT","title":"Sort Column"},"description":"排序键: CHANGE_PCT/SPEED/CHANGE_3D/CHANGE_5D/CHANGE_10D/CHANGE_20D/CHANGE_60D/YTD；sort_value 列即该指标值（CHANGE_PCT 时恒 0，涨跌幅=price/pre_close-1）"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataFrameResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/board-mac/members":{"get":{"tags":["board-mac"],"summary":"Board Members","description":"获取板块成分股。","operationId":"board_members_api_v1_board_mac_members_get","parameters":[{"name":"board_symbol","in":"query","required":true,"schema":{"type":"string","description":"板块代码，如 881001","title":"Board Symbol"},"description":"板块代码，如 881001"},{"name":"count","in":"query","required":false,"schema":{"type":"integer","maximum":100000,"minimum":1,"default":100,"title":"Count"}},{"name":"sort_type","in":"query","required":false,"schema":{"type":"string","description":"排序字段","default":"CHANGE_PCT","title":"Sort Type"},"description":"排序字段"},{"name":"sort_order","in":"query","required":false,"schema":{"type":"string","description":"排序方向: ASC/DESC","default":"DESC","title":"Sort Order"},"description":"排序方向: ASC/DESC"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataFrameResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/board-mac/belong":{"get":{"tags":["board-mac"],"summary":"Board Belong","description":"获取股票所属板块列表。","operationId":"board_belong_api_v1_board_mac_belong_get","parameters":[{"name":"market","in":"query","required":true,"schema":{"type":"string","description":"市场: SZ, SH","title":"Market"},"description":"市场: SZ, SH"},{"name":"code","in":"query","required":true,"schema":{"type":"string","minLength":6,"maxLength":6,"description":"6位股票代码","title":"Code"},"description":"6位股票代码"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataFrameResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/board-mac/summary":{"get":{"tags":["board-mac"],"summary":"Board Summary","description":"获取板块摘要信息（含成分股资金流向）。","operationId":"board_summary_api_v1_board_mac_summary_get","parameters":[{"name":"board_symbol","in":"query","required":true,"schema":{"type":"string","description":"板块代码，如 881001","title":"Board Symbol"},"description":"板块代码，如 881001"},{"name":"sort_type","in":"query","required":false,"schema":{"type":"string","description":"排序字段","default":"CHANGE_PCT","title":"Sort Type"},"description":"排序字段"},{"name":"sort_order","in":"query","required":false,"schema":{"type":"string","description":"排序方向: ASC/DESC","default":"DESC","title":"Sort Order"},"description":"排序方向: ASC/DESC"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DictResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/board-mac/ranking":{"get":{"tags":["board-mac"],"summary":"Board Ranking","description":"获取板块涨幅排名。","operationId":"board_ranking_api_v1_board_mac_ranking_get","parameters":[{"name":"board_type","in":"query","required":false,"schema":{"type":"string","description":"板块类型: HY/HY2/GN/FG/DQ","default":"HY","title":"Board Type"},"description":"板块类型: HY/HY2/GN/FG/DQ"},{"name":"top_n","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":10,"title":"Top N"}},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"排序字段名","default":"change_pct","title":"Sort By"},"description":"排序字段名"},{"name":"ascending","in":"query","required":false,"schema":{"type":"boolean","description":"是否升序","default":false,"title":"Ascending"},"description":"是否升序"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataFrameResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/board-mac/change-ranking":{"get":{"tags":["board-mac"],"summary":"Board Change Ranking","description":"获取板块 N 日涨幅排名。","operationId":"board_change_ranking_api_v1_board_mac_change_ranking_get","parameters":[{"name":"board_type","in":"query","required":false,"schema":{"type":"string","description":"板块类型: HY/HY2/GN/FG/DQ","default":"HY","title":"Board Type"},"description":"板块类型: HY/HY2/GN/FG/DQ"},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":250,"minimum":1,"description":"统计天数","default":20,"title":"Days"},"description":"统计天数"},{"name":"top_n","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":10,"title":"Top N"}},{"name":"target_date","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"目标日期，如 20250101","title":"Target Date"},"description":"目标日期，如 20250101"},{"name":"ascending","in":"query","required":false,"schema":{"type":"boolean","description":"是否升序","default":false,"title":"Ascending"},"description":"是否升序"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataFrameResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/mac/capital-flow":{"get":{"tags":["mac-data"],"summary":"Capital Flow","description":"获取个股资金流向（主力/散户净流入）。","operationId":"capital_flow_api_v1_mac_capital_flow_get","parameters":[{"name":"market","in":"query","required":true,"schema":{"type":"string","description":"市场: SZ, SH","title":"Market"},"description":"市场: SZ, SH"},{"name":"code","in":"query","required":true,"schema":{"type":"string","minLength":6,"maxLength":6,"description":"6位股票代码","title":"Code"},"description":"6位股票代码"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataFrameResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/mac/symbol-info":{"get":{"tags":["mac-data"],"summary":"Symbol Info","description":"获取个股基本信息快照。","operationId":"symbol_info_api_v1_mac_symbol_info_get","parameters":[{"name":"market","in":"query","required":true,"schema":{"type":"string","description":"市场: SZ, SH","title":"Market"},"description":"市场: SZ, SH"},{"name":"code","in":"query","required":true,"schema":{"type":"string","minLength":6,"maxLength":6,"description":"6位股票代码","title":"Code"},"description":"6位股票代码"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataFrameResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/mac/server-info":{"get":{"tags":["mac-data"],"summary":"Server Info","description":"获取服务器交易时段信息。","operationId":"server_info_api_v1_mac_server_info_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataFrameResponse"}}}}}}},"/api/v1/mac/quote-list":{"get":{"tags":["mac-quotes"],"summary":"Quote List","description":"获取分排行行情列表（涨幅/成交量/换手等排序）。","operationId":"quote_list_api_v1_mac_quote_list_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"市场分类: A/SH/SZ/KCB/BJ/CYB","default":"A","title":"Category"},"description":"市场分类: A/SH/SZ/KCB/BJ/CYB"},{"name":"start","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"分页起始位置","default":0,"title":"Start"},"description":"分页起始位置"},{"name":"count","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"description":"返回数量","default":80,"title":"Count"},"description":"返回数量"},{"name":"sort_type","in":"query","required":false,"schema":{"type":"string","description":"排序字段","default":"CHANGE_PCT","title":"Sort Type"},"description":"排序字段"},{"name":"sort_order","in":"query","required":false,"schema":{"type":"string","description":"排序方向: ASC/DESC","default":"DESC","title":"Sort Order"},"description":"排序方向: ASC/DESC"},{"name":"exclude","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"过滤标志（逗号分隔）: ST,KC,BJ,...","title":"Exclude"},"description":"过滤标志（逗号分隔）: ST,KC,BJ,..."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataFrameResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/mac/auction":{"get":{"tags":["mac-quotes"],"summary":"Auction","description":"获取集合竞价数据。","operationId":"auction_api_v1_mac_auction_get","parameters":[{"name":"market","in":"query","required":true,"schema":{"type":"string","description":"市场: SZ, SH","title":"Market"},"description":"市场: SZ, SH"},{"name":"code","in":"query","required":true,"schema":{"type":"string","minLength":6,"maxLength":6,"description":"6位股票代码","title":"Code"},"description":"6位股票代码"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataFrameResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/mac/unusual":{"get":{"tags":["mac-quotes"],"summary":"Unusual","description":"获取市场异动行情数据。","operationId":"unusual_api_v1_mac_unusual_get","parameters":[{"name":"market","in":"query","required":true,"schema":{"type":"string","description":"市场: SZ, SH","title":"Market"},"description":"市场: SZ, SH"},{"name":"start","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"分页起始位置","default":0,"title":"Start"},"description":"分页起始位置"},{"name":"count","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"返回数量","default":50,"title":"Count"},"description":"返回数量"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataFrameResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/ex/bars":{"get":{"tags":["ex-market"],"summary":"Ex Bars","description":"获取扩展市场 K 线数据。","operationId":"ex_bars_api_v1_ex_bars_get","parameters":[{"name":"market","in":"query","required":true,"schema":{"type":"string","description":"扩展市场代码，如 HK_MAIN_BOARD 或数字","title":"Market"},"description":"扩展市场代码，如 HK_MAIN_BOARD 或数字"},{"name":"code","in":"query","required":true,"schema":{"type":"string","description":"合约/证券代码","title":"Code"},"description":"合约/证券代码"},{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"K线周期: MIN_1/MIN_5/.../DAY/WEEK/MONTH","default":"DAY","title":"Category"},"description":"K线周期: MIN_1/MIN_5/.../DAY/WEEK/MONTH"},{"name":"start","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Start"}},{"name":"count","in":"query","required":false,"schema":{"type":"integer","maximum":700,"minimum":1,"default":700,"title":"Count"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataFrameResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/ex/quote":{"get":{"tags":["ex-market"],"summary":"Ex Quote","description":"获取扩展市场实时报价。","operationId":"ex_quote_api_v1_ex_quote_get","parameters":[{"name":"market","in":"query","required":true,"schema":{"type":"string","description":"扩展市场代码","title":"Market"},"description":"扩展市场代码"},{"name":"code","in":"query","required":true,"schema":{"type":"string","description":"合约/证券代码","title":"Code"},"description":"合约/证券代码"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataFrameResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/ex/minute":{"get":{"tags":["ex-market"],"summary":"Ex Minute","description":"获取扩展市场分时数据。","operationId":"ex_minute_api_v1_ex_minute_get","parameters":[{"name":"market","in":"query","required":true,"schema":{"type":"string","description":"扩展市场代码","title":"Market"},"description":"扩展市场代码"},{"name":"code","in":"query","required":true,"schema":{"type":"string","description":"合约/证券代码","title":"Code"},"description":"合约/证券代码"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataFrameResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/ex/transaction":{"get":{"tags":["ex-market"],"summary":"Ex Transaction","description":"获取扩展市场逐笔成交数据。","operationId":"ex_transaction_api_v1_ex_transaction_get","parameters":[{"name":"market","in":"query","required":true,"schema":{"type":"string","description":"扩展市场代码","title":"Market"},"description":"扩展市场代码"},{"name":"code","in":"query","required":true,"schema":{"type":"string","description":"合约/证券代码","title":"Code"},"description":"合约/证券代码"},{"name":"start","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Start"}},{"name":"count","in":"query","required":false,"schema":{"type":"integer","maximum":3000,"minimum":1,"default":1800,"title":"Count"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataFrameResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/indicator/list":{"get":{"tags":["indicator"],"summary":"Indicator List","description":"获取所有可用技术指标列表。","operationId":"indicator_list_api_v1_indicator_list_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Response Indicator List Api V1 Indicator List Get"}}}}}}},"/api/v1/indicator/compute":{"post":{"tags":["indicator"],"summary":"Indicator Compute","description":"在 OHLCV 数据上计算技术指标。\n\n请求体包含 K 线 records 和指标名称列表，返回计算后的 DataFrame。","operationId":"indicator_compute_api_v1_indicator_compute_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComputeIndicatorsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataFrameResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/announcements":{"get":{"tags":["announcement"],"summary":"Announcements","description":"检索公司公告列表（巨潮资讯网，独立于 TDX 行情服务器）。\n\nTDX 行情不可用时本接口仍可调用。","operationId":"announcements_api_v1_announcements_get","parameters":[{"name":"code","in":"query","required":true,"schema":{"type":"string","minLength":6,"maxLength":6,"description":"6位股票代码","title":"Code"},"description":"6位股票代码"},{"name":"count","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"每页数量","default":30,"title":"Count"},"description":"每页数量"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"页码（1 起始）","default":1,"title":"Page"},"description":"页码（1 起始）"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataFrameResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sina/financial-report":{"get":{"tags":["sina"],"summary":"Financial Report","description":"获取财报三表（新浪数据源，独立于 TDX 行情服务器）。\n\n返回每行一期报告（最新在前），列为科目名 + ``{科目}_同比``（如有同比）。","operationId":"financial_report_api_v1_sina_financial_report_get","parameters":[{"name":"code","in":"query","required":true,"schema":{"type":"string","minLength":6,"maxLength":6,"description":"6位股票代码","title":"Code"},"description":"6位股票代码"},{"name":"type","in":"query","required":false,"schema":{"type":"string","pattern":"^(lrb|fzb|llb)$","description":"报表类型: lrb(利润表)/fzb(资产负债表)/llb(现金流量表)","default":"lrb","title":"Type"},"description":"报表类型: lrb(利润表)/fzb(资产负债表)/llb(现金流量表)"},{"name":"num","in":"query","required":false,"schema":{"type":"integer","maximum":40,"minimum":1,"description":"取最近 N 期","default":8,"title":"Num"},"description":"取最近 N 期"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataFrameResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/ccpm/products":{"get":{"tags":["ccpm"],"summary":"Ccpm Products","description":"全部可采集品种与科普元数据（品种代码 / 标的 / 合约规模 / 一句话介绍）。","operationId":"ccpm_products_api_v1_ccpm_products_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CcpmProductsResponse"}}}}}}},"/api/v1/ccpm/rank":{"get":{"tags":["ccpm"],"summary":"Ccpm Rank","description":"获取某品种某交易日的成交持仓排名（官网每日收盘后约 16:15 发布）。\n\n每行 = 某合约某排名，成交量 / 持买单量（多单）/ 持卖单量（空单）三类\n前 20 名会员并排对齐；包含该品种当日全部挂牌合约。","operationId":"ccpm_rank_api_v1_ccpm_rank_get","parameters":[{"name":"product","in":"query","required":false,"schema":{"type":"string","pattern":"^(IF|IH|IC|IM|TS|TF|T|TL)$","description":"品种代码","default":"IF","title":"Product"},"description":"品种代码"},{"name":"date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},{"type":"null"}],"description":"交易日 YYYY-MM-DD；缺省自动回溯最近有数据的交易日","title":"Date"},"description":"交易日 YYYY-MM-DD；缺省自动回溯最近有数据的交易日"},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean","description":"忽略本地缓存强制重新抓取","default":false,"title":"Refresh"},"description":"忽略本地缓存强制重新抓取"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CcpmRankResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/backtest/strategies":{"get":{"tags":["backtest"],"summary":"List Strategies","description":"枚举所有预置策略及其参数 schema（供前端动态渲染策略选择 + 参数表单）。","operationId":"list_strategies_api_v1_backtest_strategies_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StrategySchemaResponse"}}}}}}},"/api/v1/backtest/run":{"post":{"tags":["backtest"],"summary":"Run Backtest","description":"同步回测（仅支持内联 OHLCV 数据）。\n\n适用于单标的快速回测（<3s）。需要取行情或长任务请用 ``/backtest/run/async``。","operationId":"run_backtest_api_v1_backtest_run_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestResultResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/backtest/run/async":{"post":{"tags":["backtest"],"summary":"Run Backtest Async","description":"提交后台回测任务，立即返回 task_id。\n\n支持内联数据或按标的取行情。取行情在 async 上下文完成（client 是 async 的），\n之后回测在后台线程执行。通过 ``GET /backtest/tasks/{task_id}`` 轮询结果。","operationId":"run_backtest_async_api_v1_backtest_run_async_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestRequest"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskSubmitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/backtest/tasks":{"get":{"tags":["backtest"],"summary":"List Tasks","description":"列出最近 N 个任务摘要（按最近使用倒序，不含完整 result）。\n\n供对比页选择要对比的 task；选中后再逐个调 /tasks/{task_id} 拉详情。","operationId":"list_tasks_api_v1_backtest_tasks_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/backtest/tasks/{task_id}":{"get":{"tags":["backtest"],"summary":"Get Task","description":"查询后台回测任务状态。done 时 result 字段含完整回测结果。","operationId":"get_task_api_v1_backtest_tasks__task_id__get","parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","title":"Task Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskStateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/backtest/tasks/{task_id}/export":{"get":{"tags":["backtest"],"summary":"Export Task","description":"导出已完成任务的回测结果（JSON 全量 / CSV 主表）。\n\n``format=json``：完整 result 字典（performance + equity_curve + trades +\nconfig 等）。``format=csv``：导出结果中的主表——优先 trades（成交明细），\n其次 ranking（寻优排名）、equity_curve（资金曲线）；都缺时导出\nperformance 键值对。","operationId":"export_task_api_v1_backtest_tasks__task_id__export_get","parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","title":"Task Id"}},{"name":"format","in":"query","required":false,"schema":{"type":"string","default":"json","title":"Format"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Export Task Api V1 Backtest Tasks  Task Id  Export Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/backtest/portfolio/run/async":{"post":{"tags":["backtest"],"summary":"Run Portfolio Backtest Async","description":"提交组合（多标的）回测后台任务。\n\n逐个标的取行情（async），组装 StockData 列表后提交后台任务跑\nPortfolioBacktestEngine。通过 GET /backtest/tasks/{task_id} 轮询结果。","operationId":"run_portfolio_backtest_async_api_v1_backtest_portfolio_run_async_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PortfolioBacktestRequest"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskSubmitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/backtest/multi-strategy/run/async":{"post":{"tags":["backtest"],"summary":"Run Multi Strategy Backtest Async","description":"提交多策略组合回测后台任务（资金分仓 / 并行制）。\n\n勾选 N 个策略，各自在原标的（取最新行情）上独立回测，各拿总资金 1/N。\n单个策略取数失败则跳过（不中断整组），全部失败返回 400。结果为\nMultiStrategyResult（结构同 PortfolioResult），通过 GET /backtest/tasks/{task_id} 轮询。","operationId":"run_multi_strategy_backtest_async_api_v1_backtest_multi_strategy_run_async_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MultiStrategyBacktestRequest"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskSubmitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/backtest/optimize/run/async":{"post":{"tags":["backtest"],"summary":"Run Optimize Async","description":"提交参数网格寻优后台任务。\n\n在单个标的上对策略参数做网格搜索。数据获取支持内联 ohlcv 或按 symbol 取行情。\n通过 GET /backtest/tasks/{task_id} 轮询结果。","operationId":"run_optimize_async_api_v1_backtest_optimize_run_async_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OptimizeBacktestRequest"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskSubmitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/backtest/optimize-all/run/async":{"post":{"tags":["backtest"],"summary":"Run Optimize All Async","description":"提交「一键寻优所有策略」后台任务。\n\n在单个标的上，对所有策略的预设参数网格（见 presets.STRATEGY_PRESETS）依次\n做网格寻优，取各策略最优点汇总成全局排名。数据获取支持内联 ohlcv 或按\nsymbol 取行情。通过 GET /backtest/tasks/{task_id} 轮询结果。","operationId":"run_optimize_all_async_api_v1_backtest_optimize_all_run_async_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OptimizeAllBacktestRequest"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskSubmitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/backtest/signal-scan/run/async":{"post":{"tags":["backtest"],"summary":"Run Signal Scan Async","description":"提交「信号雷达」后台任务：扫描策略库全部已保存策略的最近买卖信号。\n\nsingle/portfolio/multi 统一展开成\"策略×标的\"子任务，按 (symbol, category)\n去重取最近 800 根 K 线（async 上下文内完成），后台线程内逐条跑信号流程\n（与回测引擎同口径，含仓位跟踪）。只扫信号、不重跑回测、不改业绩快照。\n结果为 SignalScanResult，通过 GET /backtest/tasks/{task_id} 轮询。","operationId":"run_signal_scan_async_api_v1_backtest_signal_scan_run_async_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignalScanRequest"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskSubmitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/backtest/wf/run/async":{"post":{"tags":["backtest"],"summary":"Run Walkforward Async","description":"提交 Walk-Forward 样本外验证后台任务（默认 7 窗、每窗独立开仓）。\n\n数据来源同 /backtest/run/async（内联 ohlcv 或按 symbol 取行情）。\n结果含逐窗收益、盈利窗占比 consistency、连乘收益等，通过\nGET /backtest/tasks/{task_id} 轮询。","operationId":"run_walkforward_async_api_v1_backtest_wf_run_async_post","parameters":[{"name":"n_windows","in":"query","required":false,"schema":{"type":"integer","default":7,"title":"N Windows"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestRequest"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskSubmitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/backtest/evaluate/run/async":{"post":{"tags":["backtest"],"summary":"Run Evaluate Async","description":"提交一条龙评估后台任务：回测 + WF + 适配性体检 + 综合评分 + S-D 评级\n+ 买入持有基准对比（excess_return）。\n\n结果结构见 ``easy_tdx.backtest.benchmark.evaluate_strategy`` 文档，\n通过 GET /backtest/tasks/{task_id} 轮询；可用\nGET /backtest/tasks/{task_id}/export?format=json 导出。","operationId":"run_evaluate_async_api_v1_backtest_evaluate_run_async_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestRequest"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskSubmitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/backtest/multiseed/run/async":{"post":{"tags":["backtest"],"summary":"Run Multiseed Async","description":"提交多 seed 随机抽样验证后台任务（v1.25 晋级门槛）。\n\n股票池逐标的取行情（async），后台线程跑 MultiSeedValidator：多 seed\n抽样 → 跨样本稳定性 → 四项晋级门槛（正收益比例/平均夏普/平均交易数/\n平均收益）。结果含 per_seed_positive_ratio 稳定性列，通过\nGET /backtest/tasks/{task_id} 轮询。","operationId":"run_multiseed_async_api_v1_backtest_multiseed_run_async_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MultiSeedRequest"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskSubmitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/backtest/rotation/run/async":{"post":{"tags":["backtest"],"summary":"Run Rotation Async","description":"提交轮动组合回测后台任务（v1.27）。\n\n按打分排名定期换仓：固定槽位等额、跌出排名自动卖出补位、日/周/月刷新、\n可选槽内止盈止损。打分支持内置动量（``score=\"momentum\"`` + ``period``）\n或通达信公式数值输出（``score=\"formula\"`` + ``formula_text`` + ``score_col``）。","operationId":"run_rotation_async_api_v1_backtest_rotation_run_async_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RotationBacktestRequest"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskSubmitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/strategies":{"get":{"tags":["strategies"],"summary":"List Saved Strategies","description":"列出全部已保存策略（按创建时间倒序）。","operationId":"list_saved_strategies_api_v1_strategies_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SavedStrategyListResponse"}}}}}},"post":{"tags":["strategies"],"summary":"Create Saved Strategy","description":"保存一条策略（含当时的标的上下文与成绩快照）。","operationId":"create_saved_strategy_api_v1_strategies_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SavedStrategyCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SavedStrategy"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/strategies/{strategy_id}":{"get":{"tags":["strategies"],"summary":"Get Saved Strategy","description":"按 id 查看单条已保存策略。","operationId":"get_saved_strategy_api_v1_strategies__strategy_id__get","parameters":[{"name":"strategy_id","in":"path","required":true,"schema":{"type":"string","title":"Strategy Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SavedStrategy"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["strategies"],"summary":"Delete Saved Strategy","description":"按 id 删除一条已保存策略。不存在则 400。\n\n注：不用 204（No Content），因较新 FastAPI 在路由注册阶段就拒绝\nstatus_code=204 且有响应模型的端点（\"204 must not have a response body\"），\n返回简单确认体更兼容、前端无需特判。","operationId":"delete_saved_strategy_api_v1_strategies__strategy_id__delete","parameters":[{"name":"strategy_id","in":"path","required":true,"schema":{"type":"string","title":"Strategy Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"string"},"title":"Response Delete Saved Strategy Api V1 Strategies  Strategy Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/server/hosts":{"get":{"tags":["server"],"summary":"List Hosts","description":"列出所有候选 host + 当前正在使用的 host。\n\n不做测速（避免 50+ host 全 ping 让首屏卡几秒）。前端点\"测试全部\"按钮\n后调 ``POST /server/test`` 获取延迟。","operationId":"list_hosts_api_v1_server_hosts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HostListResponse"}}}}}}},"/api/v1/server/test":{"post":{"tags":["server"],"summary":"Test Hosts","description":"并发 ping 测试 host 列表，返回延迟和可达性。\n\n用 ``asyncio.to_thread`` 包装同步的 ``ping_all``（它内部用\nThreadPoolExecutor 并发），避免阻塞事件循环。","operationId":"test_hosts_api_v1_server_test_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerTestRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/HostInfo"},"type":"array","title":"Response Test Hosts Api V1 Server Test Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/server/switch":{"post":{"tags":["server"],"summary":"Switch Host","description":"切换到指定 host（热重连，无需重启服务）。\n\n顺序：先 reconnect_to 成功 → 再 save_best_host 持久化。\n如果 reconnect 失败，不 save（避免污染 config，用户可再选别的）。","operationId":"switch_host_api_v1_server_switch_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerSwitchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwitchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/llm/config":{"get":{"tags":["llm"],"summary":"Get Llm Config","description":"当前 LLM 配置（key 脱敏）+ Provider 预设表 + 配置文件路径。","operationId":"get_llm_config_api_v1_llm_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Llm Config Api V1 Llm Config Get"}}}}}},"put":{"tags":["llm"],"summary":"Update Llm Config","description":"保存 LLM 配置到 llm.json（WebUI 与手工编辑同一份文件，双向兼容）。","operationId":"update_llm_config_api_v1_llm_config_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LlmConfigUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Update Llm Config Api V1 Llm Config Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/llm/test":{"post":{"tags":["llm"],"summary":"Test Llm","description":"连通性测试：用已保存配置（或请求体内临时配置）发一句极短 ping。","operationId":"test_llm_api_v1_llm_test_post","requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/LlmConfigUpdate"},{"type":"null"}],"title":"Override"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Test Llm Api V1 Llm Test Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/llm/chat":{"post":{"tags":["llm"],"summary":"Llm Chat","description":"一轮 LLM 对话：把 prompt（如回测报告解读 Prompt）发给已配置的模型。","operationId":"llm_chat_api_v1_llm_chat_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LlmChatRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Llm Chat Api V1 Llm Chat Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/llm/chat/async":{"post":{"tags":["llm"],"summary":"Llm Chat Async","description":"提交 AI 解读后台任务（长耗时模型调用不占住 HTTP 连接）。\n\n大报告解读 1-3 分钟，同步 HTTP 等待对代理/浏览器都不友好；这里接入\n与回测同一套任务执行器（``task_runner``，4 线程池 + SQLite 持久化），\n前端短轮询 ``GET /llm/chat/tasks/{task_id}`` 取状态，断线重连后仍可\n查询。配置不完整（缺 url/model）在提交时即报 400；网络/鉴权/超时\n类错误发生在任务内，体现在 TaskState.error。","operationId":"llm_chat_async_api_v1_llm_chat_async_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LlmChatRequest"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskSubmitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/llm/chat/tasks/{task_id}":{"get":{"tags":["llm"],"summary":"Llm Chat Task","description":"查询 AI 解读任务状态（与回测任务同一存储，语义化路径别名）。","operationId":"llm_chat_task_api_v1_llm_chat_tasks__task_id__get","parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","title":"Task Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskStateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/llm/history":{"get":{"tags":["llm"],"summary":"List Llm History","description":"AI 解读历史（时间倒序）。每条含 Prompt、解读正文与策略上下文。","operationId":"list_llm_history_api_v1_llm_history_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Llm History Api V1 Llm History Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["llm"],"summary":"Clear Llm History","description":"清空全部历史记录。","operationId":"clear_llm_history_api_v1_llm_history_delete","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Clear Llm History Api V1 Llm History Delete"}}}}}}},"/api/v1/llm/history/{record_id}":{"delete":{"tags":["llm"],"summary":"Delete Llm History","description":"删除一条历史记录。","operationId":"delete_llm_history_api_v1_llm_history__record_id__delete","parameters":[{"name":"record_id","in":"path","required":true,"schema":{"type":"integer","title":"Record Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Delete Llm History Api V1 Llm History  Record Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/watchlist":{"get":{"tags":["watchlist"],"summary":"List Watchlist","description":"列出全部自选（按加入顺序）。","operationId":"list_watchlist_api_v1_watchlist_get","parameters":[{"name":"group","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"按分组过滤","title":"Group"},"description":"按分组过滤"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WatchlistResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["watchlist"],"summary":"Add Watch Item","description":"加入自选（幂等：重复加入仅刷新名称）。","operationId":"add_watch_item_api_v1_watchlist_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WatchItemAdd"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Add Watch Item Api V1 Watchlist Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/watchlist/{market}/{code}":{"delete":{"tags":["watchlist"],"summary":"Remove Watch Item","description":"移除自选。","operationId":"remove_watch_item_api_v1_watchlist__market___code__delete","parameters":[{"name":"market","in":"path","required":true,"schema":{"type":"string","title":"Market"}},{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Remove Watch Item Api V1 Watchlist  Market   Code  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/stream/quotes":{"get":{"tags":["stream"],"summary":"Stream Quotes","description":"订阅实时行情推送（指数 + 自选，快照式全量推送）。","operationId":"stream_quotes_api_v1_stream_quotes_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"BacktestRequest":{"properties":{"strategy":{"type":"string","title":"Strategy","description":"策略名（见 /backtest/strategies）"},"params":{"additionalProperties":true,"type":"object","title":"Params","description":"策略参数"},"cash":{"type":"number","exclusiveMinimum":0.0,"title":"Cash","description":"初始资金","default":1000000.0},"commission":{"type":"number","maximum":0.01,"minimum":0.0,"title":"Commission","description":"佣金费率","default":0.0003},"min_commission":{"type":"number","minimum":0.0,"title":"Min Commission","description":"单笔最低佣金","default":5.0},"stamp_tax":{"type":"number","maximum":0.01,"minimum":0.0,"title":"Stamp Tax","description":"印花税（卖出）","default":0.001},"slippage":{"type":"number","maximum":0.05,"minimum":0.0,"title":"Slippage","description":"滑点费率","default":0.0},"execution":{"type":"string","enum":["next_open","next_close"],"title":"Execution","description":"成交模式","default":"next_open"},"auto_fees":{"type":"boolean","title":"Auto Fees","description":"按标的品种自动解析费率（ETF/可转债免印花税等）；显式非默认费率优先","default":false},"ohlcv":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array","maxItems":2000},{"type":"null"}],"title":"Ohlcv","description":"内联 K 线记录（含 datetime/open/high/low/close/vol/amount，最多 2000 条）"},"symbol":{"anyOf":[{"type":"string","pattern":"^(SZ|SH|BJ):\\d{6}$"},{"type":"null"}],"title":"Symbol","description":"标的代码，格式 市场:代码，如 SZ:000001"},"category":{"type":"string","enum":["DAY","WEEK","MONTH","MIN_5","MIN_15","MIN_30","MIN_60"],"title":"Category","description":"K 线周期","default":"DAY"},"count":{"type":"integer","maximum":2000.0,"minimum":20.0,"title":"Count","description":"K 线根数","default":250}},"type":"object","required":["strategy"],"title":"BacktestRequest","description":"单标的回测请求。\n\n两种数据来源（二选一）：\n- ``ohlcv``: 直接内联 OHLCV 记录（前端已有数据时）。\n- ``symbol`` + ``category`` + ``count``: 指定标的，由后端取行情。\n  两者都给则以内联数据为准。"},"BacktestResultResponse":{"properties":{"performance":{"additionalProperties":true,"type":"object","title":"Performance"},"equity_curve":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Equity Curve"},"trades":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Trades"},"positions":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Positions"},"config":{"additionalProperties":true,"type":"object","title":"Config"},"grade":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Grade"},"score":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Score"}},"type":"object","required":["performance","equity_curve","trades","positions","config"],"title":"BacktestResultResponse","description":"回测结果响应（已清洗为 JSON 原生类型）。"},"CcpmProductsResponse":{"properties":{"products":{"items":{"additionalProperties":{"type":"string"},"type":"object"},"type":"array","title":"Products"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["products","count"],"title":"CcpmProductsResponse","description":"品种列表 + 科普元数据（静态）。"},"CcpmRankResponse":{"properties":{"trading_day":{"type":"string","title":"Trading Day"},"product":{"type":"string","title":"Product"},"product_name":{"type":"string","title":"Product Name"},"data":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Data"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["trading_day","product","product_name","data","count"],"title":"CcpmRankResponse","description":"成交持仓排名（宽表：合约 × 排名 对齐三类排名）。"},"ChanlunRequest":{"properties":{"market":{"type":"string","pattern":"^(SZ|SH|BJ)$","title":"Market"},"code":{"type":"string","maxLength":6,"minLength":6,"title":"Code"},"category":{"type":"string","title":"Category","description":"K线周期","default":"DAY"},"count":{"type":"integer","maximum":800.0,"minimum":1.0,"title":"Count","default":800},"start":{"type":"integer","minimum":0.0,"title":"Start","default":0}},"type":"object","required":["market","code"],"title":"ChanlunRequest","description":"缠论分析请求。"},"ComputeIndicatorsRequest":{"properties":{"data":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Data","description":"OHLCV records"},"indicators":{"items":{"type":"string"},"type":"array","minItems":1,"title":"Indicators","description":"指标名称列表"},"params":{"anyOf":[{"additionalProperties":{"additionalProperties":{"anyOf":[{"type":"integer"},{"type":"number"}]},"type":"object"},"type":"object"},{"type":"null"}],"title":"Params","description":"指标参数（可选）"},"keep_ohlcv":{"type":"boolean","title":"Keep Ohlcv","description":"保留原始 OHLCV 列","default":true},"tail":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Tail","description":"仅返回末尾 N 行"}},"type":"object","required":["data","indicators"],"title":"ComputeIndicatorsRequest","description":"技术指标计算请求。"},"CountResponse":{"properties":{"count":{"type":"integer","title":"Count"}},"type":"object","required":["count"],"title":"CountResponse","description":"简单计数响应。"},"DataFrameResponse":{"properties":{"data":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Data"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["data","count"],"title":"DataFrameResponse","description":"通用 DataFrame 响应（records 格式）。"},"DictResponse":{"properties":{"data":{"additionalProperties":true,"type":"object","title":"Data"}},"type":"object","required":["data"],"title":"DictResponse","description":"通用 dict 响应（用于非 DataFrame 返回值）。"},"FormulaBacktestRequest":{"properties":{"text":{"type":"string","maxLength":8000,"minLength":1,"title":"Text"},"ohlcv":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array","maxItems":2000},{"type":"null"}],"title":"Ohlcv"},"symbol":{"anyOf":[{"type":"string","pattern":"^(SZ|SH|BJ):\\d{6}$"},{"type":"null"}],"title":"Symbol"},"category":{"type":"string","title":"Category","default":"DAY"},"count":{"type":"integer","maximum":2000.0,"minimum":20.0,"title":"Count","default":250},"tail":{"type":"integer","maximum":100.0,"minimum":0.0,"title":"Tail","description":"附带最近 N 根输出明细","default":10},"buy_col":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Buy Col","description":"买入信号列（默认自动挑选）"},"sell_col":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sell Col","description":"卖出信号列（默认自动挑选）"},"cash":{"type":"number","exclusiveMinimum":0.0,"title":"Cash","default":1000000.0},"commission":{"type":"number","maximum":0.01,"minimum":0.0,"title":"Commission","default":0.0003},"auto_fees":{"type":"boolean","title":"Auto Fees","default":false}},"type":"object","required":["text"],"title":"FormulaBacktestRequest","description":"公式回测请求（信号列下一根开盘成交）。"},"FormulaComputeRequest":{"properties":{"text":{"type":"string","maxLength":8000,"minLength":1,"title":"Text"},"ohlcv":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array","maxItems":2000},{"type":"null"}],"title":"Ohlcv"},"symbol":{"anyOf":[{"type":"string","pattern":"^(SZ|SH|BJ):\\d{6}$"},{"type":"null"}],"title":"Symbol"},"category":{"type":"string","title":"Category","default":"DAY"},"count":{"type":"integer","maximum":2000.0,"minimum":20.0,"title":"Count","default":250},"tail":{"type":"integer","maximum":100.0,"minimum":0.0,"title":"Tail","description":"附带最近 N 根输出明细","default":10}},"type":"object","required":["text"],"title":"FormulaComputeRequest","description":"公式计算请求：内联 ohlcv 或按 symbol 取行情（二选一）。"},"FormulaScreenRequest":{"properties":{"text":{"type":"string","maxLength":8000,"minLength":1,"title":"Text"},"symbols":{"items":{"type":"string"},"type":"array","maxItems":50,"minItems":1,"title":"Symbols"},"signal_col":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signal Col"},"category":{"type":"string","title":"Category","default":"DAY"},"count":{"type":"integer","maximum":2000.0,"minimum":60.0,"title":"Count","default":250}},"type":"object","required":["text","symbols"],"title":"FormulaScreenRequest","description":"公式选股请求（后台任务，逐标的取行情）。"},"FormulaValidateRequest":{"properties":{"text":{"type":"string","maxLength":8000,"minLength":1,"title":"Text"}},"type":"object","required":["text"],"title":"FormulaValidateRequest","description":"公式校验请求（无需行情数据）。"},"FormulaValidateResponse":{"properties":{"ok":{"type":"boolean","title":"Ok"},"signals":{"items":{"type":"string"},"type":"array","title":"Signals"},"values":{"items":{"type":"string"},"type":"array","title":"Values"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["ok"],"title":"FormulaValidateResponse"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HostInfo":{"properties":{"host":{"type":"string","title":"Host"},"latency_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Latency Ms"},"reachable":{"type":"boolean","title":"Reachable","default":false},"is_current":{"type":"boolean","title":"Is Current","default":false}},"type":"object","required":["host"],"title":"HostInfo","description":"单个 host 的状态信息。"},"HostListResponse":{"properties":{"hosts":{"items":{"$ref":"#/components/schemas/HostInfo"},"type":"array","title":"Hosts"},"current_host":{"type":"string","title":"Current Host"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["hosts","current_host","total"],"title":"HostListResponse","description":"GET /server/hosts 的响应。"},"LlmChatContext":{"properties":{"strategy":{"type":"string","title":"Strategy","description":"策略注册表 key（如 ma_cross）","default":""},"strategy_label":{"type":"string","title":"Strategy Label","description":"策略中文名","default":""},"symbol":{"type":"string","title":"Symbol","description":"6 位标的代码","default":""},"category":{"type":"string","title":"Category","description":"K 线周期","default":""},"params":{"additionalProperties":true,"type":"object","title":"Params","description":"策略参数"},"start_date":{"type":"string","title":"Start Date","default":""},"end_date":{"type":"string","title":"End Date","default":""}},"type":"object","title":"LlmChatContext","description":"AI 解读附带的策略上下文（历史页「去回测」引导用，全部可缺省）。"},"LlmChatRequest":{"properties":{"prompt":{"type":"string","maxLength":200000,"minLength":1,"title":"Prompt"},"system_prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"System Prompt","description":"None = 用配置里的默认系统提示"},"override":{"anyOf":[{"$ref":"#/components/schemas/LlmConfigUpdate"},{"type":"null"}],"description":"临时覆盖配置（不落盘，仅本次调用）"},"context":{"anyOf":[{"$ref":"#/components/schemas/LlmChatContext"},{"type":"null"}],"description":"策略上下文（随成功解读一并落历史库）"}},"type":"object","required":["prompt"],"title":"LlmChatRequest","description":"POST /llm/chat(/async) 请求体（如把 AI 解读 Prompt 直接发给已配置的 LLM）。"},"LlmConfigUpdate":{"properties":{"provider":{"type":"string","title":"Provider","description":"Provider id（见 GET /llm/config providers）","default":"deepseek"},"api_url":{"type":"string","title":"Api Url","description":"API 地址，空 = 用该 Provider 预设","default":""},"api_key":{"type":"string","title":"Api Key","description":"API Key（留空/传回脱敏串 = 不修改已存 key）","default":""},"model":{"type":"string","title":"Model","description":"模型名，空 = 用该 Provider 默认模型","default":""},"temperature":{"type":"number","maximum":2.0,"minimum":0.0,"title":"Temperature","default":0.3},"max_tokens":{"type":"integer","maximum":128000.0,"minimum":64.0,"title":"Max Tokens","description":"输出上限；思考型模型的思考链计入此预算，建议 ≥16000","default":16000},"timeout":{"type":"number","maximum":600.0,"minimum":5.0,"title":"Timeout","description":"读超时；报告解读建议 ≥120","default":180.0},"system_prompt":{"type":"string","title":"System Prompt","default":""}},"type":"object","title":"LlmConfigUpdate","description":"PUT /llm/config 请求体。\n\n``api_key`` 缺省或等于当前脱敏回显值时保留原 key——前端把脱敏串原样\n回传不会把真 key 冲掉；只有填了新值才覆盖。"},"MultiSeedRequest":{"properties":{"strategy":{"type":"string","title":"Strategy","description":"策略名（见 /backtest/strategies）"},"params":{"additionalProperties":true,"type":"object","title":"Params","description":"策略参数"},"stocks":{"items":{"type":"string"},"type":"array","maxItems":50,"minItems":2,"title":"Stocks","description":"股票池，格式 \"市场:代码\"，如 [\"SZ:000001\",\"SH:600519\"]"},"category":{"type":"string","enum":["DAY","WEEK","MONTH","MIN_5","MIN_15","MIN_30","MIN_60"],"title":"Category","default":"DAY"},"count":{"type":"integer","maximum":2000.0,"minimum":60.0,"title":"Count","description":"每标的 K 线根数","default":500},"n_seeds":{"type":"integer","maximum":10.0,"minimum":1.0,"title":"N Seeds","description":"随机种子数","default":3},"sample_size":{"anyOf":[{"type":"integer","maximum":50.0,"minimum":1.0},{"type":"null"}],"title":"Sample Size","description":"每 seed 抽样标的数（None=全池）"},"cash":{"type":"number","exclusiveMinimum":0.0,"title":"Cash","default":1000000.0},"commission":{"type":"number","maximum":0.01,"minimum":0.0,"title":"Commission","default":0.0003},"min_commission":{"type":"number","minimum":0.0,"title":"Min Commission","default":5.0},"stamp_tax":{"type":"number","maximum":0.01,"minimum":0.0,"title":"Stamp Tax","default":0.001},"slippage":{"type":"number","maximum":0.05,"minimum":0.0,"title":"Slippage","default":0.0},"execution":{"type":"string","enum":["next_open","next_close"],"title":"Execution","default":"next_open"},"auto_fees":{"type":"boolean","title":"Auto Fees","description":"按各标的品种计费（默认开）","default":true},"gates":{"anyOf":[{"additionalProperties":{"type":"number"},"type":"object"},{"type":"null"}],"title":"Gates","description":"晋级门槛覆盖（positive_ratio/mean_sharpe/mean_trades/mean_return）"}},"type":"object","required":["strategy","stocks"],"title":"MultiSeedRequest","description":"多 seed 随机抽样验证 + 晋级门槛请求（v1.25）。\n\n在给定股票池上对策略做多次（不同 seed）随机抽样回测，输出跨样本稳定性\n（正收益比例 / 平均夏普 / 各 seed 稳定性列）与四项晋级门槛判定。"},"MultiStrategyBacktestRequest":{"properties":{"items":{"items":{"$ref":"#/components/schemas/MultiStrategyItem"},"type":"array","maxItems":20,"minItems":1,"title":"Items","description":"策略槽位列表（1~20 条）"},"cash":{"type":"number","exclusiveMinimum":0.0,"title":"Cash","description":"组合总资金（均分给各策略）","default":1000000.0},"commission":{"type":"number","maximum":0.01,"minimum":0.0,"title":"Commission","default":0.0003},"min_commission":{"type":"number","minimum":0.0,"title":"Min Commission","default":5.0},"stamp_tax":{"type":"number","maximum":0.01,"minimum":0.0,"title":"Stamp Tax","default":0.001},"slippage":{"type":"number","maximum":0.05,"minimum":0.0,"title":"Slippage","default":0.0},"execution":{"type":"string","enum":["next_open","next_close"],"title":"Execution","default":"next_open"}},"type":"object","required":["items"],"title":"MultiStrategyBacktestRequest","description":"多策略组合回测请求（资金分仓）。\n\n勾选 N 个策略，各跑在各自原标的上，总资金按策略数均分。响应该请求的后台任务\n结果是 ``MultiStrategyResult``（结构同 ``PortfolioResult``，前端复用组合页图表）。"},"MultiStrategyItem":{"properties":{"strategy":{"type":"string","title":"Strategy","description":"策略名（注册表 key，如 ma_cross）"},"strategy_label":{"type":"string","title":"Strategy Label","description":"策略展示名（用于结果 key）","default":""},"params":{"additionalProperties":true,"type":"object","title":"Params"},"symbol":{"type":"string","pattern":"^(SZ|SH|BJ):\\d{6}$","title":"Symbol","description":"标的完整代码，格式 \"市场:6位代码\"，如 \"SH:601088\""},"category":{"type":"string","enum":["DAY","WEEK","MONTH","MIN_5","MIN_15","MIN_30","MIN_60"],"title":"Category","default":"DAY"},"start_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start Date","description":"开始日期 YYYY-MM-DD（可选过滤）"},"end_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End Date","description":"结束日期 YYYY-MM-DD（可选过滤）"}},"type":"object","required":["strategy","symbol"],"title":"MultiStrategyItem","description":"多策略组合回测的单条策略槽位。\n\n每条 = 一个策略 + 它的参数 + 它要跑的原标的 + 日期范围。资金由请求体的\n``cash`` 统一给出，引擎按策略数均分到各条。"},"OptimizeAllBacktestRequest":{"properties":{"cash":{"type":"number","exclusiveMinimum":0.0,"title":"Cash","default":1000000.0},"commission":{"type":"number","maximum":0.01,"minimum":0.0,"title":"Commission","default":0.0003},"slippage":{"type":"number","maximum":0.05,"minimum":0.0,"title":"Slippage","default":0.0},"execution":{"type":"string","enum":["next_open","next_close"],"title":"Execution","default":"next_open"},"workers":{"type":"integer","maximum":32.0,"minimum":0.0,"title":"Workers","description":"一键寻优并发工作进程数：0 或 1=串行（默认）；2+=ProcessPoolExecutor 并行（CPU-bound，线程无加速）。推荐 min(cpu_count, 8)。","default":1},"ohlcv":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array","maxItems":2000},{"type":"null"}],"title":"Ohlcv"},"symbol":{"anyOf":[{"type":"string","pattern":"^(SZ|SH|BJ):\\d{6}$"},{"type":"null"}],"title":"Symbol"},"category":{"type":"string","enum":["DAY","WEEK","MONTH","MIN_5","MIN_15","MIN_30","MIN_60"],"title":"Category","default":"DAY"},"count":{"type":"integer","maximum":800.0,"minimum":20.0,"title":"Count","default":250},"start_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start Date"},"end_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End Date"}},"type":"object","title":"OptimizeAllBacktestRequest","description":"一键寻优所有策略请求。\n\n在单个标的上，对所有策略的预设参数网格（见\n``easy_tdx.backtest.strategies.presets.STRATEGY_PRESETS``）依次做网格寻优，\n取各策略最优点汇总成全局排名，找出最佳策略 + 参数组合。数据来源与单标的\n回测一致（ohlcv 内联或 symbol 取行情）。"},"OptimizeBacktestRequest":{"properties":{"strategy":{"type":"string","title":"Strategy","description":"策略名"},"cash":{"type":"number","exclusiveMinimum":0.0,"title":"Cash","default":1000000.0},"commission":{"type":"number","maximum":0.01,"minimum":0.0,"title":"Commission","default":0.0003},"slippage":{"type":"number","maximum":0.05,"minimum":0.0,"title":"Slippage","default":0.0},"execution":{"type":"string","enum":["next_open","next_close"],"title":"Execution","default":"next_open"},"workers":{"type":"integer","maximum":32.0,"minimum":0.0,"title":"Workers","description":"并行工作进程数：0/1=串行+指标缓存（默认）；2+=进程级并行（实测 36 点网格 800 根 K 线约 2 倍，网格越大收益越高）","default":1},"param_grid":{"additionalProperties":{"items":{"anyOf":[{"type":"integer"},{"type":"number"},{"type":"string"}]},"type":"array"},"type":"object","maxProperties":2,"minProperties":1,"title":"Param Grid","description":"参数取值网格，如 {\"fast\":[5,10,20], \"slow\":[15,20,30]}"},"ohlcv":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array","maxItems":2000},{"type":"null"}],"title":"Ohlcv"},"symbol":{"anyOf":[{"type":"string","pattern":"^(SZ|SH|BJ):\\d{6}$"},{"type":"null"}],"title":"Symbol"},"category":{"type":"string","enum":["DAY","WEEK","MONTH","MIN_5","MIN_15","MIN_30","MIN_60"],"title":"Category","default":"DAY"},"count":{"type":"integer","maximum":800.0,"minimum":20.0,"title":"Count","default":250},"start_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start Date"},"end_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End Date"}},"type":"object","required":["strategy","param_grid"],"title":"OptimizeBacktestRequest","description":"参数网格寻优请求。\n\n在单个标的上，对策略的 1-2 个参数做网格搜索。数据来源与单标的回测一致\n（ohlcv 内联或 symbol 取行情）。param_grid 指定寻优参数及其取值列表，\n网格大小（各取值数乘积）上限 200。"},"PortfolioBacktestRequest":{"properties":{"strategy":{"type":"string","title":"Strategy","description":"策略名"},"params":{"additionalProperties":true,"type":"object","title":"Params","description":"策略参数"},"cash":{"type":"number","exclusiveMinimum":0.0,"title":"Cash","description":"组合总资金","default":1000000.0},"commission":{"type":"number","maximum":0.01,"minimum":0.0,"title":"Commission","default":0.0003},"min_commission":{"type":"number","minimum":0.0,"title":"Min Commission","default":5.0},"stamp_tax":{"type":"number","maximum":0.01,"minimum":0.0,"title":"Stamp Tax","default":0.001},"slippage":{"type":"number","maximum":0.05,"minimum":0.0,"title":"Slippage","default":0.0},"execution":{"type":"string","enum":["next_open","next_close"],"title":"Execution","default":"next_open"},"auto_fees":{"type":"boolean","title":"Auto Fees","description":"按各标的品种逐只解析费率（ETF/可转债免印花税等）","default":false},"stocks":{"items":{"type":"string"},"type":"array","maxItems":20,"minItems":1,"title":"Stocks","description":"标的列表，格式 \"市场:代码\"，如 [\"SZ:000001\",\"SH:600519\"]"},"category":{"type":"string","enum":["DAY","WEEK","MONTH","MIN_5","MIN_15","MIN_30","MIN_60"],"title":"Category","default":"DAY"},"start_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start Date","description":"开始日期 YYYY-MM-DD（可选过滤）"},"end_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End Date","description":"结束日期 YYYY-MM-DD（可选过滤）"}},"type":"object","required":["strategy","stocks"],"title":"PortfolioBacktestRequest","description":"组合（多标的）回测请求。\n\n与单标的 BacktestRequest 的区别：用 ``stocks`` 列表替代单个 ``symbol``，\n资金按 equal 模式均分到各标的。日期范围过滤由前端完成（取满 800 根后过滤）。"},"QuoteRequest":{"properties":{"stocks":{"items":{"$ref":"#/components/schemas/StockIdentifier"},"type":"array","maxItems":80,"minItems":1,"title":"Stocks","description":"股票列表（最多80只）"}},"type":"object","required":["stocks"],"title":"QuoteRequest","description":"Batch quote request."},"RotationBacktestRequest":{"properties":{"stocks":{"items":{"type":"string"},"type":"array","maxItems":50,"minItems":2,"title":"Stocks","description":"股票池，格式 \"市场:代码\"，如 [\"SZ:000001\",\"SH:600519\"]"},"score":{"type":"string","enum":["momentum","formula"],"title":"Score","description":"打分方式：momentum（内置动量）或 formula（公式数值输出）","default":"momentum"},"period":{"type":"integer","maximum":250.0,"minimum":2.0,"title":"Period","description":"动量回看周期（score=momentum 时）","default":20},"formula_text":{"anyOf":[{"type":"string","maxLength":8000},{"type":"null"}],"title":"Formula Text","description":"通达信公式（score=formula 时）"},"score_col":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Score Col","description":"公式数值输出列名（默认最后一个）"},"slots":{"type":"integer","maximum":20.0,"minimum":1.0,"title":"Slots","description":"持仓槽位数","default":5},"refresh":{"type":"string","enum":["daily","weekly","monthly"],"title":"Refresh","description":"调仓频率","default":"weekly"},"category":{"type":"string","enum":["DAY","WEEK","MONTH","MIN_5","MIN_15","MIN_30","MIN_60"],"title":"Category","default":"DAY"},"count":{"type":"integer","maximum":2000.0,"minimum":60.0,"title":"Count","description":"每标的 K 线根数","default":500},"cash":{"type":"number","exclusiveMinimum":0.0,"title":"Cash","default":1000000.0},"commission":{"type":"number","maximum":0.01,"minimum":0.0,"title":"Commission","default":0.0003},"min_commission":{"type":"number","minimum":0.0,"title":"Min Commission","default":5.0},"stamp_tax":{"type":"number","maximum":0.01,"minimum":0.0,"title":"Stamp Tax","default":0.001},"stop_loss":{"anyOf":[{"type":"number","maximum":0.9,"exclusiveMinimum":0.0},{"type":"null"}],"title":"Stop Loss","description":"槽内止损比例"},"take_profit":{"anyOf":[{"type":"number","maximum":10.0,"exclusiveMinimum":0.0},{"type":"null"}],"title":"Take Profit","description":"槽内止盈比例"}},"type":"object","required":["stocks"],"title":"RotationBacktestRequest","description":"轮动组合回测请求（v1.27）。\n\n按打分排名定期换仓：固定槽位等额、跌出排名自动卖出补位。\n打分支持内置动量或通达信公式数值输出。"},"SavedStrategy":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"kind":{"type":"string","enum":["single","portfolio","multi"],"title":"Kind"},"strategy":{"type":"string","title":"Strategy"},"strategy_label":{"type":"string","title":"Strategy Label","default":""},"params":{"additionalProperties":true,"type":"object","title":"Params","default":{}},"context":{"additionalProperties":true,"type":"object","title":"Context","default":{}},"trade_config":{"additionalProperties":true,"type":"object","title":"Trade Config","default":{}},"snapshot":{"additionalProperties":true,"type":"object","title":"Snapshot","default":{}},"tags":{"items":{"type":"string"},"type":"array","title":"Tags","default":[]},"notes":{"type":"string","title":"Notes","default":""},"created_at":{"type":"string","title":"Created At","default":""},"updated_at":{"type":"string","title":"Updated At","default":""},"app_version":{"type":"string","title":"App Version","default":""}},"type":"object","required":["id","name","kind","strategy"],"title":"SavedStrategy","description":"一条已保存策略（响应模型，含 id 与时间戳）。"},"SavedStrategyCreate":{"properties":{"name":{"type":"string","maxLength":120,"minLength":1,"title":"Name","description":"策略名称（用户自拟）"},"kind":{"type":"string","enum":["single","portfolio","multi"],"title":"Kind","description":"来源：单标的/组合/多策略组合"},"strategy":{"type":"string","title":"Strategy","description":"策略名（注册表 key，如 ma_cross）"},"strategy_label":{"type":"string","title":"Strategy Label","description":"策略展示名","default":""},"params":{"additionalProperties":true,"type":"object","title":"Params"},"context":{"additionalProperties":true,"type":"object","title":"Context","description":"标的上下文：single 存 symbol/category/start_date/end_date；portfolio 存 stocks 列表；multi 存 items(MultiStrategyItem[]) + cash/execution"},"trade_config":{"additionalProperties":true,"type":"object","title":"Trade Config","description":"资金与成本配置（cash/commission/...）"},"snapshot":{"additionalProperties":true,"type":"object","title":"Snapshot","description":"保存时的成绩快照（total_return/sharpe/...）"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags"},"notes":{"type":"string","maxLength":2000,"title":"Notes","default":""}},"type":"object","required":["name","kind","strategy"],"title":"SavedStrategyCreate","description":"新建一条已保存策略的请求体。\n\n前端在单标的/组合回测结果区点「保存策略」时提交。``strategy`` + ``params``\n是回测引擎可直接消费的最小复现形态；``context`` 记录当时测的标的/日期，\n``snapshot`` 记录保存时的关键绩效指标（\"为什么觉得它好\"）。"},"SavedStrategyListResponse":{"properties":{"strategies":{"items":{"$ref":"#/components/schemas/SavedStrategy"},"type":"array","title":"Strategies"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["strategies","count"],"title":"SavedStrategyListResponse","description":"策略库列表响应。"},"ServerSwitchRequest":{"properties":{"host":{"type":"string","title":"Host"}},"type":"object","required":["host"],"title":"ServerSwitchRequest","description":"POST /server/switch 的请求。"},"ServerTestRequest":{"properties":{"hosts":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Hosts"},"timeout":{"type":"number","title":"Timeout","default":5.0}},"type":"object","title":"ServerTestRequest","description":"POST /server/test 的请求。"},"SignalScanRequest":{"properties":{"window_bars":{"type":"integer","maximum":30.0,"minimum":1.0,"title":"Window Bars","description":"检查最近 N 根 K 线内的信号（日线即 N 个交易日）","default":5}},"type":"object","title":"SignalScanRequest","description":"信号扫描请求：扫描策略库全部已保存策略，只看最近 N 根 K 线内的信号。"},"StockIdentifier":{"properties":{"market":{"type":"string","pattern":"^(SZ|SH|BJ)$","title":"Market","description":"市场代码"},"code":{"type":"string","maxLength":6,"minLength":6,"title":"Code","description":"6位股票代码"}},"type":"object","required":["market","code"],"title":"StockIdentifier","description":"A single stock identified by market + code."},"StrategySchemaResponse":{"properties":{"strategies":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Strategies"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["strategies","count"],"title":"StrategySchemaResponse","description":"策略 schema 列表响应（/backtest/strategies）。"},"SwitchResponse":{"properties":{"ok":{"type":"boolean","title":"Ok"},"host":{"type":"string","title":"Host"},"message":{"type":"string","title":"Message"}},"type":"object","required":["ok","host","message"],"title":"SwitchResponse","description":"POST /server/switch 的响应。"},"TaskListResponse":{"properties":{"tasks":{"items":{"$ref":"#/components/schemas/TaskSummary"},"type":"array","title":"Tasks"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["tasks","count"],"title":"TaskListResponse","description":"任务摘要列表响应。"},"TaskStateResponse":{"properties":{"task_id":{"type":"string","title":"Task Id"},"status":{"type":"string","enum":["pending","running","done","failed"],"title":"Status"},"result":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Result"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"description":{"type":"string","title":"Description","default":""},"elapsed":{"type":"number","title":"Elapsed","default":0.0}},"type":"object","required":["task_id","status"],"title":"TaskStateResponse","description":"后台任务状态响应。"},"TaskSubmitResponse":{"properties":{"task_id":{"type":"string","title":"Task Id"},"status":{"type":"string","enum":["pending","running"],"title":"Status"}},"type":"object","required":["task_id","status"],"title":"TaskSubmitResponse","description":"后台任务提交响应。"},"TaskSummary":{"properties":{"task_id":{"type":"string","title":"Task Id"},"status":{"type":"string","enum":["pending","running","done","failed"],"title":"Status"},"description":{"type":"string","title":"Description","default":""},"created_at":{"type":"number","title":"Created At","default":0.0},"elapsed":{"type":"number","title":"Elapsed","default":0.0}},"type":"object","required":["task_id","status"],"title":"TaskSummary","description":"任务摘要（列表用，不含完整 result）。"},"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"},"WatchItemAdd":{"properties":{"market":{"type":"string","pattern":"^(SZ|SH|BJ)$","title":"Market"},"code":{"type":"string","maxLength":6,"minLength":6,"title":"Code"},"name":{"type":"string","maxLength":64,"title":"Name","default":""},"group":{"type":"string","maxLength":32,"title":"Group","default":"默认"}},"type":"object","required":["market","code"],"title":"WatchItemAdd","description":"加入自选请求。name 由前端从行情数据带过来。"},"WatchlistResponse":{"properties":{"items":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Items"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["items","count"],"title":"WatchlistResponse"}}}}