Tushare判断指定日期股票是否ST

tushare中没有在指定日期条件下判断股票是否是st,只有直接通过stock_basic获取当前的状态是否是st。但是我们在做量化策略回测时,选股通常要过滤当时股票是否处于st状态。

下面将定义一个函数实现指定日期股票是否ST,借助Tushare的股票更名函数来实现。

具体代码如下:

#stock_code = 'xxxxxx.SH'
#target_date = '20200830'
#若为ST,返回True;否则返回False
def is_st(stock_code, target_date):
    target_date  = datetime.strptime(target_date, '%Y%m%d')
    df = pro.namechange(ts_code=stock_code, fields='ts_code,name,start_date,end_date,change_reason')
    df = df[df.name.str.contains('ST')]
    st_dates = []
    for i in range(len(df)):
        sds = df.iloc[i, 2]
        eds = df.iloc[i, 3]
        sd  = datetime.strptime(sds, '%Y%m%d')
        if eds == None:
            ed = datetime.now()
        else:
            ed  = datetime.strptime(eds, '%Y%m%d')
        print(sd, ed)
        if (target_date - sd).days >= 0 and (target_date -ed).days <= 0:
            return True
    return False

ps:

1、公众号实时查询股票涨幅,无需打开交易软件,方便查看;

2、量化知识和策略分享。

请关注“量化之窗”公众号,如有疑问,请在文章下方留言,欢迎使用!

 

### 使用 Tushare 获取某日所有股票数据并计算涨停个数 为了实现这一需求,可以通过 Python 和 Tushare 库来完成。具体来说,先通过 `pro_bar` 接口获取指定日期的日线行情数据,再根据不同类型的股票设定相应的涨停条件,并统计满足这些条件的股票数量。 #### 安装依赖库 首先确保安装了必要的 Python 库: ```bash pip install tushare pandas ``` #### 导入库和设置 API Token 接着导入所需的模块,并配置 Tushare 的 API token: ```python import tushare as ts import pandas as pd ts.set_token('your_tushare_api_token') # 替换成自己的API TOKEN pro = ts.pro_api() ``` #### 获取每日交易数据 定义函数用于获取特定日期的数据集: ```python def get_daily_data(trade_date): df = pro.daily(trade_date=trade_date) return df ``` #### 判断是否涨停 创建辅助函数用来判断单支股票当天是否达到了涨停状态: ```python def is_limit_up(row, limit_pct): close_price = row['close'] pre_close_price = row['pre_close'] if (close_price / pre_close_price - 1) >= limit_pct: return True return False ``` #### 统计不同类型股票的涨停数目 编写逻辑处理不同类别的股票及其对应的涨停百分比阈值: ```python def count_limit_up_stocks(df, trade_date): st_mask = df.ts_code.str.contains('ST') cyb_mask = df.ts_code.str.startswith('30') # 设置各类别股票的涨停比例 pct_limits = { 'st': 0.05, 'cyb': 0.20, 'other': 0.10 } result = {} for category, mask in [('st', st_mask), ('cyb', cyb_mask)]: sub_df = df[mask].copy() up_count = sum(sub_df.apply(lambda r: is_limit_up(r, pct_limits[category]), axis=1)) result[f'{category}_up'] = up_count other_up_count = sum( ~df[~(st_mask | cyb_mask)].apply(lambda r: is_limit_up(r, pct_limits['other']), axis=1)) result['other_up'] = other_up_count total_up = sum(result.values()) print(f"On {trade_date}, there were a total of {total_up} stocks hitting the upper price limit.") for k, v in result.items(): print(f"{k}: {v}") return result ``` #### 执行流程 最后调用上述定义的方法执行整个过程: ```python if __name__ == "__main__": target_date = "20230927" daily_data = get_daily_data(target_date) results = count_limit_up_stocks(daily_data, target_date) ``` 此脚本会输出给定日期内各个类别下的涨停总数目以及总体情况[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Coding的叶子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值