很多人進行數(shù)據(jù)分析梁棠,數(shù)據(jù)來源是個問題,免費的東西不好找啊肥矢。網(wǎng)上找了好長時間端衰,發(fā)現(xiàn)一個不錯的數(shù)據(jù)接口包-TuShare,關(guān)鍵是免費的,看看他們的介紹。
TuShare是一個免費旅东、開源的python財經(jīng)數(shù)據(jù)接口包惕味。主要實現(xiàn)對股票等金融數(shù)據(jù)從數(shù)據(jù)采集、清洗加工 到 數(shù)據(jù)存儲的過程玉锌,能夠為金融分析人員提供快速、整潔疟羹、和多樣的便于分析的數(shù)據(jù)主守,為他們在數(shù)據(jù)獲取方面極大地減輕工作量,使他們更加專注于策略和模型的研究與實現(xiàn)上榄融。
除了交易的相關(guān)數(shù)據(jù)外参淫,還有宏觀經(jīng)濟、新聞事件愧杯,電影的相關(guān)數(shù)據(jù)涎才,很棒,它們的網(wǎng)站:tushare.org。
這里分享一個代碼:
import tushare as ts #插入財經(jīng)數(shù)據(jù)接口包
import datetime
#獲取滬深上市公司基本情況
info=ts.get_stock_basics()#
#定義一個函數(shù)力九,瀏覽所有股票耍铜,選出突破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日新高的函數(shù)
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
#考慮到周六日非交易,加上周末跌前,算出實際的天數(shù)
start_day=end_day-datetime.timedelta(days)
start_day=start_day.strftime("%Y-%m-%d")#返回以可讀字符串表示的當?shù)貢r間棕兼。
end_day=end_day.strftime("%Y-%m-%d")
df=ts.get_h_data(stockID,start=start_day,end=end_day)#獲取前復權(quán)數(shù)據(jù)
period_high=df['high'].max()#統(tǒng)計期內(nèi)的最高價的最大值
#print period_high
today_high=df.iloc[0]['high']#選取第一行的最高價數(shù)據(jù),就是指當天的最高價
#這里不能直接用 .values
#如果用的df【:1】 就需要用.values
#print today_high
if today_high>=period_high:
return True
else:
return False
loop_all_stocks()
這個代碼比較簡單抵乓,定義了兩個函數(shù)伴挚,一個是篩選突破N日的股票,需要多少日灾炭,就用具體數(shù)字替換即可茎芋。另外一個是判定一個股票當前是否突破N日新高。
這里有一個小問題蜈出,就是計算100日周期的時候田弥,由于有些股票有停盤和節(jié)假日等的影響,導致選取的周期與100日微小的差異掏缎,之時簡略的用days=days*7/5皱蹦,如何精確的表示,我目前還不知道眷蜈。這個問題先留著沪哺,等深入學習后再優(yōu)化吧。
運行一下酌儒,如下圖辜妓,選了不少股票了。