BigQuant使用文档

106-微盘策略

由jliang创建,最终由small_q 被浏览 94 用户

策略介绍

本文将介绍经典的微盘策略,并通过编写简单的策略示例进行回测,初步感受如何在BigQuant上实现按某个指标排序并通过一系列条件过滤的量化策略开发。

微盘策略是一种投资策略,其核心思想是选择市值较小的公司进行投资。一般来说,小市值公司的股票价格相对较低,但是具有较高的成长性和投资价值。因此,选择微盘公司进行投资,可以获得更高的收益和回报。

策略流程

  1. 过滤ST、停牌、次新股、北交所股票
  2. 按升序排列取最小的30只股票
  3. 每日开盘买入
  4. 持有5个交易日调仓

策略实现

A股-基础选股模块

该模块可实现手动勾选和股票过滤,比如选择股票池、上市板块、指数成分、过滤ST、停牌股等

输入特征模块

该模块实现抽取所需因子以及条件过滤,本文根据市值(规模因子)排序选股,因此输入”total_market_cap“特征,同时在过滤条件里按上市天数、st状态、上市板块进行过滤。(这部分过滤逻辑与A股-基础选股重复,选择一项即可,表达式过滤条件更为灵活强大,只要是预计算因子表中的数据皆可用作过滤筛选)

数据抽取模块

这个模块我们设置数据抽取的开始日期和结束日期。

仓位分配模块

此模块用来分配仓位。可设置股票数量以及仓位公式,这里公式默认即可,等权重。最重要的是确定排序字段级排序方式,本文以score为排序字段,希望买入市值最小股票,因此按升序排序——ASC,如果是降序排序的话,参数为DESC.

BigTrader模块

回测模块新增了一个参数:调仓周期日期,设置为5表明每5天进行调仓。


交易核心逻辑如下:

def bigquant_run(context, data):

    
    import pandas as pd

    # 下一个交易日不是调仓日,则不生成信号

    if not context.rebalance_period.is_signal_date(data.current_dt.date()):

        return

    # 从传入的数据 context.data 中读取今天的信号数据

    today_df = context.data[context.data["date"] == data.current_dt.strftime("%Y-%m-%d")]

    # 卖出不在目标持有列表中的股票

    for instrument in sorted(set(context.get_account_positions().keys()) - set(today_df["instrument"])):

        context.order_target_percent(instrument, 0)

    # 买入目标持有列表中的股票

    for i, x in today_df.iterrows():

        context.order_target_percent(x.instrument, float(x.position))

\

context.rebalance_period.is_signal_date(data.current_dt.date())是用来判断是否是调仓期的,如果设置为5,那么每5天间隔一次会运行后续代码。context.data是输入模块的信号数据。两个for循环实现了先卖出后买入的调仓操作。

\

策略代码

https://bigquant.com/codesharev2/bf9c9c5b-9467-48d8-a13a-29c4e913862c

\