一.TuShare簡介和環境安裝
TuShare是一個著名的免費、開源的python財經數據接口包。其官網主頁爲:TuShare -財經數據接口包。該接口包現在提供了大量的金融數據,涵蓋了股票、基本面、宏觀、新聞的等諸多類別數據(具體請自行查看官網),並還在不斷更新中。TuShare能夠基本知足量化初學者的回測需求python
環境安裝:pip install tushare。網絡
若是是老版本升級,能夠用升級命令 pip install tushare --upgrade3 app
在python中導入包:import tushare as ts函數
二.Tushare的應用
咱們主要仍是應該掌握如何用tushare獲取股票行情數據,使用的是ts.get_hist_data()函數或者ts.get_k_data()函數。輸入參數爲:post
code:股票代碼,即6位數字代碼,或者指數代碼(sh=上證指數 sz=深圳成指 hs300=滬深300指數 sz50=上證50 zxb=中小板 cyb=創業板)spa
start:開始日期,格式YYYY-MM-DD3d
end:結束日期,格式YYYY-MM-DDcode
ktype:數據類型,D=日k線 W=周 M=月 5=5分鐘 15=15分鐘 30=30分鐘 60=60分鐘,默認爲D對象
retry_count:當網絡異常後重試次數,默認爲3blog
pause:重試時停頓秒數,默認爲0
返回值說明:
date:日期
open:開盤價
high:最高價
close:收盤價
low:最低價
volume:成交量
price_change:價格變更
p_change:漲跌幅
ma5:5日均價
ma10:10日均價
ma20:20日均價
v_ma5:5日均量
v_ma10:10日均量
v_ma20:20日均量
turnover:換手率[注:指數無此項]
案例應用_1:
#獲取k線數據,加載至DataFrame中,這個是茅臺的股票 df = ts.get_k_data("600519",start="1999-01-01") #將從Tushare中獲取的數據存儲至本地 df.to_csv("600519.csv") #將原數據中的時間做爲行索引,並將字符串類型的時間序列化成時間對象類型,而且給顯示索引 df = pd.read_csv("600519.csv", index_col='date',parse_dates=['date'])[['open','close','high','low']]
![](http://static.javashuo.com/static/loading.gif)
#指定條件輸出該股票全部收盤比開盤上漲3%以上的日期。 condition = (df['close']-df['open'])/df['open']>0.03 #獲取知足條件的行索引 df.loc[condition].index
# 由於是與前日作對比, # shift(1) 行索引不變,值向下移動一位 condition = (df['open']-df['close'].shift(1))/df['close'].shift(1)<=-0.02
condittion
df[condition].index
condittion :
df[condition].index
price_last = df['open'][-1] df = df['2010-01':'2019-01'] #剔除首尾無用的數據 #Pandas提供了resample函數用便捷的方式對時間序列進行重採樣,根據時間粒度的變大或者變小分爲降採樣和升採樣: df_monthly = df.resample("M").first() df_yearly = df.resample("A").last()[:-1] #去除最後一年 cost_money = 0 hold = 0 #每一年持有的股票 for year in range(2010, 2019): cost_money -= df_monthly.loc[str(year)]['open'].sum()*100 hold += len(df_monthly[str(year)]['open']) * 100 if year != 2019: cost_money += df_yearly[str(year)]['open'][0] * hold hold = 0 #每一年持有的股票 cost_money += hold * price_last print(cost_money)
案例應用_2:
df = pd.read_csv("600519.csv",index_col='date', parse_dates=['date'])[['open','close','low','high']]
df['ma5']=df['open'].rolling(5).mean() df['ma30']=df['open'].rolling(30).mean()
什麼是均線?
對於每個交易日,均可以計算出前N天的移動平均值,而後把這些移動平均值連起來,成爲一條線,就叫作N日移動平均線。移動平均線經常使用線有5天、10天、30天、60天、120天和240天的指標。
5天和10天的是短線操做的參照指標,稱作日均線指標;
30天和60天的是中期均線指標,稱作季均線指標;
120天和240天的是長期均線指標,稱作年均線指標。
均線計算方法:MA=(C1+C2+C3+...+Cn)/N C:某日收盤價 N:移動平均週期(天數)
plt.plot(df[['close','ma5','ma30']].iloc[:100])
sr1 = df['ma5'] < df['ma30'] sr2 = df['ma5'] >= df['ma30'] death_cross = df[sr1 & sr2.shift(1)].index golden_cross = df[~(sr1 | sr2.shift(1))].index
股票分析技術中的金叉和死叉,能夠簡單解釋爲: 分析指標中的兩根線,一根爲短期內的指標線(ma5),另外一根爲較長時間的指標線(ma30)。 若是短期的指標線方向拐頭向上,而且穿過了較長時間的指標線,這種狀態叫「金叉」; 若是短期的指標線方向拐頭向下,而且穿過了較長時間的指標線,這種狀態叫「死叉」; 通常狀況下,出現金叉後,操做趨向買入;死叉則趨向賣出。固然,金叉和死叉只是分析指標之一,要和其餘不少指標配合使用,才能增長操做的準確性。
![](http://static.javashuo.com/static/loading.gif)
first_money = 100000 money = first_money hold = 0#持有多少股 sr1 = pd.Series(1, index=golden_cross) sr2 = pd.Series(0, index=death_cross) #根據時間排序 sr = sr1.append(sr2).sort_index() for i in range(0, len(sr)): p = df['open'][sr.index[i]] if sr.iloc[i] == 1: #金叉 buy = (money // (100 * p)) hold += buy*100 money -= buy*100*p else: money += hold * p hold = 0 p = df['open'][-1] now_money = hold * p + money print(now_money - first_money)