Skip to content

涨停基因小市值:涨停密度与周调仓(QMT / PTrade)

涨停基因小市值(小狮子)是「小市值」家族里另一条线:先按市值收窄股票池,再按历史涨停次数和启动点排序,行业尽量分散。和 小市值策略 不是同一套筛选。阈值、天数、只数是示例,不是操作指令。不构成投资建议,不代操盘。

手册:qmt · ptrade · get_fundamentals

逻辑简述

  1. 底池。全市场去掉次新、科创、北交、ST、停牌,再按市值排序取前一段(常见前 1000)。
  2. 涨停基因。在底池里看较长窗口的历史涨停次数,只留密度靠前的一截。
  3. 启动点 / 行业。有的实现再按「涨停前第一根阴线」排序,并做行业分散。PTrade 小狮子 v2.4 里行业分散曾被列表覆盖,对源码时不要假设一定分散成功。
  4. 调仓。每周一个交易日先卖后买(QMT 常见周二 10:15 / 10:30;PTrade 常见每周第二个交易日 10:26 / 10:27)。
  5. 风控。昨日涨停当日破板检查、大盘+个股联合止损、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,后缀必须是 .SHpassorder 的 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。交易里定时器数量有上限,周调仓和破板检查不要各挂一堆。

两边都容易踩的坑

  1. 「涨停基因」依赖历史日线,回测起始日太近会选出空池。
  2. 策略隔离 json 和柜台持仓对不上时,先对账再下单,不要按柜台全清。
  3. 1 月、4 月空仓开关和 小市值策略 类似,但选股主因子不同,不要混用一份参数。
  4. 行业分散如果被 list(df.code) 覆盖,日志里会看起来像「只按市值排」。

完整源码见知识星球附件,这里只放逻辑和片段。

相关:API 查询 · 热门问题 · 关注 / 知识星球

完整讨论和附件在 知识星球 Kimi量化研究所