mirror of
https://github.com/shy3130/tick-stock-panel.git
synced 2026-11-02 10:26:13 +00:00
- 策略: 引擎只加载 data/strategies/{custom,ai,composite} 与研究模板目录,
原 25 个内置策略一次性迁移为用户自定义文件(ID 不变, 引用零迁移);
研究模板移至 app/strategy/research, 打包 spec 同步; 新装环境策略库为空
- 信号: 管线不再硬编码任何信号表达式; 涨跌停判定价成为运行时列
limit_up_price/limit_down_price(生效价∓0.005 容差), 20 个信号转为
data/user_data/custom_signals 定义(显式 column 沿用 signal_* 原列名);
依赖解析/注入顺序/当日路径 prev-join 全部定义驱动; 语义统一为历史路径
口径(顺带修正当日路径 BOLL 比较符与翘板/炸板空值两处既有偏差)
- 前端: 信号库单列表(全部可编辑), SignalPicker/监控选项/信号标签全走
定义接口; 回测页新增免责声明(模拟性质/数据源准确性不作保证/不构成
投资建议)
- 测试: 25 个策略夹具与 20 个信号种子入库 tests/fixtures, 受影响测试
全部自包含化(不依赖运行目录用户数据); 77 万行 MA 死叉新旧表达式对拍
逐行一致; 回测实跑 45 笔卖点信号出场验证矩阵链路
- 同批包含工作区既有进度: 策略结果 ext 列同日投影修复(含测试)、数据源插件、fuyao/auth/api_gateway/data_integrity 调整、README 信号库
描述与 strategy.md 导入路径补充
验证: 后端 2592 passed(空数据目录 CI 模拟 2588 passed, 4 例为模拟环境
伪影复验排除); 前端 vitest 125 passed + tsc 0 错 + vite build 通过
86 lines
2.8 KiB
Python
86 lines
2.8 KiB
Python
"""策略提示词组装器 — 两步定制流程的提示词生成。
|
||
|
||
职责: 加载对应步骤的 Markdown 指南,拼接用户输入,组装 LLM 提示词。
|
||
不知道: LLM 调用、API、前端、引擎执行。
|
||
"""
|
||
from __future__ import annotations
|
||
|
||
from pathlib import Path
|
||
|
||
# 运行时依赖的提示词文档(随 backend/app 打包进 Docker,避免 .dockerignore 排除 docs/ 导致运行时缺失)
|
||
_DOCS_DIR = Path(__file__).resolve().parent / "prompts"
|
||
_cache: dict[str, str] = {}
|
||
|
||
|
||
def _load_doc(name: str) -> str:
|
||
if name not in _cache:
|
||
path = _DOCS_DIR / name
|
||
_cache[name] = path.read_text(encoding="utf-8") if path.exists() else ""
|
||
return _cache[name]
|
||
|
||
|
||
DIRECTION_CN = {"long": "做多", "short": "做空", "monitor": "监控"}
|
||
|
||
|
||
def _format_basic_filter(basic_filter: dict) -> str:
|
||
"""dict → Python 字面量单行 (True/False/None 保持 Python 语法, 供 AI 直接抄进 META)。"""
|
||
return repr(dict(basic_filter))
|
||
|
||
|
||
def build_step1(
|
||
name: str,
|
||
description: str,
|
||
direction: str,
|
||
rules: str,
|
||
strategy_id: str = "",
|
||
execution_backend: str = "polars_expr",
|
||
basic_filter: dict | None = None,
|
||
) -> str:
|
||
"""步骤1:规则 → 完整策略代码(参数 + 信号 + 评分)
|
||
|
||
注意: 生成规范已在 ai_generator.py 的 system prompt 中加载,
|
||
此处只拼用户输入以降低网关超时概率。
|
||
basic_filter: 用户「默认基础参数」(策略页设置); None = 不约束, AI 自行默认。
|
||
"""
|
||
id_line = f"\n策略ID(必须使用此ID):{strategy_id}" if strategy_id else ""
|
||
bf_line = (
|
||
f"\n用户默认基础过滤参数(META 的 basic_filter 必须严格使用以下值,"
|
||
f"除非策略规则与之明确冲突并在代码注释中说明):\n{_format_basic_filter(basic_filter)}\n"
|
||
if basic_filter
|
||
else ""
|
||
)
|
||
|
||
return f"""请根据以下用户输入生成完整策略代码:
|
||
|
||
策略名称:{name}{id_line}
|
||
策略描述:{description}
|
||
策略方向:{DIRECTION_CN.get(direction, direction)}
|
||
执行后端:{execution_backend}
|
||
{bf_line}策略规则:
|
||
{rules}
|
||
|
||
输出要求:
|
||
1. 严格遵循系统提示中的策略文件结构和安全限制。
|
||
2. 严格使用指定执行后端;matrix_native 只定义 MATRIX_STRATEGY,polars_expr 只定义 filter()。若 polars 规则确需历史窗口,改用 python_history_legacy + filter_history()。
|
||
3. META 必须声明 asset_types 和 timeframes,并生成完整执行与交易元数据。
|
||
4. 只输出 Python 代码。"""
|
||
|
||
|
||
def build_step2(current_code: str, instruction: str) -> str:
|
||
"""步骤2:修改策略任意部分"""
|
||
guide = _load_doc("strategy-builder-step2.md")
|
||
|
||
return f"""{guide}
|
||
|
||
---
|
||
|
||
当前策略代码:
|
||
```python
|
||
{current_code}
|
||
```
|
||
|
||
用户修改指令:
|
||
{instruction}
|
||
|
||
只输出修改后的完整 Python 代码。"""
|