然后,在Python中引入必要的库:
import tushare as ts
import pandas as pd
import numpy as np
from time import sleep
我们将从Tushare获取所有股票的基础信息,并删除没有行业信息的股票。然后,我们将上市日期设置为日期,并筛选出行业信息最后两个字是‘银行’的股票,并且在给定的结束日期之前上市。
start_date = "20100101" #起始日期
end_date = "20211231" #结束日期
df = pro.stock_basic(exchange="", list_status="L") #获取所有股票的基础信息
df = df.dropna(subset=["industry"]) #刨去没有行业信息的股票
df["list_date"] = pd.to_datetime(df["list_date"]) #上市日期设置为日期
df = df.loc[(df["industry"].str.endswith("银行")) &
(df["list_date"]<"20211231")] #筛选行业信息最后两个字是‘银行’的股票,并且在end_date之前上市
df = df.reset_index(drop=True) #重新设置index
code_list = df["ts_code"].tolist() #将股票代码设置为一个list列表
我们需要设置Tushare的token:
pro = ts.pro_api("你的token") #你的token
我们需要安装Tushare库。在命令行中输入以下命令即可安装:
pip install tushare
完整代码
import tushare as ts
import pandas as pd
import numpy as np
from time import sleep
# pandas设置
pd.set_option("display.max_rows", 50) # 当行超过50不显示
pd.set_option("expand_frame_repr", False) # 当列太多时不换行
# 设置命令行输出时的列对齐功能
pd.set_option("display.unicode.ambiguous_as_wide", True)
pd.set_option("display.unicode.east_asian_width", True)
# Tushare设置
pro = ts.pro_api("你的token") #你的token
start_date = "20100101" #起始日期
end_date = "20211231" #结束日期
df = pro.stock_basic(exchange="", list_status="L") #获取所有股票的基础信息
df = df.dropna(subset=["industry"]) #刨去没有行业信息的股票
df["list_date"] = pd.to_datetime(df["list_date"]) #上市日期设置为日期
df = df.loc[(df["industry"].str.endswith("银行")) &
(df["list_date"]<"20211231")
] #筛选行业信息最后两个字是‘银行’的股票,并且在end_date之前上市
df = df.reset_index(drop=True) #重新设置index
code_list = df["ts_code"].tolist() #将股票代码设置为一个list列表
for i in code_list: #遍历list
df = pro.daily(ts_code=i, start_date=start_date, end_date=end_date) #tushare获取股票日度信息
df["return"] = df["close"]/df["pre_close"]-1 #计算收益率
df["ln_return"] = np.log(df["close"])-np.log(df["pre_close"]) #计算对数收益率
df = df.sort_values(by=["trade_date"]) #通过日期来从小到大排序
df = df[["ts_code", "trade_date", "close", "return", "ln_return"]] #只留下自己需要的列名
df = df.reset_index(drop=True) #重新设置index
print(df) #打印整个df
df.to_csv(f"{i}.csv", encoding="gbk") #导出为csv文件
sleep(0.1) #休息0.1秒,防止访问过高
设置pandas的显示选项:
pd.set_option("display.max_rows", 50) # 当行超过50不显示
pd.set_option("expand_frame_repr", False) # 当列太多时不换行
pd.set_option("display.unicode.ambiguous_as_wide", True) # 设置命令行输出时的列对齐功能
pd.set_option("display.unicode.east_asian_width", True) # 设置命令行输出时的列对齐功能
我们使用for循环遍历股票代码列表,然后使用Tushare获取每个股票的日度交易数据,并计算股票的收益率和对数收益率。我们还将数据按日期从小到大排序,并只保留自己需要的列名。我们将数据导出为csv文件,并在每个请求之间休眠0.1秒,以防止频繁的访问Tushare服务器。
for i in code_list: #遍历list
df = pro.daily(ts_code=i, start_date=start_date, end_date=end_date) #tushare获取股票日度信息
df["return"] = df["close"]/df["pre_close"]-1 #计算收益率
df["ln_return"] = np.log(df["close"])-np.log(df["pre_close"]) #计算对数收益率
df = df.sort_values(by=["trade_date"]) #通过日期来从小到大排序
df = df[["ts_code", "trade_date", "close", "return", "ln_return"]] #只留下自己需要的列名
df = df.reset_index(drop=True) #重新设置index
print(df) #打印整个df
df.to_csv(f"{i}.csv", encoding="gbk") #导出为csv文件
sleep(0.1) #休息0.1秒,防止访问过高
文章为作者独立观点,不代表股票交易接口观点