普通网友 2025-09-28 18:50 采纳率: 97.6%
浏览 1
已采纳

同花顺微盘股指数如何筛选成分股?

同花顺微盘股指数如何筛选成分股?其核心筛选标准包括:剔除ST/*ST股票、上市满一年、非北交所股票,并按总市值从低到高排序,选取排名靠后的一定数量小市值公司作为成分股。但具体选样规则(如是否动态调整、流动性门槛、行业分布限制等)并未公开披露,导致投资者难以精确复现。常见技术问题为:在使用同花顺数据接口或公式编辑器时,为何无法通过“市值+非ST+上市年限”等条件完全匹配实际成分股?是否还隐含成交额、换手率或财务指标等隐藏筛选条件?
  • 写回答

1条回答 默认 最新

  • 蔡恩泽 2025-09-28 18:51
    关注

    1. 同花顺微盘股指数成分股筛选机制初探

    同花顺微盘股指数旨在反映A股市场中市值最小的一批上市公司的整体走势。其公开披露的核心筛选标准包括:剔除ST/*ST股票、上市满一年、非北交所股票,并在剩余股票中按总市值从低到高排序,选取排名靠后的一定数量公司作为成分股。

    然而,该指数并未对外公布完整的选样规则细节,如调样频率、流动性门槛、行业分布控制等关键参数,导致投资者在尝试复现时面临显著偏差。

    2. 常见技术问题解析:为何无法完全匹配实际成分股?

    • 数据源差异:同花顺使用内部清洗后的高质量行情与财务数据,而第三方接口可能未对退市、暂停交易等情况做同步处理。
    • 时间窗口不一致:例如“上市满一年”是否以自然日计算?是否考虑停牌天数?这些细节影响样本池范围。
    • 市值计算方式不同:是采用当日收盘市值,还是过去一段时间的平均市值?是否存在自由流通市值加权预筛选?
    • 动态调整机制未知:调样周期(月度/季度)、缓冲区规则(如防止频繁进出)均未公开。

    3. 隐含筛选条件的可能性分析

    潜在隐藏条件支持证据技术影响
    最低成交额门槛部分极低流动性股票未入选需加入日均成交额过滤
    换手率下限长期无交易个股被排除公式中应加入ATR或换手平滑值
    财务健康度连续亏损但未ST的公司较少出现可能隐含净利润或营收正向约束
    价格有效性股价长期低于1元者缺失存在面值退市风险规避逻辑
    行业均衡性单一行业占比有限制迹象需行业分层抽样模拟
    权重上限控制单一个股权重普遍较低暗示有cap-weight capping机制
    交易状态稳定性频繁停牌股未纳入需统计停牌天数并过滤
    股东人数门槛疑似参考散户参与度可结合L1/L2数据增强判断
    信息透明度年报延迟披露公司被排除需整合公告及时性指标
    市值波动异常检测短期暴涨股未立即进入可能存在波动率滤波机制

    4. 技术实现路径与代码示例

    
    # 模拟同花顺微盘股筛选逻辑(基于Tushare Pro + 自定义因子)
    import tushare as ts
    import pandas as pd
    from datetime import datetime, timedelta
    
    def filter_micro_cap_stocks():
        # 初始化数据接口
        pro = ts.pro_api('YOUR_TOKEN')
        
        # 获取当前全部A股列表
        stock_list = pro.stock_basic(exchange='', list_status='L', fields='ts_code,symbol,name,area,industry,list_date')
        
        # 过滤条件
        today = datetime.now()
        one_year_ago = (today - timedelta(days=365)).strftime('%Y%m%d')
        
        # 1. 上市满一年
        df = stock_list[stock_list['list_date'] <= one_year_ago]
        
        # 2. 剔除ST/*ST
        df = df[~df['name'].str.contains('ST')]
        
        # 3. 排除北交所(以ts_code结尾为.BJ)
        df = df[~df['ts_code'].str.endswith('.BJ')]
        
        # 4. 获取最新市值与成交数据
        daily_basic = pro.daily_basic(trade_date=today.strftime('%Y%m%d').replace('-',''), 
                                      fields='ts_code,total_mv,circ_mv,turnover_rate,pe,pb')
        
        df = pd.merge(df, daily_basic, on='ts_code')
        
        # 5. 加入流动性过滤(假设日均成交额过去20日>500万元)
        money_flow = pro.moneyflow_hsgt(trade_date=today.strftime('%Y%m%d').replace('-',''))
        # 此处可扩展为多日均值
        
        # 6. 按总市值升序排列,取后500名
        df.sort_values(by='total_mv', ascending=True, inplace=True)
        candidate_pool = df.head(500)  # 微盘股候选
        
        return candidate_pool[['ts_code', 'name', 'industry', 'list_date', 'total_mv']]
        

    5. 复现难点与系统级优化建议

    在实际系统开发中,若要逼近同花顺微盘股指数的表现,需构建多维度校准框架:

    1. 建立高频数据回放引擎,验证历史调样节点的出入名单。
    2. 引入影子比对模块,定期与公开成分股快照进行Jaccard相似度评估。
    3. 设计自适应流动性阈值,根据市场整体量能动态调整筛选边界。
    4. 集成财务异常检测模型,识别虽未ST但存在持续亏损、资不抵债等情况的企业。
    5. 采用行业暴露控制系统,避免因市值排序导致某些板块过度集中。
    6. 实现缓冲区机制(Buffer Zone),仿效主流指数做法,设置进出阈值减少 churn。

    6. 数据流架构设计图(Mermaid)

    graph TD A[原始股票池] --> B{是否ST/*ST?} B -- 是 --> C[剔除] B -- 否 --> D{上市≥1年?} D -- 否 --> C D -- 是 --> E{是否北交所?} E -- 是 --> C E -- 否 --> F[获取最新市值] F --> G[计算近20日日均成交额] G --> H{成交额>500万?} H -- 否 --> C H -- 是 --> I[按总市值升序排序] I --> J[选取后N名] J --> K[应用行业分布调节] K --> L[生成最终成分股列表] L --> M[存储至数据库] M --> N[供策略回测/实盘引用]
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 10月23日
  • 创建了问题 9月28日