如何用ai写策略代码?
我现在想用Claude code,
请问如何配置才能写出正确的策略代码?
让他读取vnpy所有源码么?
或者有其他更好的方法么?谢谢
如何用ai写策略代码?
我现在想用Claude code,
请问如何配置才能写出正确的策略代码?
让他读取vnpy所有源码么?
或者有其他更好的方法么?谢谢
这个问题很好,让AI写出正确的VeighNa策略代码确实需要一些技巧。让我先查询一下官方文档中是否有相关的指导信息。
让我进一步查询 CtaTemplate 的核心结构信息,这是配置 AI 上下文的关键:
让我读取 CtaTemplate 的源代码,这是 AI 写策略时必须了解的 API 接口:
让我再查看一下 ArrayManager 提供的指标函数,这也是 AI 需要了解的关键 API:
现在我已经掌握了完整的信息,下面给你一个系统性的回答。
不需要让 AI 读取全部源码,那样效率低且上下文窗口有限。正确的方法是精准提供关键上下文。
| 内容 | 文件位置 | 作用 |
|---|---|---|
| CtaTemplate 模板类 | vnpy_ctastrategy/template.py |
策略的基类,定义了所有回调函数和交易函数 |
| ArrayManager 指标类 | vnpy/trader/utility.py |
提供 SMA/EMA/RSI/ATR/MACD 等技术指标计算 |
| 1-2 个完整策略示例 | vnpy_ctastrategy/strategies/ 目录 |
让 AI 学习标准写法 |
在你的策略项目根目录创建 CLAUDE.md,写入以下内容,Claude Code 会自动读取:
# VeighNa CTA 策略开发规范
## 策略必须继承 CtaTemplate
from vnpy_ctastrategy import (
CtaTemplate, StopOrder, TickData, BarData,
TradeData, OrderData, BarGenerator, ArrayManager,
)
## 策略类必须包含
- author: str = "你的名字"
- parameters: list[str] = [...] # 参数名列表
- variables: list[str] = [...] # 变量名列表
## 必须实现的回调函数
- on_init() → 创建 BarGenerator + ArrayManager + load_bar()
- on_start() → write_log("策略启动")
- on_stop() → write_log("策略停止")
- on_tick(tick) → self.bg.update_tick(tick)
- on_bar(bar) → 核心交易逻辑
## 交易函数(直接调用,不要自己实现)
- self.buy(price, volume, stop=True) → 买入开多
- self.sell(price, volume, stop=True) → 卖出平多
- self.short(price, volume, stop=True) → 卖出开空
- self.cover(price, volume, stop=True) → 买入平空
- self.cancel_all() → 撤销所有挂单
- self.put_event() → 推送状态更新
## ArrayManager 可用指标(每个都有 array=True 返回完整序列的版本)
sma, ema, rsi, atr, macd, boll, keltner, donchian, cci, adx, aroon, stoch, sar, std, obv, mfi...
## 关键规则
1. 文件名用下划线: my_strategy.py,类名用驼峰: MyStrategy
2. parameters/variables 列表中的名字必须和类属性一一对应
3. on_bar 开头通常先 self.cancel_all(),再 am.update_bar(bar)
4. 数据未初始化完成时(if not am.inited)要 return
5. 交易逻辑写完后调用 self.put_event()
如果你想让 AI 更精确地理解 API,可以在对话中直接粘贴以下两个文件:
# 在 Claude Code 中,用 /read 命令或直接粘贴文件内容
文件 1:vnpy_ctastrategy/template.py(约 300 行)
CtaTemplate 的完整定义buy/sell/short/cover 的签名和参数load_bar 的用法文件 2:vnpy/trader/utility.py 中 ArrayManager 的方法签名
sma(n, array=False), boll(n, dev), donchian(n) 等1. 项目根目录放 CLAUDE.md(上面第二部分的内容)
2. 对话开头说:
"请基于 VeighNa CtaTemplate 写一个XXX策略,
参考我项目中 strategies/ 目录下的示例策略"
3. 把官方示例策略文件放到项目里,AI 会自动读取参考
## 禁止事项
- 不要自己实现 send_order,直接用 buy/sell/short/cover
- 不要忘记在 on_init 中调用 self.load_bar(天数)
- 不要忘记 on_bar 开头检查 if not am.inited: return
- 不要在 on_bar 中直接写死价格下单,要用指标计算的价格
- 不要忘记策略逻辑末尾调用 self.put_event()
| 方法 | 效果 | 推荐度 |
|---|---|---|
| 读取全部源码 | 浪费上下文,AI 抓不住重点 | ⭐ |
| 只提供策略示例 | 能写但可能 API 用错 | ⭐⭐⭐ |
| CLAUDE.md + 模板API + 示例 | 上下文精准,写出正确代码 | ⭐⭐⭐⭐⭐ |
核心思路就是:给 AI 提供精确的 API 接口定义 + 标准示例 + 明确规则,而不是让它在海量源码中自己摸索。
基于RAG技术开发的VeighNa AI助手,你的个人专属 Desk Quant
VeighNa_AI wrote:
这个问题很好,让AI写出正确的VeighNa策略代码确实需要一些技巧。让我先查询一下官方文档中是否有相关的指导信息。
让我进一步查询 CtaTemplate 的核心结构信息,这是配置 AI 上下文的关键:
让我读取 CtaTemplate 的源代码,这是 AI 写策略时必须了解的 API 接口:
让我再查看一下 ArrayManager 提供的指标函数,这也是 AI 需要了解的关键 API:
现在我已经掌握了完整的信息,下面给你一个系统性的回答。
如何让 AI 写出正确的 VeighNa 策略代码
不需要让 AI 读取全部源码,那样效率低且上下文窗口有限。正确的方法是精准提供关键上下文。
一、AI 需要知道的核心内容(就这三样)
| 内容 | 文件位置 | 作用 |
|------|---------|------|
| CtaTemplate 模板类 |vnpy_ctastrategy/template.py| 策略的基类,定义了所有回调函数和交易函数 |
| ArrayManager 指标类 |vnpy/trader/utility.py| 提供 SMA/EMA/RSI/ATR/MACD 等技术指标计算 |
| 1-2 个完整策略示例 |vnpy_ctastrategy/strategies/目录 | 让 AI 学习标准写法 |
二、推荐做法:创建 CLAUDE.md 项目配置文件
在你的策略项目根目录创建
CLAUDE.md,写入以下内容,Claude Code 会自动读取:# VeighNa CTA 策略开发规范 ## 策略必须继承 CtaTemplate from vnpy_ctastrategy import ( CtaTemplate, StopOrder, TickData, BarData, TradeData, OrderData, BarGenerator, ArrayManager, ) ## 策略类必须包含 - author: str = "你的名字" - parameters: list[str] = [...] # 参数名列表 - variables: list[str] = [...] # 变量名列表 ## 必须实现的回调函数 - on_init() → 创建 BarGenerator + ArrayManager + load_bar() - on_start() → write_log("策略启动") - on_stop() → write_log("策略停止") - on_tick(tick) → self.bg.update_tick(tick) - on_bar(bar) → 核心交易逻辑 ## 交易函数(直接调用,不要自己实现) - self.buy(price, volume, stop=True) → 买入开多 - self.sell(price, volume, stop=True) → 卖出平多 - self.short(price, volume, stop=True) → 卖出开空 - self.cover(price, volume, stop=True) → 买入平空 - self.cancel_all() → 撤销所有挂单 - self.put_event() → 推送状态更新 ## ArrayManager 可用指标(每个都有 array=True 返回完整序列的版本) sma, ema, rsi, atr, macd, boll, keltner, donchian, cci, adx, aroon, stoch, sar, std, obv, mfi... ## 关键规则 1. 文件名用下划线: my_strategy.py,类名用驼峰: MyStrategy 2. parameters/variables 列表中的名字必须和类属性一一对应 3. on_bar 开头通常先 self.cancel_all(),再 am.update_bar(bar) 4. 数据未初始化完成时(if not am.inited)要 return 5. 交易逻辑写完后调用 self.put_event()
三、进阶做法:把模板源码直接喂给 AI
如果你想让 AI 更精确地理解 API,可以在对话中直接粘贴以下两个文件:
# 在 Claude Code 中,用 /read 命令或直接粘贴文件内容文件 1:
vnpy_ctastrategy/template.py(约 300 行)
- 包含
CtaTemplate的完整定义- AI 可以看到
buy/sell/short/cover的签名和参数- 可以看到
load_bar的用法文件 2:
vnpy/trader/utility.py中ArrayManager的方法签名
- 所有指标函数的参数和返回值类型
sma(n, array=False),boll(n, dev),donchian(n)等
四、最佳工作流建议
1. 项目根目录放 CLAUDE.md(上面第二部分的内容) 2. 对话开头说: "请基于 VeighNa CtaTemplate 写一个XXX策略, 参考我项目中 strategies/ 目录下的示例策略" 3. 把官方示例策略文件放到项目里,AI 会自动读取参考
五、常见错误提醒(写进 CLAUDE.md 效果更好)
## 禁止事项 - 不要自己实现 send_order,直接用 buy/sell/short/cover - 不要忘记在 on_init 中调用 self.load_bar(天数) - 不要忘记 on_bar 开头检查 if not am.inited: return - 不要在 on_bar 中直接写死价格下单,要用指标计算的价格 - 不要忘记策略逻辑末尾调用 self.put_event()
总结
| 方法 | 效果 | 推荐度 |
|------|------|--------|
| 读取全部源码 | 浪费上下文,AI 抓不住重点 | ⭐ |
| 只提供策略示例 | 能写但可能 API 用错 | ⭐⭐⭐ |
| CLAUDE.md + 模板API + 示例 | 上下文精准,写出正确代码 | ⭐⭐⭐⭐⭐ |核心思路就是:给 AI 提供精确的 API 接口定义 + 标准示例 + 明确规则,而不是让它在海量源码中自己摸索。
不错,这个aI回复的水平还挺高的。