首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >PTrade 官方 Demo 小市值策略完整拆解:逻辑、代码、回测与实操全解析

PTrade 官方 Demo 小市值策略完整拆解:逻辑、代码、回测与实操全解析

原创
作者头像
用户12567181
发布2026-07-08 13:59:18
发布2026-07-08 13:59:18
70
举报
文章被收录于专栏:量化软件开通量化软件开通

很多小伙伴在开通了ptrade后会发现,它会贴心的赠送很多demo策略,但是这些策略具体怎么运作?每段代码在 “干些什么”?实盘能不能直接用?今天我们就来先讲一讲demo策略里面的“小市值策略”。

一、先搞懂核心:小市值策略到底在 “干什么”?

要学策略,先懂 “它的想法”。小市值策略的核心逻辑,其实源于市场一个常见特点:流通市值小的股票,往往弹性更大(简单说就是涨跌幅可能更明显)。但光找小市值还不够,得 “挑好的小市值”,还要 “别踩坑”,所以策略的整体逻辑分两步走:

1. 盘前:先把 “坏股票” 筛出去,留下 “候选池”

每天开盘前,策略会先做 “筛选工作”,就像买菜前先把烂菜挑出去:

l 锁定范围 —— 只看 “中小板综指数”(代码 399101.XBHS)的成分股,不碰其他板块的股票,保证策略聚焦在中小盘股里;

l 剔除 “坑股”—— 把成分股里的 ST 股(有风险警示的)、停牌股(买了卖不了的)、退市股(即将退市的)全部去掉,避免踩雷;

l 缩小范围 —— 先按 “昨天收盘的流通市值” 从小到大排序,挑前 100 只(主要是为了让回测跑得更快,不用算太多股票),再从这 100 只里去掉 “坑股”,最后留下流通市值最小的 10 只,作为当天的 “备选股票池”。

2. 盘中:只买 “最小的”,涨停的 “不动”

开盘后,策略会根据实时情况换仓,核心规则就两条:

l 始终持有 “当前流通市值最小的 5 只股票”(流通市值 = 昨天的流通股本 × 今天实时股价,实时算、实时排);

l 如果手里持有的股票当天涨停了,不管它是不是还在 “最小 5 只” 里,都不卖掉(怕卖了之后买不回来,错过后续涨幅)。

二、逐行拆代码:每个模块在 “做什么”?(结合 Ptrade API)

代码看着复杂,但其实是 “按步骤干活”,咱们把每个核心函数拆开对照观看:

1. 初始化函数(initialize):给策略 “定规矩”

这部分是策略的 “基础设置”,就像给手机设初始参数:

l set_benchmark("000300.XSHG"):设置 “比较基准” 为沪深 300 指数(API 文档里 “基准指数设置” 接口)。意思是:策略赚了多少钱,要跟沪深 300 比 —— 比如策略涨 5%,沪深 300 涨 2%,说明策略跑赢了;

l g.index = "399101.XBHS":定好股票池的 “来源” 是中小板综指数(API 里 “指数成分股获取” 接口的前置设置),后续只从这个指数里选股票;

l g.buy_stock_count = 5:规定每次最多持有 5 只股票,避免买太多分散精力;

l if not is_trade(): set_backtest():判断如果不是实盘(是回测),就开启 “无限制回测模式”(API 里 “回测参数设置” 接口),让回测能更顺畅地计算。

2. 盘前处理(before_trading_start):筛选 “候选股池”

这部分是每天开盘前的 “准备工作”,关键 API 要记牢:

l get_positions().keys():获取昨天持有的股票列表(API “持仓信息查询” 接口),后续用来判断哪些股票涨停了;

l get_index_stocks(g.index):根据之前定的 “中小板综指数”,拿到所有成分股(API “指数成分股获取” 接口),这是策略的 “选股范围”;

l get_fundamentals(...):查询股票的 “财务估值数据”(API “基本面数据查询” 接口),这里专门查了 “流通股本(a_floats)” 和 “流通市值(float_value)”,按流通市值从小到大排,取前 100 只(为了回测快);

l filter_stock_by_status(...):过滤掉 “问题股票”(API “股票状态过滤” 接口),这里明确去掉 ST、停牌、退市股,是策略的 “防坑关键”;

l 最后留下 10 只符合条件的小市值股,存在g.df里,供盘中选买。

3. 盘中处理(handle_data):触发交易

这部分是 “交易开关”:每天盘中会自动调用这个函数,先通过get_trade_stocks确定 “今天该买哪些股”,再用trade函数执行买卖,还会把要买的股票记下来(log.info),后续回测时能看到当时选了啥,方便找问题。

4. 确定买入股(get_trade_stocks):涨停股不换,选最小市值

这是策略的 “选股核心”,关键在两点:

l check_limit(stock):判断股票是否涨停(API “涨跌停判断” 接口),这里把昨天持仓里涨停的股票挑出来,标注为 “不卖出”;

l 算 “实时流通市值”:用昨天的流通股本(固定的)乘以今天的实时股价(data[x["code"]].price,API “实时行情获取” 接口),这样能实时知道哪只股票现在市值最小;

l 最终要买的股票 =“实时最小市值的新股票”+“昨天持仓的涨停股”,保证涨停股不被卖掉,同时始终持有最小市值的股票。

5.执行交易(trade):卖旧买新,按市值下单

这是 “实际买卖操作”,核心 API 是order_target_value:

卖出逻辑:如果手里的股票不在 “今天要买的列表” 里,就用order_target_value(stock, 0)卖光(API “目标市值下单” 接口,目标市值设为 0 就是清仓);

买入逻辑:如果手里没够 5 只股票,就把剩下的现金平均分(比如还缺 2 只,就把现金分成 2 份),用order_target_value(stock, value)买新股票(目标市值设为 “每份的钱”,保证每只股票仓位差不多);

注意:API 文档里明确说了,order_target_value在回测里能用,但实盘要谨慎 —— 回测时持仓信息是 “瞬时更新” 的,实盘要等券商柜台返回数据,可能会重复下单,这点一定要记牢!

这个策略适用人群:

l 适合人群:想尝试中小盘股票、能接受 “每天可能换仓”(日线周期)、喜欢 “规则明确” 策略的学员,尤其适合用回测来验证小市值逻辑在不同市场阶段的表现;

l 不适合人群:不想频繁换仓、偏好大盘股 / 蓝筹股、追求 “稳赚不赔” 的学员(没有任何策略能稳赚)。

感兴趣的小伙伴快去自己修改试试吧!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

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