过滤ST/退市股票

    nest_dict = {'code': {1: '000033', 2: '002113', 3: '002260', 4: '002512'},
                 'name': {1: '新都退', 2: 'ST天润', 3: '*ST德奥', 4: '达华智能'}}
    df1 = pd.DataFrame(nest_dict)
    print(df1)

    df1 = df1[~df1['name'].str.contains('ST|\*|退')]
    print(df1)

  打印结果:

code name
1 000033 新都退
2 002113 ST天润
3 002260 *ST德奥
4 002512 达华智能
code name
4 002512 达华智能

转载于:https://www.cnblogs.com/chengxin1982/p/10665384.html

<think>好的,我需要帮助用户了解如何使用D.list_instruments函数筛选当天符合条件的股票,特别是在量化投资中使用Python的场景。首先,我需要明确用户提到的D.list_instruments是什么函数。根据提供的参考内容,尤其是引用[2]中的小市值策略测试,用户可能在使用某个量化框架,比如JoinQuant(聚宽)或RiceQuant(米筐),这些平台通常提供类似的数据获取函数。 用户的问题是如何在当天筛选符合条件的股票。根据引用[2],策略是在每月最后一个交易日按市值排序并买入最小市值的10只股票。因此,用户可能需要类似的方法,但可能希望每天或特定日期筛选股票。 首先,我需要确认D.list_instruments的常见用法。在聚宽平台中,get_all_securities()用于获取所有股票,但list_instruments可能是一个自定义或特定函数。假设D.list_instruments用于获取指定日期可交易的股票列表,参数可能包括日期和板块等。 接下来,用户需要筛选符合条件的股票,比如市值最小的。通常步骤包括: 1. 获取当天所有股票列表。 2. 获取这些股票的市值数据。 3. 根据市值排序并选择前10只。 但用户的问题更侧重于如何使用D.list_instruments函数。可能需要传递日期参数,如D.list_instruments(date='当天日期'),然后结合其他条件筛选。例如,过滤ST股票、停牌股等。 此外,参考引用[2]中的策略,可能需要使用到财务数据,如市值(通常用get_fundamentals查询)。因此,回答中需要将D.list_instruments与获取财务数据结合起来,比如先获取股票列表,再查询这些股票的市值,然后排序。 需要注意的几点: - 确保股票在当天可交易(未停牌、未退市等)。 - 处理ST股票,可能需要排除。 - 函数的具体参数可能因平台而异,需给出通用示例并建议查阅文档。 可能的问题是如何在函数中指定日期,以及如何处理不同平台之间的差异。因此,回答应保持一定的通用性,同时提供示例代码,如使用D.list_instruments获取当日股票,然后过滤。 最后,根据用户需求生成相关问题,如优化方法、处理停牌等,帮助用户深入理解。</think>要使用`D.list_instruments`函数筛选当日符合条件的股票,需结合日期参数、财务指标和交易状态过滤。以下是分步实现方法: --- ### 1. **获取当日可交易股票列表** 假设`D.list_instruments`用于获取某日所有股票代码(如聚宽`get_all_securities`或米筐`instruments`函数): ```python # 示例:获取2023-10-01可交易的股票列表 stock_list = D.list_instruments(date='2023-10-01', type='CS') # 'CS'表示A股 ``` --- ### 2. **过滤ST股票和停牌股票** 通过财务数据和交易状态剔除不符合条件的股票: ```python from datetime import datetime current_date = datetime.today().strftime('%Y-%m-%d') # 假设当日日期 # 过滤ST股票(假设通过名称判断) stock_list = [s for s in stock_list if not s.name.startswith('ST')] # 过滤停牌股票(需调用交易状态接口) suspended_stocks = get_trading_status(current_date).suspended stock_list = [s for s in stock_list if s not in suspended_stocks] ``` --- ### 3. **查询市值并排序** 根据小市值策略(如引用[^2]),筛选市值最小的10只股票: ```python # 获取当日市值数据(假设用get_fundamentals) fundamentals = get_fundamentals( query(valuation.code, valuation.market_cap), date=current_date ).dropna() # 合并股票列表与市值数据 valid_stocks = fundamentals[fundamentals.code.isin(stock_list)] # 按市值升序排序并取前10 selected_stocks = valid_stocks.sort_values('market_cap').head(10)['code'].tolist() ``` --- ### 4. **完整示例代码** ```python def select_stocks(): # 获取当日日期 current_date = datetime.now().strftime('%Y-%m-%d') # 获取当日可交易股票 stock_list = D.list_instruments(date=current_date, type='CS') # 过滤ST股票 stock_list = [s for s in stock_list if 'ST' not in s.name] # 过滤停牌股票 suspended = get_trading_status(current_date).suspended stock_list = [s for s in stock_list if s not in suspended] # 查询市值并筛选 fundamentals = get_fundamentals(query(valuation).filter(valuation.code.in_(stock_list)), current_date) selected = fundamentals.sort_values('market_cap').head(10) return selected['code'].tolist() ``` --- ### 关键注意事项 - **平台差异**:不同量化平台的API可能不同,需参考具体文档(如聚宽为`get_all_securities`,米筐为`instruments`)[^1]。 - **数据延迟**:实时数据需订阅权限,回测时需使用历史数据。 - **性能优化**:批量查询财务数据,避免循环单股票查询。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值