从买入到卖出:牛市中最省心的“躺赢”策略
策略逻辑
在牛市中,核心逻辑是趋势延续和情绪推动,因此经典策略往往围绕“让利润奔跑”和“提高资金效率”展开。
买入并持有(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,画图设置如下:

执行画图:

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