def get_HS300(start,end): df1 = pro.index_weight(index_code='399300.SZ',start_date =start,end_date=end) df1 = list(df1['con_code']) #删除最近一年上市股票,st股票 df2 = pro.stock_basic(exchange='',list_status='L') df2 = df2[df2['list_date'].apply(int).values<20190601] df2 = df2[-df2['name'].apply(lambda x:x.startswith('*ST'))] df2 = list(df2['ts_code']) codes = [] for i in df1: if i in df2: codes.append(i) return codes 上面代码什么意思
时间: 2024-04-20 22:26:19 浏览: 9
上面的代码是一个函数`get_HS300`,它接受两个参数`start`和`end`,表示起始日期和结束日期。
该函数使用了一个名为`pro`的对象,可能是一个与股票数据相关的API或库。首先,它调用`pro.index_weight`函数来获取沪深300指数在指定日期范围内的成分股信息,并将结果保存在`df1`中。然后,它从`df1`中提取出股票代码,并保存在一个列表中。
接下来,它调用`pro.stock_basic`函数来获取所有上市状态为L(正常上市)的股票基本信息,并保存在`df2`中。然后,它对`df2`进行一些筛选,删除了最近一年上市的股票和以"*ST"开头的股票。最后,它从`df2`中提取出股票代码,并保存在一个列表中。
接着,它遍历`df1`中的股票代码,如果该代码也存在于`df2`中,则将其添加到一个名为`codes`的列表中。
最后,函数返回了筛选后得到的股票代码列表`codes`。
总体而言,这段代码的目的是获取指定日期范围内沪深300指数的成分股代码,并进行一些筛选条件,返回符合条件的股票代码列表。
相关问题
import tushare as ts import datetime def has_five_consecutive_rises(data): close = data['close'] if len(close) < 5 or any(close[-5:] != close.iloc[-1]): return False for i in range(1, 5): if close.iloc[-i-1] >= close.iloc[-i]: return False return True today = datetime.datetime.now().strftime('%Y-%m-%d') three_months_ago = (datetime.datetime.now() - datetime.timedelta(days=90)).strftime('%Y-%m-%d') data = ts.get_hist_data('hs300', start=three_months_ago, end=today) for code in data.index: stock_data = ts.get_hist_data(code, start=three_months_ago, end=today) if has_five_consecutive_rises(stock_data): print(code)用聚宽运行上述代码
上述代码使用了tushare包,需要在聚宽中先安装tushare包并且获取tushare的token。同时,聚宽提供的get_price函数可以获取股票历史价格数据,可以用来替代tushare包中的get_hist_data函数。下面是修改后的代码:
```
import jqdatasdk as jq
import datetime
def has_five_consecutive_rises(data):
close = data['close']
if len(close) < 5 or any(close[-5:] != close.iloc[-1]):
return False
for i in range(1, 5):
if close.iloc[-i-1] >= close.iloc[-i]:
return False
return True
jq.auth('账号', '密码')
today = datetime.datetime.now().strftime('%Y-%m-%d')
three_months_ago = (datetime.datetime.now() - datetime.timedelta(days=90)).strftime('%Y-%m-%d')
data = jq.get_price('000300.XSHG', start_date=three_months_ago, end_date=today)
for code in data.index:
stock_data = jq.get_price(code, start_date=three_months_ago, end_date=today)
if has_five_consecutive_rises(stock_data):
print(code)
```
需要注意的是,聚宽为收费平台,使用聚宽平台需要注册账号并且购买相应的服务。
ypeError Traceback (most recent call last) Cell In[5], line 20 17 close_price = pd.DataFrame() 18 total_mv = pd.DataFrame() ---> 20 for code in hs300['code']: 21 df = ts.pro_bar(ts_code=code, asset='E', start_date=start_date, end_date=end_date) 22 close_price[code] = df['close'] TypeError: 'NoneType' object is not subscriptable
这个错误通常是由于没有正确地初始化对象所导致的。在您的代码中,可能是因为 ts.pro_bar() 函数返回了 None,而不是一个 DataFrame 对象,导致在接下来的代码中试图对一个 None 类型的对象进行操作而引发 TypeError。
您可以在调用 ts.pro_bar() 函数之前,先打印出相关的参数,确保它们都是正确的。您还可以在代码中添加一些错误处理机制,例如使用 try-except 语句来捕获异常,并在出现异常时打印出错误信息以帮助您找到问题所在。
另外,还要确保您的 pandas 库已正确安装和导入,因为 DataFrame 对象是 pandas 库的一部分。