用 WorkBuddy 开发量化交易策略:我如何用 AI 把「超市战法」变成可执行的代码
作者:量化小学生 | 工具:WorkBuddy + 国金证券 QMT
前言:为什么我想用 AI 写量化策略
作为一个有点编程基础但不算熟练的量化爱好者,我一直在研究各种交易策略。某天听说了「超市战法」——一种不做止损、靠分批止盈和补仓取胜的股票交易方法。
核心逻辑听起来简单:
**不止损**:亏了不卖,靠补仓摊薄成本
**分批止盈**:涨10%卖一半,涨20%全清
**金字塔补仓**:跌30%补0.5倍,跌50%补1倍
**60日冷却**:卖完要等两个月才能重新买
但当我试图把这个策略写成代码时,问题来了:
1. 选股条件怎么量化?(股价3-25元、同行业持仓≤3只、市值≥10亿……)
2. 资金管理怎么做?(50万本金怎么分配到100只股票)
3. 止盈补仓的触发逻辑怎么写?
这时候我想到了 WorkBuddy。
一、我和 WorkBuddy 的「磨合期」
说实话,一开始我对这类 AI 工具有点偏见——总觉得它们写出来的代码「看起来对但跑起来废」。
第一次用 WorkBuddy,我直接丢给它一段描述:
"帮我写一个股票量化策略,不止损,分批止盈,金字塔补仓"
WorkBuddy 确实给我生成了代码,但那个版本太粗糙了——没有选股过滤,没有资金管理,止盈逻辑也有漏洞。
关键转折点:** 我学会了「渐进式对话」——不是一次说清所有需求,而是把策略拆成几个模块,一个一个调。
二、实战:把「超市战法」拆成4个模块来开发
模块1:选股条件过滤(最基础,也最重要)
一开始我写的需求太模糊,WorkBuddy 给我的选股逻辑漏洞百出。
**我是这样一步步优化的:**
**第一轮(太粗糙):**
帮我写选股条件
WorkBuddy 返回的代码只考虑了价格,没有考虑同行业分散和市值。
第二轮(加约束):**
补充条件:同行业持仓不超过3只,市值≥10亿元,日成交额≥500万,股票池限定为中证1000成分股
这次逻辑好多了,但我发现成交额的数据获取方式不对。
**第三轮(精确到字段):**
需要用 tushare 或 baostock 获取数据,具体字段是:trade_date(日期)、ts_code(股票代码)、close(收盘价)、total_mv(总市值,单位万元)、amount(成交额)
**最终成果:**
```python
import baostock as bs
import pandas as p
def filter_stocks(date):
"""
超市战法选股过滤
返回满足所有条件的股票列表
"""
# 登录 baostock
lg = bs.login()
# 获取中证1000成分股
rs = bs.query_zz500_stocks(date=date)
zz500_list = []
while (rs.error_code == '0') and rs.next():
zz500_list.append(rs.get_row_data())
zz500_df = pd.DataFrame(zz500_list, columns=['code', 'code_name', 'date', 'is_hs'])
获取当日行情数据
rs = bs.query_daily_data(code=zz500_df['code'].iloc[0], date=date)
... 过滤逻辑:价格3-25元,市值≥10亿,成交额≥500万
pass
```
这个过程教会我:**AI 写代码的质量,取决于你提需求的精确度。** 给的约束越细,输出的代码越可用。
---
模块2:资金管理配置
这部分是最让我头疼的——50万本金,怎么分配?
我告诉 WorkBuddy:
> 总资金50万,预留5万作为补仓备用金,剩余45万分散到100只股票,每只4500元建仓。需要考虑同行业不超过3只股票的分散原则。
WorkBuddy 给我的方案:
```python
TOTAL_CAPITAL = 500000 # 总资金
RESERVE_CAPITAL = 50000 # 预留补仓资金
INVESTABLE = TOTAL_CAPITAL - RESERVE_CAPITAL # 450000
MAX_POSITIONS = 100 # 最大持仓数
INITIAL_PER_STOCK = 4500 # 单只初始建仓金额
同行业股票数量限制
INDUSTRY_MAX = 3
def allocate_capital(selected_stocks):
"""
资金分配:
1. 按行业分组,每组最多3只
2. 等权分配,每只 INITIAL_PER_STOCK 元
"""
allocations = []
industry_count = {}
for stock in selected_stocks:
industry = stock['industry']
if industry_count.get(industry, 0) >= INDUSTRY_MAX:
continue # 该行业已达上限,跳过
allocations.append({
'code': stock['code'],
'name': stock['name'],
'industry': industry,
'allocate': INITIAL_PER_STOCK,
'shares': int(INITIAL_PER_STOCK / stock['price'] / 100) * 100 # 整手100股
})
industry_count[industry] = industry_count.get(industry, 0) + 1
if len(allocations) >= MAX_POSITIONS:
break
return allocations
```
**这个输出让我眼前一亮**:不仅帮我算了资金分配,还自动处理了「整手100股」的 A股规则——这是我原本没想到的细节。
---
模块3:止盈止损逻辑
这是超市战法的灵魂。我一开始写的触发逻辑有 bug——涨了之后又跌回来,会重复触发止盈。
**我的需求描述:**
> 止盈逻辑:
> - 持仓成本为 P,持仓期间最高价为 H
> - 如果 H ≥ P×1.1 且当前价 < P×1.1,卖出持仓的50%
> - 如果 H ≥ P×1.2 且当前价 < P×1.2,卖出剩余全部
> - 补仓逻辑:成本 P,当前价跌至 P×0.7 时,补0.5倍仓;跌至 P×0.5 时,补1倍仓
> - 注意:止盈和补仓共用一个持仓记录表,状态要互斥
WorkBuddy 给出的版本考虑了状态互斥——这个细节直接帮我省掉了半天调试时间。
```python
class PositionManager:
def __init__(self):
self.positions = {} # {stock_code: position_data}
def check_trigger(self, stock_code, current_price, cost_price, peak_price):
"""
检查止盈/补仓触发
返回:('sell_half', sell_quantity) 或 ('add_0.5x', add_amount) 等
"""
pos = self.positions.get(stock_code)
if not pos:
return None
止盈检查(优先于补仓)
if peak_price >= cost_price * 1.2 and current_price < cost_price * 1.2:
return ('sell_all', pos['shares'])
elif peak_price >= cost_price * 1.1 and current_price < cost_price * 1.1:
return ('sell_half', pos['shares'] // 2)
补仓检查
if current_price <= cost_price * 0.7:
return ('add_0.5x', pos['initial_amount'] * 0.5)
if current_price <= cost_price * 0.5:
return ('add_1x', pos['initial_amount'] * 1.0)
return None
```
模块4:接入 QMT 实盘
开发完回测逻辑,下一步是实盘对接。这部分 WorkBuddy 帮我梳理了 QMT 的 API 调用框架:
```python
# 国金证券 QMT 交易接口(框架示例)
def send_order_qmt(stock_code, price, quantity, direction):
"""
direction: 'buy' 或 'sell'
"""
# 这是 QMT 的下单接口框架
# 具体实现需要根据 QMT 的 API 文档调整
order_id = g.TradeApi.InsertOrder(
security=stock_code,
price=price,
volume=quantity,
price_type=0, # 限价单
direction=direction
)
return order_id
```
**说实话:** QMT 的实盘对接是最复杂的部分,WorkBuddy 给的框架还需要根据实际账号和券商文档做调整。这里建议大家**把 AI 生成的内容当作起点,而不是终点**。
三、我从中学到的 5 条经验
1. 把复杂任务拆成「小模块」
一次说清所有需求,AI 容易顾此失彼。拆成「选股→建仓→持仓管理→卖出」,逐个击破,迭代优化。
2. 给 AI 具体的数值和字段
> ❌ "获取股票数据"
> ✅ "用 baostock 的 query_history_k_data_plus,获取字段 trade_date/ts_code/open/high/low/close/volume,频率为日线"
3. 让 AI 先解释思路,再写代码
我学会了一个技巧:先问「如果要实现这个功能,逻辑步骤是什么?」确认思路对了再让它写代码,减少无效返工。
4. 不懂的地方直接问
比如我不理解 QMT 的 price_type 参数含义,直接问 WorkBuddy,它给出了各参数取值的详细说明,比翻文档快多了。
5. 积分要省着用
AI 生成代码会消耗积分。我的经验是:**想清楚再问,一次说清楚比来回改效率高10倍。**
四、真实感受:WorkBuddy 适合什么人?
**用下来我觉得 WorkBuddy 最适合以下几类人:**
| 场景 | 推荐程度 | 理由 |
|---|---|---|
| 写量化策略代码 | ⭐⭐⭐⭐ | 逻辑清晰,代码质量高 |
| 写报告/分析文档 | ⭐⭐⭐⭐⭐ | 速度快,可批量生成框架 |
| 快速查资料/科普 | ⭐⭐⭐⭐ | 响应快,覆盖面广 |
| 纯新手编程入门 | ⭐⭐⭐ | 需要一定判断力,不能全盘照搬 |
| 需要接入实时行情 | ⭐⭐⭐ | 框架可以,数据源需自备 |
五、写在最后
用 WorkBuddy 开发量化策略两个月,我的感受是:**它不能替你做交易决策,但它能把你脑子里的交易逻辑快速变成可跑的代码。*
最大的收获不是代码本身,而是通过和 AI 的反复对话,把原来模糊的策略逻辑理清了——哪些地方有漏洞,哪些参数需要回测验证,AI 的「追问」反而帮我发现了自己没想清楚的地方。
如果你也在研究量化,或者有其他重复性高、规则明确的工作想自动化,不妨试试 WorkBuddy。
*本文同步发布于腾讯云开发者社区,内容均为本人真实使用体验,不构成投资建议。*
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。