小市值策略

小市值策略,本质上说就是市值小的股票,在将来上涨的概率越大
据刑不行分享小市值策略提到:一个过去10年可以翻400倍的选股策略,可以说是非常的夸张的了,也想着一探小市值的风采
在刑不行关于小市值的策略是:在每个月的月底,找出市值最小的10只股票,然后全仓等额买入,每月如此反复。
根据聚宽提供的小市值策略,我们将其稍微修改下,每25个交易日调仓频率,每次找出市值最小的10只股票,全仓等额买入,策略非常的简单
代码如下:

'''
筛选出市值介于20-30亿的股票,选取其中市值最小的三只股票,
每天开盘买入,持有五个交易日,然后调仓。
'''

## 初始化函数,设定要操作的股票、基准等等
def initialize(context):
    # 设定沪深300作为基准
    set_benchmark('000300.XSHG')
    # True为开启动态复权模式,使用真实价格交易
    set_option('use_real_price', True) 
    # 设定成交量比例
    set_option('order_volume_ratio', 1)
    # 股票类交易手续费是:买入时佣金万分之三,卖出时佣金万分之三加千分之一印花税, 每笔交易佣金最低扣5块钱
    set_order_cost(OrderCost(open_tax=0, close_tax=0.001, 
                             open_commission=0.0003, close_commission=0.0003,
                             close_today_commission=0, min_commission=5), type='stock')
    # 持仓数量
    g.stocknum = 10 
    # 交易日计时器
    g.days = 0 
    # 调仓频率
    g.refresh_rate = 25
    # 运行函数
    run_daily(trade, 'every_bar')

## 选出小市值股票
def check_stocks(context):
    # 设定查询条件
    q = query(
            valuation.code,
            valuation.market_cap
        ).filter(
            valuation.market_cap.between(20,30)
        ).order_by(
            valuation.market_cap.asc()
        )

    # 选出低市值的股票,构成buylist
    df = get_fundamentals(q)
    buylist =list(df['code'])

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

    return buylist[:g.stocknum]
  
## 交易函数
def trade(context):
    if g.days%g.refresh_rate == 0:

        ## 获取持仓列表
        sell_list = list(context.portfolio.positions.keys())
        # 如果有持仓,则卖出
        if len(sell_list) > 0 :
            for stock in sell_list:
                order_target_value(stock, 0)

        ## 分配资金
        if len(context.portfolio.positions) < g.stocknum :
            Num = g.stocknum - len(context.portfolio.positions)
            Cash = context.portfolio.cash/Num
        else: 
            Cash = 0

        ## 选股
        stock_list = check_stocks(context)

        ## 买入股票
        for stock in stock_list:
            if len(context.portfolio.positions.keys()) < g.stocknum:
                order_value(stock, Cash)

        # 天计数加一
        g.days = 1
    else:
        g.days += 1

# 过滤停牌股票
def filter_paused_stock(stock_list):
    current_data = get_current_data()
    return [stock for stock in stock_list if not current_data[stock].paused]

最后的回测结果更是恐怖,策略收益高达到856%,完全就是在碾压作为基准的沪深300指数(回测时间为2018-07-01到2020-07-01,初始资金为10万元),但就是最大回测有太高

那为何这么多年了,小市值策略还这么牛叉呢。(参考:量化狮的知乎回答

从上面的回测结果也发现,小市值策略绝对是大幅度跑赢指数的,甚至可以说是A股市场众多因子中表现最牛叉的一个,并且,在国外不同市场都得到了实证,不可能因为IPO放水就失效了
小市值因子有效的内因有很多,其中一个是小市值企业的成长性,一家30亿市值的企业成长为300亿的企业,其难度明显要比300亿的企业成长为3000亿要小得多。另一个就是诺贝尔奖得主尤金·玛法的三因子模型提出的风险溢价因素,也证明了小市值因子的有效性。这两个内因只是说明了小市值股票具备一定溢价和超额收益,真正决定小市值策略超额收益的还是小市值股票的高波动性

小市值策略,赚在轮动赢在波动

轮动收益 = 轮动频率 * 轮动波幅

小市值股票的波动性要比市值中性或大市值股票大得多,同时,A股小市值股票又要比国际市场的波动性更大,所以按照策略进行轮动的交易者可以更频繁的获得轮动阿尔法收益
A股市场小市值股票之所以存在超高的轮动收益,很大程度上是来源于市场中大量的非理性散户行为,比如借壳、充足、题材概念、还有没有道理的高配送等等,但随着市场环境的变化以及监管力度的加强,小市值股票短期内暴涨暴跌的现象肯定会逐渐受到遏制,个股波动的频率和波幅会日趋减少,必然会影响小市值策略未来的预期收益率

原文地址:https://www.cnblogs.com/whiteBear/p/13223990.html