首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >用 WorkBuddy 开发量化交易策略:把「超市战法」变成可执行代码

用 WorkBuddy 开发量化交易策略:把「超市战法」变成可执行代码

原创
作者头像
用户12440745
修改2026-04-26 19:56:17
修改2026-04-26 19:56:17
110
举报

用 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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档