
我用 Vibe Coding 开发了一个量化交易程序
是的,你没看错,我确实用 Vibe Coding 写了一个量化交易程序。相信看到标题点进来的,再看到这么一句后,不免会冒出一个想法:“是谁给你的勇气写量化交易程序!”
先澄清一下,这并不是一个“正经”的量化交易程序,而是为了参加公司 AI 编程 Hackathon 开发的一个简单量化交易程序。
在比赛报名截止的前一天,我被拉进了编程小组。起初参加比赛纯属一时兴起,更没想到那几天工作和家里的事情都很忙,甚至连比赛的说明会和练习赛都没参加。到比赛的前一天,我还没能为小组贡献一行代码,甚至连比赛的细节都不清楚。
可能是巧合,淘汰赛当天凌晨 5 点我就醒了。既然醒了,不如起床看看比赛的说明。看完说明后,我发现用 Vibe Coding 是个不错的选择。因为时间有限,Vibe Coding 可以让我更专注于问题本身,而不是实现细节。
最终,我花了 2 个多小时搞定了这个量化交易程序,成绩自认为还不错。虽然因为某些原因小组赛没有晋级,但整个过程让我受益匪浅。
在这里,我想分享一下这个量化交易程序的实现思路和方法。
Vibe Coding
让我们先了解一下什么是 Vibe Coding。相信看完介绍后,你会明白是什么给了我写量化交易程序的勇气。
Vibe Coding 是什么?
Vibe Coding,有些中文翻译为“氛围编程”,听起来可能有些抽象。
这个概念最早由计算机科学家 Andrej Karpathy(OpenAI 联合创始人)于 2025 年 2 月提出。Vibe Coding 的核心思想是通过自然语言描述来生成代码,而不是通过传统的编程语言。它是一种基于自然语言的编程方法,允许用户通过自然语言描述,借助大模型工具生成代码。其目标是让编程变得更加简单和直观,尤其是对没有编程经验的人。
说到这里,我们不妨先看看传统编程的流程。
传统编程
传统编程通常遵循一个结构化的过程,包含以下几个关键步骤:
- 需求分析:程序员需要理解问题和用户需求,包括功能、输入输出、边界条件和限制。这一阶段通常会产生需求文档或用户故事。
- 程序设计:设计程序的结构和架构,选择编程语言、框架和工具,设计数据结构和算法,规划模块间的交互。这一阶段通常会产生设计文档、流程图或 UML 图。
- 编码:程序员根据设计开始实际编写代码,遵循语法规则,实现功能,并确保代码的可读性和可维护性。
- 测试:通过单元测试、集成测试、系统测试等多个层次,发现并修复 bug,验证程序的正确性和性能。
- 发布:经过充分测试的程序可以发布给用户使用,包括准备安装包、编写用户文档、部署到生产环境等。
这个过程往往是迭代的,随着需求变化或发现新问题,程序员可能需要回到前面的步骤重新开始。
相比之下,Vibe Coding 简化了这个过程,让编程更加直观和高效。
Vibe Coding 的优势
Vibe Coding 的优势在于:
- 简化编程过程:通过自然语言描述需求,让大模型工具自动分析并生成文档、设计和代码。
- 降低学习门槛:使没有编程经验的人也能参与编程,只需用自然语言描述需求。
- 增强可读性:生成的代码基于自然语言描述,更易于理解代码的意图和逻辑。
- 支持多种编程语言:可以生成多种编程语言的代码,用户可根据需要选择合适的语言。
- 易于调试和维护:生成的代码更易于调试和维护,工具可以自动修复 bug,甚至优化代码。
还有一个好处是,你可以不断调整优化需求,工具会自动分析并修改代码。而面对一个真实的程序员,可能会被骂得狗血淋头。
脑补:当业务需求不断变更时,程序员的真实反应…
Vibe Coding 工具
Vibe Coding 的工具有很多,最常用的包括:
- Cursor
- Windsurf
- Claude
- Whisper
- GitHub Copilot
- Trae
- CodeBuddy
这些工具都可以帮助我们实现 Vibe Coding 的理念,让编程变得更加简单和高效。不过我没有全部使用过,无法给出客观的建议。如果你有好的工具推荐,欢迎在评论区留言。
介绍完工具后,让我们来看看我是如何用 Vibe Coding 写量化交易程序的。
量化交易程序实战开发
背景
使用提供的资源开发一个量化交易程序,不限语言。
比赛一共进行三轮交易,每轮交易初始持仓为 100 股恒生指数。
每轮交易 12 分钟,分为 3 个阶段:
- 第一阶段:前 1 分钟,不能交易。
- 第二阶段:第 2 分钟到第 11 分钟,允许交易。
- 第三阶段:最后 1 分钟,不能交易。
最终的收益为每轮卖出后的现金价值综合。
活动主办方提供了两个接口:
- 指数信息:WebSocket 接口,提供实时的指数信息,包括当前价格、涨跌幅等。每 2 秒推送一次。
- 交易接口:HTTP 接口,提供交易功能,每次交易需要提供要卖出的数量即可。
此外,活动主办方还提供了最近一个月的指数信息,以及一套基础代码:包含了 WebSocket 和 HTTP 访问的基本实现。参赛者可以在此基础上进行开发。
工具选择
我选择的是 VSCode + Cline 扩展 + GitHub Copilot API 来进行 Vibe Coding,模型使用的是 GPT-4o。并不是因为我喜欢这套组合,而是在环境允许的情况下,这是我所能选择的最佳的组合了。
这里值得一提的是 Cline 扩展了有 Plan(规划)和 Act(执行)两种模式:
- Plan:进行对话式交流,专注于问题分析和解决方案设计,而不立即生成代码。在这个模式下,它会帮你梳理目标和需求、分解复杂问题、制定实施策略,并分析潜在挑战和解决方案。这个模式特别适合项目初期的头脑风暴和结构化思考,让你在编写任何代码前先厘清思路。
- Act:在这个模式下,它会根据你的指令生成代码。你可以直接给出需求,它会自动分析并生成代码。这个模式适合于具体的编码任务,尤其是当你已经有了清晰的思路和设计时。
在复杂的场景下,我会先使用 Plan 模式进行需求分析和设计,然后再切换到 Act 模式进行编码。这样可以确保生成的代码符合我的需求和设计。
开发
在开发过程中,我遵循了 Vibe Coding 的理念,尽量用自然语言描述需求,让大模型工具自动分析并生成代码。
1. 初始化
首先按照惯例要给大模型“洗脑”:你是一个量化交易程序员,正在开发一个量化交易程序。具备优秀的编程能力和量化交易知识。你需要根据需求分析、设计、编码、测试等步骤来完成这个程序。
2. 建立知识库
由于时间有限,并且程序的复杂度不高,在本地基于文本文件建立一个知识库。
我先让大模型对可用资源进行分析,分析的结果都要记录到文本文件中。第一步就是分析接口,将接口的说明,以及所有的字段介绍都交给大模型,让它分析、理解并记录到文本文件中。
分析完接口之后,我让大模型分析了最近一个月的指数信息,分析的结果也记录到文本文件中。同时,我还让大模型基于分析的内容给出这些数据在量化程序中的用途。
这一步非常重要,它会影响后续的设计和编码。因为再高深的算法也需要数据来支撑,如果数据不足或者理解有误,算法再高深也无济于事。
3. 检查已有代码
有了基础代码可以节省不少时间,第一步是检查已有代码的可用性。我直接让大模型进行代码编译,并检查编译结果。
可用性除了要保证编译通过,还要保证代码与数据的兼容性。通过对比知识库中的接口说明和数据分析结果,检查已有代码是否符合要求。若不符合要求,让大模型进行修改。修改之后再次编译,并检查编译结果。如果编译失败,它会持续修改代码,直到编译通过为止。
这一步是非常重要的,因为它可以节省大量的时间和精力。通过自动化的方式检查代码的可用性,可以避免手动检查的繁琐和错误。
这一步,大模型对代码进行了重要的修改,在原有的代码中只使用了指数信息中的价格,而忽略了最高指数、最低指数、总成交额等重要信息(对于欠缺量化知识的我来说,也是很难发现的)。如果没有这一步,后面的算法设计和实现可能会出现问题。
4. 需求分析
有了基础的知识库之后,我开始描述我的需求:做一个量化交易程序。不可否认的是,我的需求描述是非常模糊的。但是没关系,这一步是在 Plan(规划)模式下进行的。从一个大的范围开始避免遗漏,然后再逐步细化需求,缩小范围。
因为我并不知道量化交易程序应该具备哪些功能,或者说我并不清楚量化交易程序的设计和实现。我需要大模型来提供建议:一个优秀的量化交易程序,需要具备哪些能力。
大模型给出的建议是(截取部分内容):
- 明确的逻辑和可量化信号,如均线、多因子、多周期等。
- 风险控制机制:止损和止盈策略、仓位管理、风险敞口控制。
- 回测、评估和优化:回测历史数据、评估策略表现、优化参数。
- 可扩展化和模块化
- 自动化与实盘适配
这一步把起点拉高了不少,接下来我就可以在这个基础上进行需求分析了。我将比赛的规则和要求告诉大模型,并让它分析出一个量化交易程序的设计和实现方案。
最终结合大模型给出的建议,我将程序的实现目标聚焦在:量化因子逻辑开发,以及回测评估优化。
接下来是让大模型根据比赛场景从所有可选的量化因子中筛选出适合的量化因子,并按照因子的影响力进行排序。这个过程是非常重要的,因为它可以帮助我们确定哪些因子是最重要的,哪些因子是次要的。
此时,大模型也建议了实现方式。
接下来,我们要做的就是切换到 Act 模式,直接让大模型生成代码。大模型会根据需求分析的结果,自动生成代码,并进行编译和运行。这个过程是自动化的,我们只需要关注结果即可,它会不断地修改代码,直到程序运行成功为止。
在这个过程中,我会不时地给大模型提出代码层面问题,比如数据队列的长度、某些变量未使用的原因等等。
最终的卖出策略覆盖了动量、波动率、极值等因子等,这些策略的都支持阈值可调。
5. 优化测试
完成了策略的开发之后,需要开始编写回测引擎。记得切换到 Plan 模式,给大模型描述回测引擎的需求:设计参数网格、记录每组参数的回测结果、比较收益率、最大回撤等指标。
完成设计之后,切换到 Act 模式,让大模型生成代码。这个过程是仍然自动化的,我们只需要关注结果即可,它会不断地修改代码,直到程序运行成功为止。
程序运行成功之后,我们可以开始进行回测了。我们可以使用回测引擎和历史指标数据,进行参数网格搜索,找到最优的参数组合。
总结
通过这次开发量化交易程序的经历,我再次体会到了 Vibe Coding 的强大之处。整个开发过程中,我只需用自然语言描述需求和想法,大模型便能自动分析并生成高质量代码。从需求分析到参数优化,整个流程异常流畅,效率远超传统编程方式。
Vibe Coding 的优势在这个项目中得到了充分展现:
- 我能专注于需求本身,而非代码实现细节
- 即使对量化交易知识有限,也能快速构建功能完善的程序
- 代码调整迭代变得简单高效,只需描述修改需求
- 大模型提供的建议和分析填补了我知识上的空缺
然而,值得注意的是,Vibe Coding 并不意味着思考的缺失。相反,它要求我们更清晰地思考问题本质并准确表达需求。在这种新范式下,编程技能正在从 " 如何实现 " 转变为 " 如何定义问题 " 和 " 如何评估解决方案 “。
无论技术如何发展,理解问题、思考逻辑和评估结果的能力始终是不可或缺的。Vibe Coding 让编程变得更加平民化和高效,但不会替代人类的创造力和判断力。