mirror of
https://github.com/NoFxAiOS/nofx.git
synced 2026-07-18 09:54:35 +08:00
Refine strategy creation flow and diagnostics
This commit is contained in:
@@ -13,6 +13,10 @@
|
||||
"若候选币为空,检查 source_type/static_coins/AI500/OI 榜单/排除币/量化数据开关,不要直接归因为模型问题。",
|
||||
"若 AI 一直 hold/wait,先检查 min_confidence、min_risk_reward_ratio、提示词是否过于保守、行情是否满足入场条件,再判断是否需要放宽策略。",
|
||||
"若交易员绑定了策略但没有下单,应与 trader_diagnosis 协作区分策略无信号、风控拦截和交易所下单失败。",
|
||||
"策略诊断必须区分可编辑策略字段和 System enforced 字段。AI 智能策略里的 max_positions、btceth_max_position_value_ratio、altcoin_max_position_value_ratio、max_margin_usage、min_position_size 只能解释,不能建议用户修改。",
|
||||
"如果不开单原因来自最小下单金额、保证金或仓位价值边界,不要建议修改 min_position_size 或 position_size_usd;应建议增加账户权益、换更适合小资金的标的、调整可编辑风险偏好或让策略在资金不足时等待。",
|
||||
"策略页不存在 position_size_usd 这类固定配置项;position_size_usd 是 AI 每轮决策输出,不是策略模板字段。不要把 AI 决策里的 position_size_usd 说成可以在策略页手动修改的参数。",
|
||||
"后台 402/404/EOF 类数据源错误只能作为策略分析质量的辅助影响,不能在决策记录已经显示明确风控/最小金额拒绝时作为主因。",
|
||||
"策略模板本身不保存交易所、模型、扫描间隔或初始余额;这些问题应引导到 trader/model/exchange 相关诊断。"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"name": "strategy_management",
|
||||
"kind": "management",
|
||||
"domain": "strategy",
|
||||
"description": "当用户想创建、查看、修改、删除、激活或复制策略模板时调用。策略模板不能直接启动运行;只有绑定了该策略的交易员可以启动。",
|
||||
"description": "当用户想创建、查看、修改、删除、激活或复制策略模板时调用。",
|
||||
"field_constraints": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
@@ -33,8 +33,7 @@
|
||||
"strategy_type": {
|
||||
"type": "enum",
|
||||
"values": ["ai_trading", "grid_trading"],
|
||||
"default": "ai_trading",
|
||||
"description": "策略类型:ai_trading(AI 量化)或 grid_trading(网格策略)。"
|
||||
"description": "策略类型:ai_trading(AI 量化)或 grid_trading(网格策略)。创建策略时必须先由用户选择或从用户话语明确识别,不能默认成 ai_trading。"
|
||||
},
|
||||
"symbol": {
|
||||
"type": "enum",
|
||||
@@ -43,8 +42,8 @@
|
||||
},
|
||||
"source_type": {
|
||||
"type": "enum",
|
||||
"values": ["static", "ai500", "oi_top", "oi_low", "mixed"],
|
||||
"description": "选币来源类型。static=用户指定静态币池,ai500=AI500榜单,oi_top=持仓量增长,oi_low=持仓量下降,mixed=混合。"
|
||||
"values": ["static", "ai500", "oi_top", "oi_low"],
|
||||
"description": "选币来源类型。static=用户指定静态币池,ai500=AI500榜单,oi_top=持仓量增长,oi_low=持仓量下降。"
|
||||
},
|
||||
"static_coins": {
|
||||
"type": "string_array",
|
||||
@@ -78,11 +77,6 @@
|
||||
"max": 20,
|
||||
"description": "山寨币最大杠杆倍数,范围 1~20。"
|
||||
},
|
||||
"max_positions": {
|
||||
"type": "int",
|
||||
"min": 1,
|
||||
"description": "最大同时持仓数量。策略页展示为 System enforced,不是普通手动可编辑项;除非用户明确要求高级配置,否则不要主动修改。"
|
||||
},
|
||||
"min_confidence": {
|
||||
"type": "int",
|
||||
"min": 50,
|
||||
@@ -124,7 +118,7 @@
|
||||
"total_investment": {
|
||||
"type": "float",
|
||||
"min": 100,
|
||||
"description": "网格总投入金额,grid_trading 类型专用,手动页面最小 100 USDT,步进 100。"
|
||||
"description": "网格总投入金额,grid_trading 类型专用,表示用户实际投入/保证金预算,不是杠杆后的名义仓位;名义仓位约等于 total_investment × leverage。手动页面最小 100 USDT,步进 100。"
|
||||
},
|
||||
"leverage": {
|
||||
"type": "int",
|
||||
@@ -351,81 +345,28 @@
|
||||
"min": 5,
|
||||
"max": 20,
|
||||
"description": "价格排行榜返回数量,页面选项为 5、10、15、20。"
|
||||
},
|
||||
"btceth_max_position_value_ratio": {
|
||||
"type": "float",
|
||||
"min": 0,
|
||||
"description": "BTC/ETH 单仓最大仓位价值占比。策略页展示为 System enforced,不是普通手动可编辑项;除非用户明确要求高级配置,否则不要主动修改。"
|
||||
},
|
||||
"altcoin_max_position_value_ratio": {
|
||||
"type": "float",
|
||||
"min": 0,
|
||||
"description": "山寨币单仓最大仓位价值占比。策略页展示为 System enforced,不是普通手动可编辑项;除非用户明确要求高级配置,否则不要主动修改。"
|
||||
},
|
||||
"max_margin_usage": {
|
||||
"type": "float",
|
||||
"min": 0,
|
||||
"description": "最大保证金占用比例。策略页展示为 System enforced,不是普通手动可编辑项;除非用户明确要求高级配置,否则不要主动修改。"
|
||||
}
|
||||
},
|
||||
"validation_rules": [
|
||||
"AI 策略页面包含:选币来源、指标/K线/量化数据、风险控制、Prompt Sections、自定义提示词、发布设置。",
|
||||
"网格策略页面包含:symbol、grid_count、total_investment、leverage、upper_price、lower_price、use_atr_bounds、atr_multiplier、distribution、max_drawdown_pct、stop_loss_pct、daily_loss_limit_pct、use_maker_only、enable_direction_adjust、direction_bias_ratio、发布设置。",
|
||||
"用户询问字段有哪些选项、范围或页面能不能设置时,应直接按本 skill 的 field_constraints 回答;不要说“平台会自动匹配”或编造页面不存在的字段。",
|
||||
"grid_trading 的 symbol 只能从页面下拉选项 BTCUSDT、ETHUSDT、SOLUSDT、BNBUSDT、XRPUSDT、DOGEUSDT 中选择。",
|
||||
"grid_trading 的 grid_count 范围为 5~50,total_investment 最小 100,leverage 范围 1~5,atr_multiplier 范围 1~5。",
|
||||
"grid_trading 的 max_drawdown_pct 范围为 5~50,stop_loss_pct 范围为 1~20,daily_loss_limit_pct 范围为 1~30,direction_bias_ratio 范围为 0.55~0.90。",
|
||||
"grid_trading 推荐价格区间时,不能凭记忆猜“当前 BTC/ETH/SOL 价格”。没有实时行情工具结果时,应优先推荐 use_atr_bounds=true 的 ATR 自动边界;只有本轮已经获取过实时价格,才可以给基于当前价格的 upper_price/lower_price 数值。",
|
||||
"AI 策略的 static_coins 最多 10 个,selected_timeframes 最多 4 个,primary_count 范围为 10~30。",
|
||||
"排行榜 duration 只能用页面选项;ranking_limit 只能用 5、10、15、20。",
|
||||
"btceth_max_leverage 和 altcoin_max_leverage 范围均为 1~20,超出时自动收敛并告知用户。",
|
||||
"min_confidence 范围 50~100,超出时自动收敛并告知用户。",
|
||||
"grid_trading 类型时,lower_price 必须小于 upper_price,否则提示用户修正。",
|
||||
"策略模板不能直接启动运行,只有绑定了该策略的交易员才能启动。",
|
||||
"策略模板创建成功后应出现在策略列表/策略页。",
|
||||
"本 skill 的“页面/手动页面”表述只用于说明字段范围和 UI 约束,不表示用户必须去页面操作;创建、更新、删除、激活、复制等动作都应通过 Agent 工具在聊天中执行。",
|
||||
"创建策略的确认发生在聊天里:当配置已整理好,应让用户回复“确认创建”;用户确认后必须调用创建工具,不要要求用户点击网页或 APP 里的按钮。",
|
||||
"创建策略模板时不要要求用户先绑定或添加交易所账户,也不要要求绑定 AI 模型;交易所和模型只属于 trader 创建、部署或启动流程。",
|
||||
"策略是模板/规则,不保存交易所 API、模型 provider、钱包余额或扫描间隔;这些属于交易员、模型或交易所配置。",
|
||||
"如果用户只是创建或配置策略模板,不要把它升级成 trader 创建流程。",
|
||||
"如果用户说“用某个策略创建/启动交易员”,不要新建同名策略;应先查找并绑定已有策略,只有用户明确要求新策略时才创建。",
|
||||
"删除操作不可逆,必须先向用户确认再执行。",
|
||||
"激活(activate)操作将该策略设为默认模板,不是启动运行。",
|
||||
"scan_interval_minutes、initial_balance、lighter_api_key_index 这类交易员/交易所边界值不属于策略本身,若用户在改策略时提到,应引导去对应 trader 或 exchange 配置。",
|
||||
"max_positions、btceth_max_position_value_ratio、altcoin_max_position_value_ratio、max_margin_usage、min_position_size 在策略页属于 System enforced / 非普通手动编辑项;若用户问页面能否改,应说明页面不提供普通编辑入口。min_position_size 固定为 12 USDT,Agent 不能修改。",
|
||||
"启用量化数据相关开关时,若需要 nofxos_api_key,应主动提醒用户补齐。",
|
||||
"启用排行榜相关能力时,只修改用户明确提到的 enable_*、duration、limit 字段,不要偷偷打开其他排行榜。"
|
||||
"本 skill 只负责策略模板创建、查看、修改、删除、激活和复制。",
|
||||
"字段选项和范围来自 field_constraints;产品行为规则由 active session prompt 负责。"
|
||||
],
|
||||
"actions": {
|
||||
"create": {
|
||||
"description": "创建策略模板。至少需要名称,其他配置可按需追问或按默认值补齐。",
|
||||
"description": "创建策略模板。",
|
||||
"required_slots": ["name"],
|
||||
"optional_slots": ["description", "is_public", "config_visible", "lang", "strategy_type", "symbol", "source_type", "static_coins", "excluded_coins", "primary_timeframe", "selected_timeframes", "btceth_max_leverage", "altcoin_max_leverage", "max_positions", "min_confidence", "min_risk_reward_ratio", "custom_prompt", "role_definition", "trading_frequency", "entry_standards", "decision_process", "use_atr_bounds", "atr_multiplier", "enable_direction_adjust", "direction_bias_ratio", "grid_count", "total_investment", "leverage", "upper_price", "lower_price", "distribution", "max_drawdown_pct", "stop_loss_pct", "daily_loss_limit_pct", "use_maker_only", "use_ai500", "ai500_limit", "use_oi_top", "oi_top_limit", "use_oi_low", "oi_low_limit", "primary_count", "enable_ema", "enable_macd", "enable_rsi", "enable_atr", "enable_boll", "enable_volume", "enable_oi", "enable_funding_rate", "ema_periods", "rsi_periods", "atr_periods", "boll_periods", "nofxos_api_key", "enable_quant_data", "enable_quant_oi", "enable_quant_netflow", "enable_oi_ranking", "oi_ranking_duration", "oi_ranking_limit", "enable_netflow_ranking", "netflow_ranking_duration", "netflow_ranking_limit", "enable_price_ranking", "price_ranking_duration", "price_ranking_limit", "btceth_max_position_value_ratio", "altcoin_max_position_value_ratio", "max_margin_usage"],
|
||||
"optional_slots": ["strategy_type", "config_patch"],
|
||||
"goal": "创建一个可供 trader 绑定使用的策略模板。",
|
||||
"dynamic_rules": [
|
||||
"若用户只是要给 trader 绑定现有策略,应优先在父任务里补 strategy 槽位,而不是误开新的 create。",
|
||||
"若用户明确要求新建策略,至少先收齐名称;如果用户尚未说明策略类型,只问一次 AI 策略还是网格策略。",
|
||||
"策略类型确定后,不要一个字段一个字段追问配置;应把用户已给出的信息合并进去,剩余字段用安全默认值补齐,直接给一份完整草稿让用户确认或修改。",
|
||||
"如果配置已经足够且用户在聊天里确认创建,应直接调用 Agent 的创建工具;不要告诉用户去页面点击“确认”或“创建策略”按钮。",
|
||||
"当用户说“全部由你定”“你帮我决定”时,可以给出安全默认/推荐参数,但必须说清楚这些是 Agent 建议值;不要说成“你已经填好/你已经配置好”。",
|
||||
"创建策略模板本身不需要交易所账户或 AI 模型;不要在 create 策略时询问用户是否已有交易所账户。",
|
||||
"如果用户同时提到模型 provider、交易所账户或扫描间隔,应把这些信息留给 trader 创建流程,不要写入策略配置。",
|
||||
"只有当用户明确要求运行、部署、实盘、创建交易员或绑定到交易员时,才进入 trader 流程并收集交易所/模型。",
|
||||
"策略模板创建成功后应出现在策略列表/策略页。",
|
||||
"只有用户要运行或部署时,才继续 trader 绑定。",
|
||||
"杠杆超出 1~20 范围时,自动收敛并告知用户。"
|
||||
],
|
||||
"success_output": "返回 strategy_id 和新策略摘要(名称、类型、主要配置)。",
|
||||
"failure_output": "明确指出仍缺哪些核心参数,或说明需要先确认的风控收敛结果。"
|
||||
},
|
||||
"update": {
|
||||
"description": "更新策略模板的任意可编辑字段。",
|
||||
"required_slots": ["target_ref"],
|
||||
"optional_slots": ["name", "description", "is_public", "config_visible", "symbol", "source_type", "static_coins", "excluded_coins", "primary_timeframe", "selected_timeframes", "btceth_max_leverage", "altcoin_max_leverage", "max_positions", "min_confidence", "min_risk_reward_ratio", "custom_prompt", "role_definition", "trading_frequency", "entry_standards", "decision_process", "grid_count", "total_investment", "leverage", "upper_price", "lower_price", "distribution", "use_atr_bounds", "atr_multiplier", "enable_direction_adjust", "direction_bias_ratio", "max_drawdown_pct", "stop_loss_pct", "daily_loss_limit_pct", "use_maker_only", "use_ai500", "ai500_limit", "use_oi_top", "oi_top_limit", "use_oi_low", "oi_low_limit", "primary_count", "enable_ema", "enable_macd", "enable_rsi", "enable_atr", "enable_boll", "enable_volume", "enable_oi", "enable_funding_rate", "ema_periods", "rsi_periods", "atr_periods", "boll_periods", "nofxos_api_key", "enable_quant_data", "enable_quant_oi", "enable_quant_netflow", "enable_oi_ranking", "oi_ranking_duration", "oi_ranking_limit", "enable_netflow_ranking", "netflow_ranking_duration", "netflow_ranking_limit", "enable_price_ranking", "price_ranking_duration", "price_ranking_limit", "btceth_max_position_value_ratio", "altcoin_max_position_value_ratio", "max_margin_usage"],
|
||||
"optional_slots": ["name", "description", "is_public", "config_visible", "config_patch"],
|
||||
"goal": "更新一个已有策略模板的指定配置,而不覆盖未提及字段。",
|
||||
"dynamic_rules": [
|
||||
"只更新用户明确提到的字段,不要覆盖未提及的字段。",
|
||||
"如果用户想修改绑定的模型、交易所、扫描间隔或交易员运行状态,应转去 trader_management,不要写进策略。",
|
||||
"杠杆超出 1~20 范围时,自动收敛并告知用户。",
|
||||
"grid_trading 类型时,lower_price 必须小于 upper_price。"
|
||||
],
|
||||
@@ -458,25 +399,20 @@
|
||||
},
|
||||
"update_config": {
|
||||
"description": "修改策略的某个具体配置参数(选币来源、指标、风控参数等)。",
|
||||
"required_slots": ["target_ref", "config_field", "config_value"],
|
||||
"required_slots": ["target_ref"],
|
||||
"optional_slots": ["config_patch"],
|
||||
"goal": "修改策略模板中的一个或一组具体配置参数。",
|
||||
"dynamic_rules": [
|
||||
"配置值超出手动面板边界时,应先自动收敛并明确告知用户。",
|
||||
"若用户一次提到多个配置 patch,可在同一轮内整体应用,但要明确说明最终修改了哪些字段。",
|
||||
"拒绝把 exchange_id、ai_model_id、scan_interval_minutes、initial_balance、wallet/private key 等非策略字段作为策略 config 写入。",
|
||||
"当配置更新涉及 custom_prompt、role_definition、trading_frequency、entry_standards、decision_process、description、name 等文本槽位,且用户表达了“交给你”“你帮我写”“你自己设计”等委托生成意图时,严禁再次向用户索要正文。",
|
||||
"此时你必须直接生成一版可用文本,写入对应 extracted 字段,并用确认式问题向用户展示:“我先为你拟了一版……,要直接按这版更新吗?”"
|
||||
"配置变更统一通过 config_patch 表达,字段必须来自当前策略类型的产品模板。",
|
||||
"字段选项、范围和非策略字段拦截由 active session prompt 与后端 schema 负责。"
|
||||
],
|
||||
"success_output": "返回 strategy_id,并明确告知已修改的配置字段及其最终值。",
|
||||
"failure_output": "明确指出目标策略不存在、配置字段非法,或值仍需用户澄清。"
|
||||
},
|
||||
"activate": {
|
||||
"description": "将策略模板设为默认模板(激活)。注意:这不是启动运行,只是设为默认。",
|
||||
"description": "将策略模板设为默认模板(激活)。",
|
||||
"required_slots": ["target_ref"],
|
||||
"goal": "将某个策略模板设为默认模板,而不是直接运行它。",
|
||||
"dynamic_rules": [
|
||||
"必须明确区分“激活模板”和“启动交易员运行”,不要把 activate 解释成运行。"
|
||||
],
|
||||
"goal": "将某个策略模板设为默认模板。",
|
||||
"success_output": "返回 strategy_id,并明确告知该策略已被设为默认模板。",
|
||||
"failure_output": "明确指出目标策略不存在,或激活失败原因。"
|
||||
},
|
||||
|
||||
@@ -5,18 +5,29 @@
|
||||
"description": "当用户反馈交易员无法启动、启动后不交易、反复报错、绑定模型或交易所缺失、运行状态异常、收益或仓位表现异常时调用。适用于交易员运行过程中的排障与原因定位。不用于创建、修改、删除、启动、停止或查询交易员这类管理操作。",
|
||||
"capabilities": [
|
||||
"读取交易员当前状态、账户、持仓和最近决策记录",
|
||||
"读取交易员绑定的策略、模型、交易所配置摘要,并把它们纳入不开单诊断证据包",
|
||||
"在用户明确指定目标交易员后,读取该交易员最近的后端日志",
|
||||
"把错误日志、运行状态和绑定信息合并成适合新手理解的诊断结论"
|
||||
"把完整证据合并成适合新手理解的最终原因和下一步行动"
|
||||
],
|
||||
"dynamic_rules": [
|
||||
"当用户问“为什么报错”“为什么不交易”“为什么停了”这类问题时,优先走诊断而不是管理类 skill。",
|
||||
"如果已经能唯一确定目标交易员,应优先结合 get_backend_logs、持仓、状态和决策记录一起分析,而不是只看配置。",
|
||||
"如果已经能唯一确定目标交易员,应一次性收集完整诊断证据包:交易员配置/运行状态、绑定策略、绑定模型、绑定交易所、账户权益/可用余额、当前持仓、get_decisions 最近决策记录、get_backend_logs 后台日志。不要只查其中一项就下结论。",
|
||||
"面向普通用户的诊断回复只说最终原因和该怎么办,不要输出证据包清单、工具名、后台日志片段、HTTP 状态码或工程排障过程。",
|
||||
"诊断结论内部必须区分:直接原因、次要影响、待确认因素。直接原因必须来自最近决策记录、交易所下单结果、风控校验或明确运行状态;后台日志里的零散错误只能作为辅助证据。",
|
||||
"证据优先级固定为:最近决策记录 > 交易员运行状态/账户/持仓 > 交易所下单结果 > 后台日志。除非最近决策记录本身显示数据获取失败或 AI 决策中断,否则不要让 backend logs 盖过决策记录。",
|
||||
"交易员不下单的排查顺序固定为:是否运行中 -> 是否已到扫描间隔 -> 策略候选币/行情数据是否为空 -> 最近 AI 决策是否为 hold/wait -> 风控是否拦截 -> 交易所下单是否报错 -> 余额、杠杆、仓位模式或权限是否限制。",
|
||||
"判断“不下单/不开单”的主因时,最近决策记录优先级高于零散 backend error 日志;如果最近决策显示 wait succeeded,应解释为 AI 主动等待;如果最新决策 error_message 显示 opening amount too small / below minimum / must be ≥,应解释为开仓金额低于系统或交易所最小下单门槛。",
|
||||
"遇到 opening amount too small、position value below minimum、must be ≥ 这类错误时,不要建议用户修改 AI 智能策略的 min_position_size 或 position_size_usd。先说明这是系统/交易所门槛或 System enforced 边界,再建议增加账户权益、换更适合小资金的交易标的、调整可编辑策略偏好,或让策略在资金不足时等待。",
|
||||
"AI 智能策略里的 System enforced 字段(max_positions、btceth_max_position_value_ratio、altcoin_max_position_value_ratio、max_margin_usage、min_position_size)只能解释,不能建议用户修改;如果限制来自这些字段,行动建议必须落在产品实际可改项或用户账户/标的选择上。",
|
||||
"不要只因为 backend logs 里出现 402、404、EOF、payment retry failed 就直接归因为数据服务、订阅到期或付款失败;这些内部异常不应在普通用户回答里出现,除非用户明确追问后台日志或技术细节。",
|
||||
"402 不要直接翻译成“订阅到期”。在没有钱包余额、支付状态或服务侧确认前,不能说订阅过期;普通用户回答里也不要主动说 402。",
|
||||
"如果最近决策记录显示 candidate_coins 非空、AI call completed、wait succeeded 或 open_* 决策已生成,则说明核心决策链路并非完全拿不到数据;此时不要把 402/404/EOF 说成不开单主因。",
|
||||
"行动建议必须对应产品里真实存在且可修改的字段或操作。不要编造策略页不存在的 position_size_usd 参数,不要建议修改 System enforced 字段。",
|
||||
"如果模型是 claw402 或 blockrun-base,应单独检查钱包 USDC 余额;余额不足时应说“支付余额不足/需要充值”,不要泛化成“模型没启用”。",
|
||||
"如果日志显示 AI 返回 hold/wait,应解释为模型判断当前没有足够交易信号,不应误判为系统没有运行。",
|
||||
"如果日志显示下单失败,应优先归因到交易所权限、API 凭证、仓位模式、余额、杠杆或 symbol 可交易性,而不是策略没有生效。",
|
||||
"当用户表达“启动不了”“启动失败”“无法启动”“一启动就报错”“为什么启动不起来”这类启动故障时,只要目标交易员能唯一确定,就优先自动读取 get_backend_logs。",
|
||||
"当日志中已经出现明确错误原因时,直接用人话解释原因和下一步,不要只复述原始日志。"
|
||||
"当证据中已经出现明确错误原因时,直接用人话解释最终原因和下一步,不要复述原始日志。"
|
||||
],
|
||||
"tool_mapping": {
|
||||
"query_runtime_state": "get_trader_system_status",
|
||||
|
||||
Reference in New Issue
Block a user