年化87%!回撤仅26%!这个“小市值+止损”策略,7年怒翻78倍,是神是鬼?

0 阅读8分钟

🎯 核心结论

看到7年78倍、年化87%的回测数据,我第一反应是:这绝对又是个靠“未来函数”或者过度拟合搞出来的自慰型垃圾代码。

但当我逐行扒完它的Python源码后,我必须承认:这哥们把A股的“炒小炒差”和“保命哲学”玩到了极致,绝对是个在市场里挨过毒打的实战派。

老规矩,先上硬核数据卡片,让大家看看这台“印钞机”的面板属性:

核心指标数据表现交易员点评
年化收益87.0%极其暴力,一波牛市就能财富自由
最大回撤26.3%对比近百的年化,这个回撤控制堪称艺术
夏普比率2.80远超公募基金,承担一分风险赚三分钱
交易胜率61.0%盈亏比策略,不追求百战百胜
策略类型小市值轮动典型的A股特色动量+微盘玩法


🧐 策略逻辑大白话

很多新手一看到代码就头晕。别怕,我用大妈去菜市场买菜的逻辑,给你把这套策略扒得底裤都不剩。

这个策略的核心精髓就四个字: “买小、快跑”

1. 选股逻辑:专挑“小而美”的干净票 代码里写得很清楚,它只去沪深主板找市值在5亿到50亿之间的股票。 而且非常有洁癖:如果不干净,就绝对不碰!

  • 不是主板的(科创、北交)?不买!
  • 戴帽子的(ST、*ST、退市)?不买!
  • 刚上市不满一年的(次新股)?不买!
  • 昨天已经涨停买不进的?直接过滤!

` initial_list = get_index_stocks('399101.XSHE', by_date) # 从中小综指中选股

initial_list = filter_kcbj_stock(initial_list)     # 过滤科创北交所股票,改为保留沪深主板股票

initial_list = filter_st_stock(initial_list)            # 过滤ST股票

initial_list = filter_paused_stock(initial_list)        # 过滤停牌股票

initial_list = filter_limitup_stock(context, initial_list)      # 过滤昨日涨停股票,持仓股不在此列
initial_list = filter_limitdown_stock(context, initial_list)    # 过滤昨日跌停股票,持仓股不在此列
initial_list = filter_highprice_stock(context, initial_list)    # 过滤股价过高的票,持仓股不在此列
`

2. 买卖规则:无情的“打地鼠”机器 这套策略根本不在乎这家公司是造火箭的还是卖猪肉的。 它的运行逻辑像一个无情的机器人: 👉 每周二上午10点:准时看一眼账户。把手里不符合条件的票全部扔掉,换成目前市值最小的5只票。 👉 每天盯盘止损:只要你买的票跌了7%,立刻手起刀落,割肉走人(stoploss_limit = 0.07)。 👉 大盘暴跌熔断:如果发现大盘基准连跌5%,直接清仓所有股票,全部空仓避险!

3. 涨停信仰:让利润飞一会 这里有个极度聪明的设定。 如果它买到的股票昨天涨停了,它今天下午2点半会死死盯着: 如果不打开涨停板,就死拿!如果涨停板一裂开,立马砸盘卖出跑路! (代码里的check_limit_up函数简直是神来之笔)。


⚠️ 深度拆解与避坑

看完上面的逻辑,你是不是觉得心潮澎湃,恨不得马上拿真金白银去跑实盘? 冷静!作为在量化坑里摸爬滚打10年的老兵,我得给你浇盆冷水。

💡 这个策略的牛逼之处在哪?

1.月份择时很鸡贼

1月是年报预告密集期,小盘股容易暴雷;4月是年报和一季报最后披露期,雷更多。回测数据显示这两个月小盘股平均收益确实最差,空仓能大幅提升夏普。 2.不再买入机制

止损或涨停开板后5天内不买同一只股票,防止刚割肉又追高,这个细节很老道。 💣 致命弱点:实盘里的“万人踩踏”

def today_is_pass(context):
    if g.pass_months:
        today = context.current_dt.strftime('%m-%d')
        if (('04-05' <= today) and (today <= '04-30')) or (('01-01' <= today) and (today <= '01-31')):
            return False
        else:
            return True
    else:
        return True

1.止损线过窄

7%止损对于波动巨大的小盘股来说,可能频繁被扫出去,然后股价又拉回来,导致踏空。回测参数可能是最优的,但未来不一定。 在回测里,你跌到7%总能卖出去。但在真实的A股极端行情下(比如今年初的微盘股流动性危机),小微盘股全是一字跌停! 你的程序疯狂发单要止损,但盘口根本没人接盘。回测里的最大回撤是26%,实盘遇上极端流动性枯竭,你的账户可能会遭遇腰斩!

2.月份择时是否过拟合?

历史上1月和4月确实差,但有没有想过万一以后这两个月变成小盘股黄金月呢?值得思考。

3.滑点和冲击成本

每天买卖的股票市值可能不大,但如果是千万级资金,买5只小盘股能把股价拉涨停,卖能把股价砸跌停。回测的收益很大程度是建立在“你能以收盘价成交”的假设上,实盘会大打折扣。

🔨 我的实盘魔改建议 如果是我的千万级资金,我绝对不敢原封不动用这套代码跑。

  1. 滑点必须调大:回测里设置的万分之三(FixedSlippage(3/10000))对小微盘股来说太童话了。真实交易中,你的买卖指令本身就会把价格拉涨或砸跌,我建议滑点至少调到千分之二。
  2. 加入成交额过滤:只看市值不看成交量是极其危险的。必须在代码里加一句过滤:剔除过去20天日均成交额低于3000万的僵尸股。

🐍与国九条pro的区别

它与G9pro都是小市值风格的量化交易策略,但在选股逻辑、风控机制、调仓规则等方面存在显著差异。以下是主要区别的详细对比:

1、选股逻辑

维度本策略G9Pro
股票池来源中小综指(399101.XSHE)中小综指(399101.XSHE)
市值范围5亿 ~ 50亿10亿 ~ 100亿(动态调整,参数可配置)
财务指标净利润 > 0,营业收入 > 1亿
股价限制单价 ≤ 80元单价 ≤ 50元
审计意见可选过滤(默认关闭)
选股数量先取市值前50,再取前5只先财务筛选,再取市值前(持股数×3)只,再取前N只
持股数量固定5只动态调整(3~6只,根据指数与均线偏离程度决定)

2、交易时机与调仓频率

维度本策略G9pro
调仓频率每周二 10:00每周二 10:00
止损检查每日 10:30 和 14:00每日 10:00
涨停处理每日 14:30 检查昨日涨停股,未封板则卖出每日 14:00 检查昨日涨停股,未封板则卖出
尾盘补仓每日 14:30 检查余额并补仓(若因涨停或止损卖出)每日 14:00 检查余额并补仓(区分涨停卖出和止损卖出)
特殊月份清仓每日 14:30 若为1月或4月则清仓每日 14:50 若为空仓月份且不符合例外条件则清仓

3、风控与止损机制

维度本策略G9pro
个股止损线-7%-9%(同时有+100%止盈)
市场趋势止损中小综指成分股平均跌幅 >5% 则清仓中小综指成分股平均跌幅 >5% 则清仓
卖出后处理止损或涨停开板股票进入黑名单,5天内不再买入止损卖出部分补仓ETF,涨停开板卖出部分补仓股票
特殊月份规则1月和4月完全空仓,买入银华日利ETF1月和4月通常空仓,但若国债指数(399303.XSHE)连续两日跌幅小于0.5%且相对三日前跌幅小于0.6%,则不休市

4、其他差异

维度本策略G9pro
基准指数上证指数(000001.XSHG)中小综指(399101.XSHE)
动态调仓根据指数与10日均线偏离度调整持股数量(偏离越大持股越多)
日志与数据存储简单日志输出收盘后调用Redis存储(可能用于实盘监控)
策略复杂度较低,核心逻辑简洁较高,包含更多条件判断和可选功能

🎁 源码获取(你最关心的)

骂归骂,夸归夸。作为一套基础的小市值动量框架,这套代码的编写极其规范,尤其是它的动态止损和规避财报季模块,完全可以直接搬去你自己的策略库里用!

源码我已经全部打包好了,而且在关键函数旁边都写上了大白话中文注释。

想在自己的电脑上跑一跑这套7年78倍策略的兄弟: 关注本公众号,在后台回复暗号: 【纯微盘】

免责声明:本账号所有量化策略和量化技术仅作技术交流和量化思路分享,不构成任何投资建议,据此操作风险自负,本人不承担任何直接或间接责任。