很多人进行数据分析,数据来源是个问题,免费的东西不好找啊。网上找了好长时间,发现一个不错的数据接口包-TuShare,关键是免费的,看看他们的介绍。
TuShare是一个免费、开源的python财经数据接口包。主要实现对股票等金融数据从数据采集、清洗加工 到 数据存储的过程,能够为金融分析人员提供快速、整洁、和多样的便于分析的数据,为他们在数据获取方面极大地减轻工作量,使他们更加专注于策略和模型的研究与实现上。
除了交易的相关数据外,还有宏观经济、新闻事件,电影的相关数据,很棒,它们的网站:tushare.org。
这里分享一个代码:
import tushare as ts #插入财经数据接口包
import datetime
#获取沪深上市公司基本情况
info=ts.get_stock_basics()#
#定义一个函数,浏览所有股票,选出突破100日新高的所有股票
def loop_all_stocks():
for EachStockID in info.index:
if is_break_high(EachStockID,100):
print "High price on",
print EachStockID,
print info.ix[EachStockID]['name'].decode('utf-8')#dataframe.ix可以混合使用索引和下标进行访问
#定义一个判定股价是否破N日新高的函数
def is_break_high(stockID,days):
end_day=datetime.date(datetime.date.today().year,datetime.date.today().month,datetime.date.today().day)
days=days*7/5
#考虑到周六日非交易,加上周末,算出实际的天数
start_day=end_day-datetime.timedelta(days)
start_day=start_day.strftime("%Y-%m-%d")#返回以可读字符串表示的当地时间。
end_day=end_day.strftime("%Y-%m-%d")
df=ts.get_h_data(stockID,start=start_day,end=end_day)#获取前复权数据
period_high=df['high'].max()#统计期内的最高价的最大值
#print period_high
today_high=df.iloc[0]['high']#选取第一行的最高价数据,就是指当天的最高价
#这里不能直接用 .values
#如果用的df【:1】 就需要用.values
#print today_high
if today_high>=period_high:
return True
else:
return False
loop_all_stocks()
这个代码比较简单,定义了两个函数,一个是筛选突破N日的股票,需要多少日,就用具体数字替换即可。另外一个是判定一个股票当前是否突破N日新高。
这里有一个小问题,就是计算100日周期的时候,由于有些股票有停盘和节假日等的影响,导致选取的周期与100日微小的差异,之时简略的用days=days*7/5,如何精确的表示,我目前还不知道。这个问题先留着,等深入学习后再优化吧。
运行一下,如下图,选了不少股票了。