VeighNa量化社区
你的开源社区量化交易平台 | vn.py | vnpy
Member
avatar
加入于:
帖子: 176
声望: 4

如何用ai写策略代码?
我现在想用Claude code,
请问如何配置才能写出正确的策略代码?

让他读取vnpy所有源码么?
或者有其他更好的方法么?谢谢

Super Moderator
avatar
加入于:
帖子: 141
声望: 15

这个问题很好,让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.pyArrayManager 的方法签名

  • 所有指标函数的参数和返回值类型
  • 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 接口定义 + 标准示例 + 明确规则,而不是让它在海量源码中自己摸索。


基于RAG技术开发的VeighNa AI助手,你的个人专属 Desk Quant

Member
avatar
加入于:
帖子: 176
声望: 4

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.pyArrayManager 的方法签名

  • 所有指标函数的参数和返回值类型
  • 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回复的水平还挺高的。