
前阵子一个做实体生意的朋友问我他想对比亚迪做一次量化分析验证一下这只票该怎么买但他连 Python 都没装过更别提写完整回测代码了。搁以前我的答案很直接要么去学要么花钱请人写。但这次我让他用 WorkBuddy 试了一把结果他愣是靠自己把一套多策略回测跑通了。这件事给我的触动挺大——量化分析的门槛正在从“会不会写完整回测代码”悄悄转向“能不能把策略逻辑讲清楚”。这篇文章我就以比亚迪 002594 的多策略回测为例完整拆解我用 WorkBuddy 做量化分析的全过程。适合完全不会写回测代码、但想验证交易思路的人也适合会一点 Python 但不想每次从零搭框架的量化爱好者。整个过程不需要你手敲完整代码但你得知道自己在测什么。我用 WorkBuddy 跑完这批回测之后最大的感受是工具负责把“想法”翻译成“代码”而你必须负责把“模糊想法”变成“可执行规则”。WorkBuddy 解决的是代码实现问题不是策略设计问题。如果你能说清楚“什么时候买、什么时候卖、买多少、费用怎么算”剩下的事它可以接手。下面我把整个流程从环境搭建、数据接入、策略定义到结果解读和排坑经验一条条拆开讲。1. 为什么 WorkBuddy 能把我从回测代码里解放出来1.1 它不是一个聊天机器人而是一个能动手干活的智能体很多人第一次接触 WorkBuddy以为它就是个带知识库的问答工具问一句答一句。实际上我更愿意把它理解成一个“智能体工作台”它能把一个大任务拆成多个小步骤然后调用数据接口、生成代码、在沙箱里执行、把结果整理成表格或文本返回给你。也就是说它不是一个只会说话的助手而是一个能动手干活的“数字员工”。拿回测这个场景来说WorkBuddy 要跑通一次完整的多策略回测至少需要完成这些事拉取行情数据、检查数据质量、根据策略描述生成回测代码、设置交易成本模型、执行回测、计算绩效指标、输出对比结果。这在过去是一条完整的工程链路现在通过自然语言指令就可以串起来。当然这不是说它不需要配置而是说配置的复杂度从“写代码”降到了“做选择”。我用的 WorkBuddy 支持自定义指令、Skill 扩展、本地部署也支持通过连接器接入外部数据源。这些能力组合在一起才让“不懂代码的人做回测”变成了可能。如果你手里的版本功能入口名称不一样不用纠结核心逻辑是通的先给它一个跑回测的工作区再把数据和策略规则告诉它剩下的交给它执行。1.2 不懂代码的人缺的是框架不是策略我观察到一个很有意思的现象很多人觉得自己“不会写完整回测代码”就等于“做不了量化分析”但真让他们讲讲想测什么策略反而说得头头是道。比如“跌到 30 日均线以下就止损”“突破 20 日高点就买入”“涨太多了就分批卖”这些其实都是策略雏形。你缺的从来不是交易想法而是把想法变成回测工程的那套框架。一套完整的回测代码框架通常包含数据获取、复权处理、交易成本建模、信号生成、持仓更新、绩效统计、可视化输出这几大块。对新手来说最劝退的是前面那些“脏活累活”数据要清洗、复权要一致、日期要对齐、手续费和滑点都不能漏。这些问题和“策略有没有道理”没有关系纯粹是工程门槛。WorkBuddy 的价值在于它把框架封装成了可复用的 Skill。你可以不关心 DataFrame 怎么拼接、循环怎么写只需要告诉它“策略规则是什么、测哪只票、用多久的数据”。它会在底层调用那个回测 Skill把框架搭好再把你描述的策略填进去。这就好比开手动挡车和开自动挡车的区别你还是要会看路、打方向盘但不用再纠结什么时候踩离合换挡。1.3 为什么拿比亚迪当试验田我选择比亚迪 002594 做例子不是因为我看好或看空这只票而是因为它的历史行情非常适合检验策略。2020 到 2024 这五年比亚迪经历了明显的上升趋势期、高位震荡期和深度回撤期。这种“行情风格切换明显”的标的最能看出一个策略是吃趋势、吃震荡还是吃波动率的饭。如果只选一只匀速上涨的票做回测任何多头策略都会显得很厉害那没有参考价值。另外A 股数据源对这只热门票的覆盖度很高历史日线、前复权数据都容易获取复现起来也方便。需要先说明的是我在下文里给出的所有回测数字都是我在本地用 WorkBuddy 跑出来的示例结果用来演示方法不代表真实收益也不构成任何投资建议。历史回测最大的意义是帮你理解策略的脾气而不是给你一张未来的成绩单。2. 搭一个能跑回测的 WorkBuddy 环境数据、模型与 Skill 三层2.1 我用的组件配置在正式开始之前得先让 WorkBuddy“手里有粮”。我用下来一套能跑通回测的最小环境由这几块组成组件作用我的建议WorkBuddy 客户端提供对话和任务执行界面网页版和桌面端都行本地部署更可控大模型推理理解指令、生成代码、分析结果云端模型省事敏感数据用本地模型数据连接器获取行情数据AkShare、Tushare、Baostock 三选一回测 Skill封装回测框架和绩效计算内置 Skill 没有的话用一次对话也能生成工作区目录存放数据和脚本单独建一个文件夹方便 WorkBuddy 读写我不建议一上来就追求复杂配置。最简路径是打开 WorkBuddy建一个工作区数据源选 AkShare回测 Skill 选内置的默认版本模型用默认的云端推理直接开始跑。等跑通一个简单策略之后再根据需求换数据源、改参数、调模型。这里有个容易被忽略的点WorkBuddy 有没有“执行代码”的能力决定了它能不能真正跑回测。如果只是一个纯文本对话模型它能给你一段代码但没法替你运行。我用的版本是带代码沙箱的所以它能直接执行脚本并返回结果。如果你的 WorkBuddy 只能生成代码不能执行那就需要把代码复制到本地环境跑流程会多一步。2.2 数据接入三种方式按需选回测最怕数据出错数据接入环节一定要让 WorkBuddy 把“数据从哪来、是否复权、格式如何”讲清楚。我测试了三种方式分别适用不同情况。第一种是让 WorkBuddy 通过连接器直接拉取数据。比如我会直接说“用 AkShare 拉取比亚迪 002594 的日线数据前复权时间范围 2020-01-01 到 2024-12-31保存到工作区。”它会自动调用数据接口生成一个 CSV 文件。这种方式最省事适合大多数场景。第二种是让 WorkBuddy 写一段数据获取脚本再由我手动或半自动执行。适合你不想让 WorkBuddy 直接联网的情况。实际上如果你用的是本地部署模式且没有配置数据连接器让 WorkBuddy 生成一段 Python 脚本你确认后再运行也是一种可靠的方式。第三种是手动上传 CSV。如果你手里已经有了一份现成的行情数据或者你希望严格控制数据来源就直接把 CSV 拖进工作区。数据至少需要六列date、open、high、low、close、volume日期格式统一按升序排列。CSV 上传后第一步不是直接回测而是让 WorkBuddy 做一次数据质量检查。我常用的指令是“检查这个 CSV 有没有缺失日期、重复日期、跳空异常、成交量异常并给出统计摘要。”这一步很关键能帮你挡掉后续大量莫名其妙的回测结果。2.3 第一次回测前必须先确认的四个参数在 WorkBuddy 里跑回测它通常会问你四个关键参数因为这几个参数直接决定结果长什么样。我通常这样设置参数我的设置为什么这么设初始资金100 万足够大避免单笔交易受一手数量限制影响佣金费率万分之三接近主流券商平均水平滑点0.01 元模拟实际成交价与信号价之间的偏差回测区间2020-01-01 到 2024-12-31覆盖牛熊和震荡能看出策略在不同行情下的表现这里面滑点和佣金是最容易被新手忽略的。如果你完全不设置WorkBuddy 可能会默认“零成本成交”结果就是策略收益虚高。可以简单理解成手续费和滑点越接近真实回测结果越老实但也越难看。我不建议为了让曲线漂亮而故意把成本设成零因为那是在骗自己。3. 比亚迪多策略回测跑通全流程从自然语言到绩效曲线3.1 把策略逻辑翻译成自然语言指令WorkBuddy 需要的不是“帮我看看比亚迪能不能买”这种模糊需求而是“可执行规则”。规则要足够具体什么时候产生信号、用什么价格成交、全仓还是半仓、什么时候退出。我第一次带朋友跑的时候给他的指令模板是这样的“请对 002594 做多策略回测数据用 AkShare 前复权日线区间 2020-01-01 到 2024-12-31初始资金 100 万佣金万三滑点 0.01 元。策略一双均线趋势短期均线 10 日长期均线 30 日短线上穿长线全仓买入下穿清仓卖出。策略二14 日 RSI 超买超卖RSI 低于 30 买入高于 70 卖出全仓进出。策略三20 日布林带突破收盘价突破上轨做多跌破中轨离场。每个策略独立回测最后输出总收益率、年化收益率、最大回撤、夏普比率、胜率、交易次数并和同期买入持有基准对比。”这条指令里的关键信息包括标的代码、数据源、时间范围、费用模型、每个策略的入场和出场条件、期望输出的指标列表。WorkBuddy 收到之后会把任务拆解成多个子任务分别执行。如果它觉得哪里规则不明确比如“RSI 低于 30 就立刻以收盘价成交吗”它会反过来问你这是好事说明它在做有逻辑的执行不是硬猜。3.2 WorkBuddy 是怎么把指令变成回测代码的从自然语言到回测代码中间发生了什么WorkBuddy 内部大概做了这几步拆解任务、拉取数据、生成回测脚本、在沙箱里执行、汇总结果。为了让你对“代码长什么样”有个概念我挑一段它生成的双均线核心逻辑给你看import pandas as pd # df 为前复权日线数据 df[fast_ma] df[close].rolling(10).mean() df[slow_ma] df[close].rolling(30).mean() # 信号短期均线在上方时持有 df[signal] (df[fast_ma] df[slow_ma]).astype(int) # 关键信号 shift(1)次日开盘生效避免未来函数 df[position] df[signal].shift(1) # 策略收益 持仓状态 * 当日收益率 df[strategy_return] df[position] * df[close].pct_change() # 计算组合净值 df[equity] (1 df[strategy_return]).cumprod()这段代码最值得注意的就是那个shift(1)。它确保了当天收盘算出的均线信号不会用当天的价格成交而是从第二天开始生效。这是回测里最容易出错也最影响结果真实性的细节。你不会写代码完全没关系但如果你在结果解读里发现某个策略收益异常高要想到可能犯了“未来函数”的错这一点我在后面专门讲坑的时候会展开。3.3 结果怎么读五项指标一个都不能少WorkBuddy 执行完回测后会返回一张绩效表。不要只看收益率那是全场最会骗人的指标。我习惯先扫一眼五个数总收益率、年化收益率、最大回撤、夏普比率、胜率。年化用来衡量赚钱速度最大回撤用来衡量你扛不扛得住夏普比率用来衡量收益和波动的性价比胜率用来判断策略的“手感”。下面是我用默认参数跑出来的示例结果对比买入持有指标双均线 10/30买入持有总收益率142.6%108.3%年化收益率19.4%16.1%最大回撤-28.7%-45.6%夏普比率0.910.62胜率38.5%100%只有一次持仓交易次数271注意双均线的胜率只有 38.5%明显低于五成但总收益比买入持有高最大回撤也更小。这说明它是一个典型的趋势策略大部分交易是小亏或小赚真正赚钱靠的是抓住 2020 到 2021 年那种大级别上涨行情。只看胜率很高不代表策略好只看收益很高也不代表策略稳。这五个指标放在一起看才能拼出策略的真实性格。4. 三个策略的实际表现拆解趋势、动量与波动率突破4.1 策略 A双均线趋势策略吃大波段也会挨震荡的打双均线策略的逻辑很简单短期均线上穿长期均线说明短期趋势转强买入下穿说明趋势转弱卖出。这个策略在单边上涨行情里非常舒服2020 到 2021 年比亚迪那种持续拉升的走势双均线能从头吃到尾。但在 2022 到 2024 年反复震荡的行情里均线会频繁金叉死叉来回挨打。参数不同效果差异也很大。我把 10/30 和 20/60 两组都跑了一遍指标双均线 10/30双均线 20/60年化收益率19.4%17.2%最大回撤-28.7%-22.4%夏普比率0.910.85交易次数271410/30 更敏感交易次数多收益略高但回撤也更大20/60 更钝交易次数少回撤控制得更好但在行情快速反转时会显得反应迟钝。没有哪组绝对更好取决于你能接受多大的回撤。这个对比也说明了一点多策略回测的意义不是非要分个输赢而是理解每个参数组合在“收益”和“痛苦”之间的取舍。4.2 策略 BRSI 动量回调策略不加过滤就是送人头策略 B 的原始逻辑是“RSI 低于 30 买入高于 70 卖出”。听起来像低买高卖实际回测结果很打脸。因为比亚迪在 2023 到 2024 年的下跌趋势里RSI 可以长期处于低位你每次低于 30 买入都可能买到半山腰。这是典型的“接飞刀”问题。我做了个改进加入 20 日均线过滤只允许在收盘价站上 20 日均线时执行 RSI 超卖买入。这等于加了一道趋势确认的闸门结果是指标原始 RSIRSI 20日均线过滤年化收益率8.6%12.9%最大回撤-41.3%-24.7%夏普比率0.420.74交易次数4123加过滤之后交易次数几乎少了一半收益反而更高回撤小了一大截。这个案例特别适合让 WorkBuddy 帮你做“对比实验”同一个策略加不加某个过滤器结果差多少。它能快速给你跑出来远比你自己凭感觉猜测靠谱。4.3 策略 C布林带突破策略追的是爆发力策略 C 用 20 日布林带2 倍标准差。收盘价突破上轨时进场跌破中轨时离场。这个策略的本质是捕捉价格的突发性突破适合流动性好、容易出现趋势行情的标的。比亚迪 2021 年和 2024 年都出现过放量大涨的阶段布林带突破能捕捉到一部分。但它也有明显短板横盘震荡时价格经常虚破上轨然后立刻回落连续小亏会让人心态崩掉。回测结果指标布林带突破 20/2年化收益率15.8%最大回撤-31.2%夏普比率0.68胜率32.1%交易次数18胜率只有 32%但总收益依然为正说明突破策略一旦抓到大行情单笔利润能覆盖很多次小亏损。这个策略比较适合搭配其他策略使用单独满仓它对心脏不太友好。4.4 三个策略怎么组合WorkBuddy 能做组合回测三个策略各有脾气双均线吃趋势、RSI 吃反弹、布林带吃突破。它们的信号来源不同相关性不高组合在一起可以平滑净值曲线。我做了一个最简单的等权组合测试每个策略分配三分之一资金独立运行最后把三条净值曲线按比例合成一条。方案年化收益率最大回撤夏普比率双均线 10/3019.4%-28.7%0.91RSI 过滤12.9%-24.7%0.74布林带突破15.8%-31.2%0.68等权组合16.7%-18.5%1.02组合的年化不是最高的但最大回撤显著下降夏普比率升到 1.02。这个结果很有代表性多策略组合的核心价值不是提高收益而是降低回撤、提高收益的稳定性。对不会写代码的人来说用 WorkBuddy 做这种组合测试成本很低只需要在指令里描述清楚“资金怎么分配、是否每日调仓”就行。5. 回测结果里那些看不见的坑我的踩坑排查记录5.1 坑一前复权数据混用导致价格断裂我第一次跑双均线策略时净值曲线在 2022 年 7 月突然出现一次毫无来由的跳变。一开始我以为是策略信号触发但仔细看那个时间点附近既没有金叉也没有死叉收益却硬生生被拉高了一截。排查链路是这样的先让 WorkBuddy 打印净值曲线的突变点日期再对比当日成交量发现价格跳低但成交量并没有明显放大随后检查除权除息日确认是比亚迪当年的分红除息日。问题出在数据上数据源里有一部分行情是未复权价格有一部分是前复权价格两者拼接后除息日当天价格出现向下跳空被回测引擎误认为是真实下跌。修复方法很简单统一使用前复权数据并在数据检查阶段就确认“整个区间是否同一复权口径”。现在我做任何回测之前都会让 WorkBuddy 输出一段数据摘要重点看有没有莫名其妙的跳空缺口。如果你发现回测收益在某个财务事件日附近出现异动第一反应应该是查复权而不是怀疑策略灵光乍现。5.2 坑二未来函数让策略“开天眼”第二个坑更隐蔽也更要命。RSI 策略第一次跑出来胜率 78%最大回撤不到 10%我当时差点觉得策略可以上实盘。还好留了个心眼让 WorkBuddy 把每次买卖点打印出来核对。结果发现信号生成用的是当日收盘价计算出的 RSI成交也记在当日收盘价上。这在实盘里是不可能的收盘价出来的时候交易已经结束了你根本来不及按同一个价格成交。这就叫未来函数等于策略偷看了当天的答案再去答题。修复方式就是前面代码里出现的那个shift(1)信号统一往后移一天第二天开盘再执行。修改之后RSI 策略的胜率立刻从 78% 掉到 55% 左右最大回撤从 8% 涨到 20% 以上离谱的收益曲线瞬间变得现实主义。这个坑几乎是新手回测的必经之路我在帮朋友跑的时候特别强调了这一点如果策略只负责“当天收盘后给出信号”那成交价必须选次日开盘价不能选当日收盘价。让 WorkBuddy 跑完回测后主动检查一下成交价和信号价到底是不是同一天能省掉后面无数自嗨。5.3 坑三网格搜索出来的完美曲线换个时间段就露馅第三个坑是全自动参数优化。有一阵我图省事让 WorkBuddy 在双均线参数空间里跑网格搜索短均线从 5 到 50长均线从 20 到 100最后筛选出一组“历史最优参数”年化 45%回撤 12%曲线完美得像假的。我差点就准备实盘了。为了验证稳健性我把数据切成两段2020 到 2022 作为训练段2023 到 2024 作为验证段。训练段最优的参数组在验证段年化只跑出 6%甚至不如买入持有。我又把参数改成最优参数附近的一组绩效波动极大。这说明严重过拟合那组参数是在精确记住历史噪声而不是在总结规律。之后的处理方式我总结成三条第一参数搜索范围宁小勿大第二单个策略的参数最好不要超过两三个第三必须做分段验证或 walk-forward 检验。WorkBuddy 可以帮你执行这些操作但决定“要不要克制搜索欲望”的是你。工具不会拦着你过拟合它只会高效地帮你把过拟合做到极致这个责任得自己担。6. 把 WorkBuddy 变成自己的量化助手Skill 沉淀与进阶用法6.1 把回测流程固化成 Skill下次一句话跑通把比亚迪这个案例完整跑过一遍之后我发现最费时间的不是回测本身而是每次都要重复描述一遍参数、数据源、费用模型。WorkBuddy 支持把一套流程固化成 Skill这个设计对不会写代码的人特别友好。我的做法是跑通一次之后对 WorkBuddy 说“把这次回测的完整流程保存成一个 Skill以后只要提供股票代码、时间区间、策略描述就自动按同样的参数和流程执行并输出绩效表和净值数据。”保存完 Skill再想测另一只票就很简单了。比如朋友问“看看宁德时代怎么样”我只需要说“用回测 Skill 跑一下 300750时间 2021 到 2024策略用之前的三套默认参数。”剩下的一切它都会按既定流程执行。这等于把一次性的项目工程变成了可复用的方法论资产。6.2 进阶玩法让 WorkBuddy 做参数敏感性分析单跑一组参数只能看到策略的一个侧面我更推荐做敏感性分析。所谓敏感性分析就是固定其他条件让某个参数在一定范围里变化观察绩效指标怎么波动。我用 WorkBuddy 跑过一次双均线敏感性分析短期均线从 5 到 30步长 5长期均线从 30 到 80步长 10。它最后输出一张表格横轴是短期均线参数纵轴是长期均线参数每个格子填的是对应策略的夏普比率。这种表的价值在于你能快速看出“哪些参数区域是稳定的高绩效区哪些区域换个参数就崩盘”。如果高绩效只集中在一个很窄的点上说明策略很脆如果一整片区域都表现不错说明策略有稳健性。这个认知比“找到一组最牛参数”重要得多。WorkBuddy 还可以做随机扰动测试即在最优参数附近加入小幅随机波动跑多次看绩效分布这也是对抗过拟合的好办法。6.3 本地部署与数据安全我踩过的一个现实问题最后说说数据安全。回测涉及价格数据、策略想法对一些人来说属于敏感信息。如果你不希望自己的策略和行情数据传到云端可以考虑用本地部署版 WorkBuddy让数据和脚本都留在本机。我尝试过本地部署后再接一个开源模型跑简单的回测任务比如双均线、RSI 这种逻辑清晰的策略完全够用。复杂的策略理解、长上下文分析能力会弱一些但日常个人量化足够。如果你用本地部署几个建议供参考把行情数据放在独立工作区不要散落在系统目录里模型推理服务建议单独起一个端口方便 WorkBuddy 调用跑完回测后把结果文件统一导出到指定文件夹方便从本机里找出来做二次分析。我个人的体会是WorkBuddy 这类工具真正的价值不是替代分析师而是把“从想法到验证”的距离压缩到了几分钟。你不必成为一个熟练的程序员但你必须学会把策略说清楚并保持对回测结果的警惕。参数可以交给工具去找逻辑的合理性必须自己把好关。