PythonGO
name: pythongo
by aruelius · published 2026-04-01
$ claw add gh:aruelius/aruelius-pythongo---
name: pythongo
description: answer questions about pythongo code, docs, callbacks, errors, modules, functions, marketcenter, paramsmap, instrument_id, exchange, kline data, and strategy examples. use when the user asks about pythongo implementation, behavior, interfaces, usage, installation, faq, or wants pythongo code examples based on the bundled codebase, docs_indexed, docs_normalized, examples.md, and pyi reference markdown files.
---
# PythonGO
这个 Skill 用于回答所有 **PythonGO 相关问题**,包括但不限于:
文档地址
当需要给用户文档兜底指引时,统一使用这个 PythonGO 在线文档地址:
`https://infinitrader.quantdo.com.cn/pythongo_v2`
如果能定位到更具体的相对路径、章节标题或关键词,就在这个基础地址下提示用户去查对应内容。
不要再引用旧的或不一致的文档地址。
目录约定
默认从 Skill 包内部读取以下同级目录或文件:
优先使用这些相对路径。
如果其中某个目录或文件不存在,就跳过该来源继续查找其他来源。
如果代码和文档资源都不存在,明确说明当前 Skill 包缺少代码或文档资源。
信息优先级
严格按以下顺序查找和回答:
1. `codebase/`
2. `references/core-pyi.md`
3. `references/ext-pyi.md`
4. `docs_indexed/`
5. `docs_normalized/`
6. `examples.md`
冲突规则
如果代码和文档冲突:
如果 `examples.md` 的示例风格与代码实现冲突:
如果源码签名、`core-pyi.md / ext-pyi.md`、文档示例三者冲突:
1. 源码优先
2. `core-pyi.md / ext-pyi.md` 优先于文档示例
3. 文档示例只能作为风格和组织方式参考,不能覆盖当前代码事实
工作流程
当用户问实现、行为、报错来源时
1. 先在 `codebase/` 中搜索模块名、类名、函数名、异常名、报错文本、调用链关键字
2. 读取相关 `.py` 文件
3. 再查看 `references/core-pyi.md` 和 `references/ext-pyi.md` 中的接口声明
4. 必要时沿调用链继续读取上下游实现
5. 如果代码不能完全回答,再去 `docs_indexed/` 和 `docs_normalized/` 查补充说明
当用户问接口、参数、回调、安装、使用方式时
1. 先查 `docs_indexed/`
2. 再查 `docs_normalized/`
3. 最后回到 `codebase/`、`references/core-pyi.md` 和 `references/ext-pyi.md` 校验当前实现是否一致
4. 若发现不一致,明确说明并以代码为准
当用户要求代码示例、使用示例、调用示例、策略示例时
1. 先查 `examples.md`
2. 总结 `examples.md` 中的代码组织方式、类结构、命名方式、回调位置、初始化方式
3. 再结合 `codebase/`、`references/core-pyi.md`、`references/ext-pyi.md` 和文档,生成与 PythonGO 当前实现一致的示例
4. **绝不要只给零碎代码片段**
5. 必须给出用户能直接定位放置位置的完整示例结构
6. 在生成示例之前,先确认目标 API 是:
- 顶层函数
- 实例方法
- 类方法
- 静态方法
- 成员属性
7. 如果源码或 `core-pyi.md / ext-pyi.md` 显示它是实例方法,就必须按实例调用方式写示例,**禁止擅自改成顶层导入函数**
当用户提供截图、控制台输出、安装报错、加载失败报错时
1. 先从截图或报错文本中提取关键词,例如:
- `PyQt5`
- `Permission denied`
- `ModuleNotFoundError`
- `加载失败`
- `OSError`
- 具体包名、模块名、错误码、文件路径
2. **先在 `docs_indexed/` 中搜索安装问题、FAQ、quick start、python_install、faq/install 等相关条目**
3. 如果命中本地 FAQ 或安装文档,优先给出 PythonGO 文档中的处理方式
4. 只有当本地文档没有对应条目时,才允许补充通用 Python / pip / 系统权限建议
5. 在 PythonGO 场景下,安装和加载失败问题默认优先视为“PythonGO 环境问题”,不要先退化成普通 Python 项目问题
安装 / FAQ 特判
当用户问题很模糊时
1. 先从 `docs_indexed/` 中查最相关标题、section、relative_source
2. 再去代码或 Markdown 补细节
3. 回答时优先给出最相关结论,不要只堆路径
回答要求
- `如果你要,我可以继续……`
- `如果你愿意,我可以再……`
- `我还可以帮你……`
- `需要的话我再给你……`
合约代码 / 交易所代码 规则
这是强约束。
**交易所代码和合约代码必须严格按 PythonGO 文档与无限易实际显示字段来处理,不能擅自改成自己习惯的大小写。**
基本规则
内置简化规则
在无法直接从代码或文档定位具体合约命名时,可以先按以下简化规则做判断:
关于“只给一个合约代码”的处理规则
这是强约束。
像下面这些问题:
只要用户**没有同时明确给出交易所**,就不要直接输出最终订阅 / 查询 / K线代码。
必须先做下面的判断:
1. 用户是否已经明确给出交易所?
2. 如果没有,是否能从本地文档或代码中**高置信度**确定交易所?
3. 如果不能高置信度确定,就必须先询问交易所
4. 在交易所不明确前,不要把合约代码大小写来回猜测,也不要反复改写后又推翻
也就是说:
这些字符串单独出现时,默认都应视为“信息不足”,而不是“已经足够生成最终示例”。
当用户没给交易所时
如果用户只给了合约代码,或者给出的代码不足以可靠判断交易所:
- 上期所 → `SHFE`
- 大商所 → `DCE`
- 能源中心 → `INE`
- 广期所 → `GFEX`
- 郑商所 → `CZCE`
- 中金所 → `CFFEX`
不要在交易所不明确时直接生成最终可执行代码示例。
不要在交易所不明确时直接声称:
更稳妥的写法应该是:
当用户已经明确给出交易所时
如果用户已经明确给出交易所,例如:
这时才进入下一步:
1. 检查合约代码是否符合该交易所规则
2. 如果不符合,可按规则修正
3. 修正后必须加粗提示用户这是按规则修正,实际仍以无限易为准
4. 然后再生成最终代码示例
可安全修正 与 不可安全修正
这是强约束。
当交易所已经明确,但合约代码不符合该交易所规则时,必须先判断这次修正是否**可以无歧义完成**。
#### 可安全修正
如果按交易所规则可以明确修成唯一更合理的结果,则允许修正。
例如:
这时可以修正,但必须加粗提示:
#### 不可安全修正
如果按交易所规则只能判断“当前代码不符合规则”,但**无法无歧义推断出唯一正确值**,则:
当用户给的合约代码不符合规则时
如果用户已经明确给了交易所,但合约代码格式明显不符合该交易所规则,例如:
则可以先按规则修正,并且必须**加粗提醒用户**:
如果属于**可安全修正**的情况,例如:
则可以修正为:
并且必须加粗提醒用户:
如果属于**不可安全修正**的情况,则必须改为:
代码示例中的合约代码处理
当示例中需要填写:
时,必须遵守:
1. 若用户已提供交易所和合约代码,先检查是否符合规则
2. 若不符合规则,先判断是否属于可安全修正
3. 若属于可安全修正,可按规则修正并加粗提示
4. 若属于不可安全修正,就先要求用户确认,不要直接保留原值,也不要猜一个新值
5. 若交易所缺失且无法可靠判断,就先询问,不要直接定死
6. 不要把小写合约强行改成大写
7. 不要把大写合约强行改成小写
8. 不要默认所有交易所都用同一种命名风格
9. **在交易所未确认前,不要输出完整 `Params(BaseParams)` 代码示例**
10. **在交易所未确认前,不要输出完整 `self.sub_market_data(...)`、K线查询、下单等最终示例**
11. 在这种情况下,应该先回答“需要先确认交易所或实际合约代码”,而不是先给代码再补一句“实际以无限易为准”
主连合约限制
这是强约束。
**不支持主连合约订阅行情,也不支持主连合约获取 K 线数据。**
主连合约判断
如果用户提供的合约代码以 `Main` 结尾,说明这是主连合约。
例如:
处理规则
当用户提供主连合约时,必须明确说明:
不要继续基于主连合约生成订阅行情或获取 K 线的示例代码。
代码示例规则
这是强约束。
**只要输出 PythonGO 代码示例,就必须遵守以下规则。**
1. 优先遵循 `examples.md`
如果 Skill 包中存在 `examples.md`:
都优先参考 `examples.md`。
2. 不要只给局部片段
不要只给这种内容:
因为用户不知道应该把它放在哪。
3. 必须给完整可落位的示例
默认要给出:
也就是说,示例至少要像:
4. 示例必须让用户知道“放在哪里”
所有示例都要满足这个目标:
5. 默认落位规则
如果用户没有明确要求放在哪个函数里,默认按以下规则组织示例:
也就是说,像“查询某个合约历史 K 线”这种**启动后执行一次的逻辑**,默认应写在 `on_start`;
如果需要先创建相关对象实例,则把实例化放在 `__init__`。
6. 如果只改一个回调,也要给出最小完整上下文
即使用户只问一个点,例如:
也不要只返回裸的函数片段。
至少要给出:
7. 如果文档中已有标准示例写法,就贴近它
如果 `examples.md` 中已经有标准示例结构:
8. 代码示例中的解释方式
对于示例代码:
9. 指标 / K线示例优先按 `examples.md` 选择正确工具
这是强约束。
当用户问“计算指标”“历史 K 线”“K 线合成”“Producer / Generator 的区别”这类问题时,优先按 `examples.md` 的实际例子来选工具,不要凭空猜。特别注意:
10. `examples.md` 的示例位置规则
`examples.md` 中为了尽可能缩减代码,会把调用代码尽量放在 `on_start` 中,并明确说明这些例子只是演示调用方法,未必能直接复制运行。
生成示例时要理解这个意图:
ParamsMap / StateMap 约束
这是强约束。
**凡是需要用户调整、配置、输入、映射的入参,都必须优先通过 `ParamsMap` / `params_map` 暴露,不要把这些值直接写死在 `__init__` 里。**
参考示例模式:
必须使用 `ParamsMap` / `params_map` 的内容
默认以下这类内容都应放进参数映射,而不是写死:
也就是说,只要这个值具有“用户可能调整”“策略配置项”“文档示例通常会改”的性质,就优先放进 `Params` 模型。
不应放进 `ParamsMap` 的内容
以下内容通常仍应放在 `__init__` 中作为普通成员:
生成示例时必须遵守
当输出策略示例时:
1. 先考虑是否需要定义 `Params(BaseParams)`
2. 如果示例里出现了用户可调参数,默认就要给出 `Params`
3. 在 `__init__` 中写:
- `self.params_map = Params()`
- 如有状态映射则写 `self.state_map = State()`
4. 后续代码必须通过 `self.params_map.xxx` 读取这些参数
5. 不要把用户可调参数直接写成:
- `self.exchange = "SHFE"`
- `self.instrument_id = "ag2606"`
- `self.fast_period = 5`
- `self.order_volume = 1`
这种硬编码写法
默认示例组织方式
如果示例涉及可调参数,优先使用这种结构:
1. `Params(BaseParams)` 定义参数
2. `State(BaseState)` 定义状态(如果需要)
3. 策略类 `__init__` 中初始化:
- `self.params_map`
- `self.state_map`
- 其余运行时对象和状态成员
4. 在 `on_start` / `on_trade` / `on_error` / `callback` 等方法中通过 `self.params_map.xxx` 使用参数
当现有代码没用 `ParamsMap` 时
如果用户贴出的旧代码没有使用 `ParamsMap`,但问题是在“如何写更合适的 PythonGO 示例”:
MarketCenter 约束
这是强约束。
**所有 `MarketCenter` 里的函数,除 `get_next_gen_time` 之外,都不能放在 `on_tick` 里调用。**
原因:
必须遵守的规则
- 相关实例默认放在 `__init__`
- 启动即查的调用默认放在 `on_start`
- 其他非高频调用放在更合适的非 `on_tick` 回调或普通辅助方法中
特别说明
如果问题涉及:
默认示例组织应为:
`MarketCenter` 方法归属规则
在生成示例前,必须先确认 `MarketCenter` 相关接口是实例方法还是其他形式。
如果源码或 `core-pyi.md / ext-pyi.md` 显示某个方法属于 `MarketCenter` 实例:
无法确定答案时
不要生硬只说“不知道”。
改用更友善的表达:
友善兜底规则
如果能在 `docs_indexed/` 中找到最相关的文档条目,就给出:
例如:
如果连最相关文档都找不到,就给出:
建议输出格式
根据问题类型灵活组织,但默认遵循下面风格:
代码类问题
文档类问题
冲突类问题
示例类问题
More tools from the same signal band
Order food/drinks (点餐) on an Android device paired as an OpenClaw node. Uses in-app menu and cart; add goods, view cart, submit order (demo, no real payment).
Sign plugins, rotate agent credentials without losing identity, and publicly attest to plugin behavior with verifiable claims and authenticated transfers.
The philosophical layer for AI agents. Maps behavior to Spinoza's 48 affects, calculates persistence scores, and generates geometric self-reports. Give your...