×

【实战量化研报落地01微盘股择时1】构建微盘股指数

wang wang 发表于2026-04-02 18:35:03 浏览1 评论0

抢沙发发表评论

【实战量化研报落地01微盘股择时1】构建微盘股指数

【微盘股择时】微盘股+尾盘择时==圣杯?最近365个交易日居然涨了1.5倍(就算不择时)

微盘股一直是收益率极高的领域,回撤控制好,感觉年化过50%其实是非常轻松的。所以我将在微盘股择时做一下深度研究,本期我们分享如何构建一个属于自己的指数,后面我将在这个基础上,进行择时研究,并验证效果。

同花顺微盘股指数

编制逻辑

200个票,不过滤ST, 等权。日频。

复现微盘股指数

  1. 每个策略都有个候选集,只看主板,严重失真,需要自定义一个自己的指数。
  2. 我们可以基于这个指数做很多择时方面的工作并加以验证效果。

1. 获取成分股

# 获取股票池
import datetime
import matplotlib.pyplot as plt
import pandas as pd
from tqdm import tqdm
from jqdata import *
from jqlib.technical_analysis import *

stockList = get_all_securities(types=['stock'], date=date)
stockList = list(stockList.index)

2. 过滤成分股

def filter_new_stock(stockList, date, days=250):
    res = []
    date = datetime.datetime.strptime(date, "%Y-%m-%d")
    for stock in stockList:
        start_date = get_security_info(stock).start_date
        if start_date < (date - datetime.timedelta(days=days)).date():
            res.append(stock)
    return res


def filter_st_stock(stockList, date):
    st_data = get_extras('is_st', stockList, count=1, end_date=date)
    res = []
    for stock in stockList:
        if not st_data[stock][0]:
            res.append(stock)
    return res



def filter_kcb_stock(stockList):
    res = []
    for stock in stockList:
        if stock[0] != '4' and stock[0] != '8' and stock[:2] != '68':
            res.append(stock)
    return res

def filter_cyb_stock(stockList):
    res = []
    for stock in stockList:
        if stock[0] != '3':
            res.append(stock)
    return res


def filter_paused_stock(stockList, date):
    df = get_price(stockList, end_date=date, frequency='daily', fields=['paused'], count=1, panel=False, fill_paused=True, skip_paused=False)
    df = df[df['paused'] == 0]
    res = list(df.code)
    return res

3. 拉市值最小的200只作为候选持仓

q = query(valuation.code,valuation.market_cap).filter(
valuation.code.in_(stockList)
).order_by(valuation.market_cap.asc()).limit(200)

df = get_fundamentals(q, date=yesterday)

4. 计算当日等权收益率

df["ret"] = df["close"]/ df["pre_close"] - 1
res = df["ret"].mean()

5. 计算净值曲线

df['nav'] = (1 + df['daily_return']).cumprod()

6. 绘制净值曲线

plt.figure(figsize=(10, 6))
plt.plot(df['date'], df['nav'])

plt.title('累计净值曲线(初始净值=1)', fontsize=16, pad=20)
plt.xlabel('日期', fontsize=12)
plt.ylabel('累计净值', fontsize=12)
plt.grid(True, linestyle='--', alpha=0.7)
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

完整的实战量化类代码(可直接实盘)在星球里直接下载