106-微盘策略
由jliang创建,最终由small_q 被浏览 454 用户
策略介绍
本文将介绍经典的微盘策略,并通过编写简单的策略示例进行回测,初步感受如何在BigQuant上实现按某个指标排序并通过一系列条件过滤的量化策略开发。
微盘策略是一种投资策略,其核心思想是选择市值较小的公司进行投资。一般来说,小市值公司的股票价格相对较低,但是具有较高的成长性和投资价值。因此,选择微盘公司进行投资,可以获得更高的收益和回报。
策略流程
- 过滤ST、停牌、次新股、北交所股票
- 按升序排列取最小的30只股票
- 每日开盘买入
- 持有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/codesharev3/cec7130e-9bac-4da7-bf7d-ff6afabd888d
\