涨停基因小市值:涨停密度与周调仓(QMT / PTrade)
涨停基因小市值(小狮子)是「小市值」家族里另一条线:先按市值收窄股票池,再按历史涨停次数和启动点排序,行业尽量分散。和 小市值策略 不是同一套筛选。阈值、天数、只数是示例,不是操作指令。不构成投资建议,不代操盘。
手册:qmt · ptrade · get_fundamentals
逻辑简述
- 底池。全市场去掉次新、科创、北交、ST、停牌,再按市值排序取前一段(常见前 1000)。
- 涨停基因。在底池里看较长窗口的历史涨停次数,只留密度靠前的一截。
- 启动点 / 行业。有的实现再按「涨停前第一根阴线」排序,并做行业分散。PTrade 小狮子 v2.4 里行业分散曾被列表覆盖,对源码时不要假设一定分散成功。
- 调仓。每周一个交易日先卖后买(QMT 常见周二 10:15 / 10:30;PTrade 常见每周第二个交易日 10:26 / 10:27)。
- 风控。昨日涨停当日破板检查、大盘+个股联合止损、1 月和 4 月空仓,是常见附件里的开关,不是必须照抄。
QMT 版本
逻辑在 handlebar 里用小时+分钟对齐。策略隔离持仓写到本策略自己的 json,只买卖自己记下的票。首次实盘若空仓,有的实现会当天直接选股买入,不限于周二。
python
#coding:gbk
def init(C):
try:
g.accountid = account
g.acct_type = accountType
except:
g.accountid = ''
g.acct_type = 'STOCK'
g.init_stock_count = 1000
g.hold_num = 10
g.last_weekly_sell_date = None
g.last_weekly_buy_date = None
g.my_hold_list = load_my_hold_list()
def handlebar(C):
if not C.is_last_bar():
return
weekday = datetime.now().weekday() # 回测改用 K 线日期
# 周二 10:15 weekly_sell,10:30 weekly_buy
# 选股:过滤 -> 市值前1000 -> 涨停密度 -> 启动点 -> 行业分散空仓月如果切 ETF,后缀必须是 .SH。passorder 的 userOrderId 可以带策略名,方便跟单和对账。
PTrade 版本
run_daily / 周调度对准「每周第二个交易日」。财务和市值用 get_fundamentals。持仓用 get_positions()。不要卖 g.excluded_stocks 里其他策略的票。
python
def initialize(context):
g.stock_num = 10
g.verbose_log = False
g.excluded_stocks = []
run_daily(context, prepare, time='9:05')
run_daily(context, weekly_sell, time='10:26')
run_daily(context, weekly_buy, time='10:27')
def handle_data(context, data):
pass从聚宽拷过来的 .XSHG 先换成 .SS。交易里定时器数量有上限,周调仓和破板检查不要各挂一堆。
两边都容易踩的坑
- 「涨停基因」依赖历史日线,回测起始日太近会选出空池。
- 策略隔离 json 和柜台持仓对不上时,先对账再下单,不要按柜台全清。
- 1 月、4 月空仓开关和 小市值策略 类似,但选股主因子不同,不要混用一份参数。
- 行业分散如果被
list(df.code)覆盖,日志里会看起来像「只按市值排」。
完整源码见知识星球附件,这里只放逻辑和片段。
完整讨论和附件在 知识星球 Kimi量化研究所。
