
量化策略开发有个高门槛:你得懂交易逻辑,还得会写代码。Claude 把这个门槛降低了一半——你只需要懂交易逻辑,代码的部分可以让它来。
这篇文章记录我用 Claude 从零开始写一个完整量化信号系统的过程。
我的策略背景
我跑的是突破类趋势策略,核心逻辑是唐奇安通道(Donchian Channel):
- 当价格突破过去 N 根 K 线的最高价 → 买入
- 当价格跌破过去 M 根 K 线的最低价 → 卖出
听起来简单,但要做成能在 8 个品种、3 个时间周期上自动跑的系统,并且每半小时推送信号到 Telegram,需要不少工程量。
第一步:跟 Claude 描述策略逻辑
我的输入很简单:
“帮我写一个 Python 脚本,用 yfinance 拉 BTC 的 1 小时 K 线,实现唐奇安通道突破策略:价格突破过去 20 根最高价买入,跌破过去 10 根最低价卖出。每次信号变化时通过 openclaw 发 Telegram 消息。”
Claude 给出的初版代码覆盖了:
- yfinance 数据拉取
- 信号计算逻辑
- 状态持久化(避免重复推送)
- openclaw CLI 调用发送消息
这一步花了约 10 分钟。
第二步:迭代改进
初版策略的问题:在震荡行情里频繁触发虚假信号,来回买卖亏手续费。
我告诉 Claude:
“在震荡行情(ADX 低、ATR 收缩)时,跳过买入信号;只在趋势行情(ADX > 22,价格在 EMA200 上方)才执行。加入 ATR 追踪止损。”
Claude 加入了以下改进:
- ADX 状态判断:区分趋势市/震荡市
- ATR 追踪止损:持仓期间动态调整止损位
- 自适应参数:不同品种用不同的 ATR 倍数(加密货币 k=2.55,大宗商品 k=1.8)
整个迭代过程:我描述问题 → Claude 改代码 → 我回测验证 → 继续改。大约 3 轮迭代后策略稳定。
第三步:多品种 + 多时间周期
把策略从单品种扩展到多品种时,有一个工程挑战:同时拉 8 个品种的数据很慢,而且 yfinance 有频率限制。
解决方案是增量缓存,Claude 帮我设计了一个"探针"机制:
def probe_last_bar_ts(symbol, interval):
"""只拉最近几根 K 线,判断是否有新 bar"""
# 如果时间戳没变化,直接跳过,不重新计算信号
...
这样每次运行时,没有新数据的品种直接跳过,性能提升 5-10 倍。
最终收益表现
下图是 2024 年以来,唐奇突破策略 vs 混合版(加入 ATR/ADX 过滤)的回测对比:

混合版在震荡行情(BTC 2024 上半年)明显减少了交易频率,手续费损耗更低;趋势行情(BTC 2024 Q4 大涨)跟随效果接近。
BTC 4H 时间周期的信号标注效果:

我学到的几件事
1. 用自然语言描述"异常"让 Claude 修复
不要说"优化策略性能",要说"在 BTC 2024 年 3 月震荡区间里,策略在两周内触发了 12 次买卖,亏了约 3% 手续费,怎么减少这种情况"。
具体的问题描述比模糊的优化目标有效 10 倍。
2. 让 Claude 先解释再写代码
对于复杂逻辑(比如自适应状态机),先让 Claude 用文字解释实现思路,确认逻辑对了再让它写代码。节省很多 debug 时间。
3. 回测数据要真实
让 Claude 帮你模拟回测,结果看起来很美。但真正运行前,一定要用真实的历史数据(yfinance 足够用)跑一遍,对得上再上实盘。
工具链
- 数据:yfinance(免费,覆盖股票/期货/加密货币)
- 计算:pandas、numpy
- 推送:OpenClaw CLI(
openclaw message send) - 定时:Linux cron,每 30 分钟执行一次
- 托管:跑在局域网的 Linux 机器上,也可以跑在 VPS
策略代码或者回测方法有问题,欢迎来 Telegram 找我。
⚠️ 本文仅记录个人实践,不构成投资建议。量化策略过去表现不代表未来,实盘需做好风控。
📷 封面图 · Flux Schnell AI 生成 · panshi.io 品牌风格