🎯 核心结论
看到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只小盘股能把股价拉涨停,卖能把股价砸跌停。回测的收益很大程度是建立在“你能以收盘价成交”的假设上,实盘会大打折扣。
🔨 我的实盘魔改建议 如果是我的千万级资金,我绝对不敢原封不动用这套代码跑。
- 滑点必须调大:回测里设置的万分之三(
FixedSlippage(3/10000))对小微盘股来说太童话了。真实交易中,你的买卖指令本身就会把价格拉涨或砸跌,我建议滑点至少调到千分之二。 - 加入成交额过滤:只看市值不看成交量是极其危险的。必须在代码里加一句过滤:剔除过去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月完全空仓,买入银华日利ETF | 1月和4月通常空仓,但若国债指数(399303.XSHE)连续两日跌幅小于0.5%且相对三日前跌幅小于0.6%,则不休市 |
4、其他差异
| 维度 | 本策略 | G9pro |
|---|---|---|
| 基准指数 | 上证指数(000001.XSHG) | 中小综指(399101.XSHE) |
| 动态调仓 | 无 | 根据指数与10日均线偏离度调整持股数量(偏离越大持股越多) |
| 日志与数据存储 | 简单日志输出 | 收盘后调用Redis存储(可能用于实盘监控) |
| 策略复杂度 | 较低,核心逻辑简洁 | 较高,包含更多条件判断和可选功能 |
🎁 源码获取(你最关心的)
骂归骂,夸归夸。作为一套基础的小市值动量框架,这套代码的编写极其规范,尤其是它的动态止损和规避财报季模块,完全可以直接搬去你自己的策略库里用!
源码我已经全部打包好了,而且在关键函数旁边都写上了大白话中文注释。
想在自己的电脑上跑一跑这套7年78倍策略的兄弟: 关注本公众号,在后台回复暗号: 【纯微盘】
免责声明:本账号所有量化策略和量化技术仅作技术交流和量化思路分享,不构成任何投资建议,据此操作风险自负,本人不承担任何直接或间接责任。