从买入到卖出:牛市中最省心的“躺赢”策略

策略逻辑

在牛市中,核心逻辑是趋势延续和情绪推动,因此经典策略往往围绕“让利润奔跑”和“提高资金效率”展开。

买入并持有(Buy and Hold),是最基础、最适合普通投资者的策略。在牛市初期或中期买入优质资产(如指数 ETF、龙头股),然后一直持有到牛市末期。优势是不需要频繁交易,能完整吃下整个主升浪,避免踏空。关键是要忍住中途的震荡回调,不要轻易下车。
策略本质:

在牛市初期或确认后,一次性或分批买入优质资产,然后长期持有直到牛市末期卖出,中间忽略所有短期波动。

理论依据:

  • 牛市的特征是趋势向上,任何试图高抛低吸的操作都可能卖飞或踏空。

  • 长期持有能完整吃下整个主升浪,避免频繁交易产生的摩擦成本和情绪干扰。

  • 时间和复利是最大的盟友。

策略买卖规则

下面详细编写一个买入并持有策略(Buy and Hold),并验证在当前牛市中的应用效果。

一、买入时机判断(何时进场)

牛市不是一个点,而是一个区间。以下条件满足任意2条,即可认为牛市环境确立:

条件

量化定义


指数站上年线

收盘价 > 250日均线,且均线拐头向上

沪深300

指数从低点反弹20%

较最近半年低点上涨≥20%

技术分析通用规则

均线多头排列

5 > 20 > 60 > 250

趋势确认

成交量放大

20日均量 > 120日均量 × 1.5

资金入场

二、卖出规则(何时离场)

牛市末期的客观信号,以下信号出现任意 2 条,应开始分批或全部卖出:

信号

量化定义

历史准确性

指数跌破年线

收盘价 < 250日均线,且均线开始向下

极高

指数最大回撤>20%

从高点下跌超过20%

技术性熊市定义

成交量天量后缩量

单日成交额创历史新高,随后连续缩量

较高

均线死叉

5日线下穿20日线,且20日线已走平或向下

较高

用 AI 编写量化策略

我们使用 Deepseek 来帮助我们编写这个量化策略,并在AIQT平台上回测验证。

(1)在 Deepseek 里上传AIQT 规范文档和提示词

提示词:

买入条件,满足以下任意 2 条就买入:

1. 指数站上年线 沪深 300 收盘价 > 250 日均线,且均线拐头向上

2. 指数从低点反弹 20% 沪深 300 指数较最近半年低点上涨≥20%

3. 收盘价均线多头排列 5 日 MA > 20 日 MA > 60 日 MA > 250 日 MA

4. 成交量放大 20 日均量 > 120 日均量 × 1.5

卖出条件,满足以下任意 2 条就全部卖出:

1. 指数跌破年线 沪深 300 收盘价 < 250 日均线,且均线开始向下

2. 指数最大回撤 >20% 沪深 300 从高点下跌超过 20% 高点取过去 365 个交易日内的最高收盘价

3. 成交量天量后缩量 单日成交量创历史新高,随后连续缩量,

条件 A:单日成交量超过过去 120 日最高量的 1.2 倍
条件 B:随后 5 个交易日中,有至少 3 个交易日 volume < MA(volume, 20) * 0.8

4. 均线死叉(5 日线下穿 20 日线,且 20 日线已走平或向下)

如图:

..

AI 学习规范后,会输出策略内容:

..

将策略内容复制到 AIQT 的文字策略:

..

点击应用,系统会检测语法,这里应用后系统报错

..

这是因为策略里出现的的指标都要提前定义,沪深 300 指数要定义后才能引用,提示 AI 进行纠正:

..

可以看到 AI 对沪深 300 指数进行了定义,将修改后的策略复制到 AIQT,应用,系统报错:

..

直接将报错信息复制给 deepseek,纠正

..

将纠正后的策略复制到 AIQT,应用,出现报错后再复制给 AI 纠正,如此反复几轮,直至无报错,输出结果如下图:

..

..

语法没有报错后,还不能直接回测,要检查一下策略中的逻辑是否准确,这里我们对上图红线部分的内容进行逻辑修正,最终准确的策略写法如下:

指标定义:

沪深 300 指数,HS300

MA,MA250_INDEX;源指标:HS300,周期:250

自定义计算,Index_Above_MA250;表达式:HS300 大于 MA250_INDEX 且 MA250_INDEX 大于昨日 MA250_INDEX

自定义计算,Index_Low_180;表达式:180 日 HS300 最小

自定义计算,Index_Rebound_20;表达式:(HS300 - 昨日 Index_Low_180) / 昨日 Index_Low_180 >= 0.2

MA,MA5_STOCK

MA,MA20_STOCK;周期:20

MA,MA60_STOCK;周期:60

MA,MA250_STOCK;周期:250

自定义计算,Bullish_Arrangement;表达式:MA5_STOCK 大于 MA20_STOCK 且 MA20_STOCK 大于 MA60_STOCK 且 MA60_STOCK 大于 MA250_STOCK

MA,MA20_VOL;源指标:成交量,周期:20

MA,MA120_VOL;源指标:成交量,周期:120

自定义计算,Volume_Surge;表达式:MA20_VOL 大于 MA120_VOL * 1.5

自定义计算,Buy_Condition_Met;表达式:(if(Index_Above_MA250,1,0) + if(Index_Rebound_20,1,0) + if(Bullish_Arrangement,1,0) + if(Volume_Surge,1,0)) >= 2

自定义信号,Buy_Signal;买入条件:Buy_Condition_Met

MA,MA250_INDEX_SELL;源指标:HS300,周期:250

自定义计算,Index_Below_MA250;表达式:HS300 小于 MA250_INDEX_SELL 且 MA250_INDEX_SELL 小于昨日 MA250_INDEX_SELL

自定义计算,Index_High_365;表达式:365 日 HS300 最大

自定义计算,Index_Drawdown_20;表达式:(昨日 Index_High_365 - HS300) / 昨日 Index_High_365 > 0.2

自定义计算,MA120_VOL_MAX;表达式:120 日成交量最大

自定义计算,Volume_Spike;表达式:成交量大于昨日 MA120_VOL_MAX * 1.2

MA,MA20_VOL_SELL;源指标:成交量,周期:20

自定义计算,Is_Shrink;表达式:成交量小于 MA20_VOL_SELL * 0.8

自定义计算,Shrink_Count_5D;表达式:5 日内 Is_Shrink 的数量

自定义计算,Volume_Shrink_Condition;表达式:6 日前 Volume_Spike 且 Shrink_Count_5D >= 3

MA,MA5_SELL

MA,MA20_SELL;周期:20

GDX,DeathCross;短线:MA5_SELL,长线:MA20_SELL

自定义计算,MA20_FlatOrDown;表达式:MA20_SELL 小于等于昨日 MA20_SELL

自定义计算,DeathCross_Condition;表达式:DeathCross 等于 -1 且 MA20_FlatOrDown

自定义计算,Sell_Condition_Met_Base;表达式:(if(Index_Below_MA250,1,0) + if(Index_Drawdown_20,1,0) + if(Volume_Shrink_Condition,1,0) + if(DeathCross_Condition,1,0)) >= 2

自定义信号,Sell_Signal;卖出条件:Sell_Condition_Met_Base

配置定义:

买入信号列:Buy_Signal

买入价格:昨日收盘价

买入股数:100

最大持仓数:1

卖出信号列:Sell_Signal

卖出价格:昨日收盘价

回测

然后就可以输入股票代码,进行回测验证策略效果了。

这里我们让 AI 给推荐 10 支股票

..

去掉股票代码后的字母后缀,只保留数字

..

将这 10 支股票,复制到多票回测的股票池,回测期设置为近 1 年,点击开始回测

..

回测结果:

..

可以看到,该策略在这 10 支股票上都获得了不错的收益。

再从图形下分析下,比如选择 688008,画图设置如下:

..

执行画图:

..

可以看到,对于牛市股该策略能够在趋势早期就发出买入信号,然后一直持有,从而获得收益。