1.tushare模塊的應用


tushare模塊的應用

今日概要

  • TuShare簡介和環境安裝
  • TuShare的應用

今日詳情

一.TuShare簡介和環境安裝

    TuShare是一個著名的免費、開源的python財經數據接口包。其官網主頁為:TuShare -財經數據接口包。該接口包如今提供了大量的金融數據,涵蓋了股票、基本面、宏觀、新聞的等諸多類別數據(具體請自行查看官網),並還在不斷更新中。TuShare可以基本滿足量化初學者的回測需求

    環境安裝:pip install tushare。如果是老版本升級,可以用升級命令pip install tushare --upgrade3,在python中導入包:import tushare as ts

二.Tushare的應用

    我們主要還是應該掌握如何用tushare獲取股票行情數據,使用的是ts.get_hist_data()函數或者ts.get_k_data()函數。輸入參數為:

        code:股票代碼,即6位數字代碼,或者指數代碼(sh=上證指數 sz=深圳成指 hs300=滬深300指數 sz50=上證50 zxb=中小板 cyb=創業板)

        start:開始日期,格式YYYY-MM-DD

        end:結束日期,格式YYYY-MM-DD

        ktype:數據類型,D=日k線 W=周 M=月 5=5分鍾 15=15分鍾 30=30分鍾 60=60分鍾,默認為D

        retry_count:當網絡異常后重試次數,默認為3

        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:

o使用tushare包獲取某股票的歷史行情數據。
#獲取k線數據,加載至DataFrame中 df = ts.get_k_data("600519",start="1988-01-01") #將從Tushare中獲取的數據存儲至本地 df.to_csv("600519.csv") #將原數據中的時間作為行索引,並將字符串類型的時間序列化成時間對象類型 df = pd.read_csv("600519.csv", index_col='date',parse_dates=['date'])[['open','close','high','low']]

 

o輸出該股票所有收盤比開盤上漲3%以上的日期。
#指定條件 condition = (df['close']-df['open'])/df['open']>=0.03 #獲取滿足條件的行索引 df[condition].index 執行后結果為: DatetimeIndex(['2001-08-27', '2001-08-28', '2001-09-10', '2001-12-21', '2002-01-18', '2002-01-31', '2003-01-14', '2003-10-29', '2004-01-05', '2004-01-14', ... '2018-06-20', '2018-08-09', '2018-08-21', '2018-08-27', '2018-09-18', '2018-09-26', '2018-10-19', '2018-10-31', '2018-11-13', '2018-12-28'], dtype='datetime64[ns]', name='date', length=291, freq=None)

 

o輸出該股票所有開盤比前日收盤跌幅超過2%的日期。
condition = (df['open']-df['close'].shift(1))/df['close'].shift(1)<=-0.02 df[condition].index 執行結果為: DatetimeIndex(['2001-09-12', '2002-06-26', '2002-12-13', '2004-07-01', '2004-10-29', '2006-08-21', '2006-08-23', '2007-01-25', '2007-02-01', '2007-02-06', '2007-03-19', '2007-05-21', '2007-05-30', '2007-06-05', '2007-07-27', '2007-09-05', '2007-09-10', '2008-03-13', '2008-03-17', '2008-03-25', '2008-03-27', '2008-04-22', '2008-04-23', '2008-04-29', '2008-05-13', '2008-06-10', '2008-06-13', '2008-06-24', '2008-06-27', '2008-08-11', '2008-08-19', '2008-09-23', '2008-10-10', '2008-10-15', '2008-10-16', '2008-10-20', '2008-10-23', '2008-10-27', '2008-11-06', '2008-11-12', '2008-11-20', '2008-11-21', '2008-12-02', '2009-02-27', '2009-03-25', '2009-08-13', '2010-04-26', '2010-04-30', '2011-08-05', '2012-03-27', '2012-08-10', '2012-11-22', '2012-12-04', '2012-12-24', '2013-01-16', '2013-01-25', '2013-09-02', '2014-04-25', '2015-01-19', '2015-05-25', '2015-07-03', '2015-07-08', '2015-07-13', '2015-08-24', '2015-09-02', '2015-09-15', '2017-11-17', '2018-02-06', '2018-02-09', '2018-03-23', '2018-03-28', '2018-07-11', '2018-10-11', '2018-10-24', '2018-10-25', '2018-10-29', '2018-10-30'], dtype='datetime64[ns]', name='date', freq=None)

 

o假如我從2010年1月1日開始,每月第一個交易日買入1手股票,每年最后一個交易日賣出所有股票,到今天為止,我的收益如何?
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:

o使用tushare包獲取某股票的歷史行情數據
df = pd.read_csv("600519.csv",index_col='date', parse_dates=['date'])[['open','close','low','high']] 
o使用pandas包計算該股票歷史數據的5日均線和60日均線
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:移動平均周期(天數) 

 

o使用matplotlib包可視化歷史數據的收盤價和兩條均線
plt.plot(df[['close','ma5','ma30']].iloc[:100]) 
o分析輸出所有金叉日期和死叉日期

 

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 股票分析技術中的金叉和死叉,可以簡單解釋為: 分析指標中的兩根線,一根為短時間內的指標線,另一根為較長時間的指標線。 如果短時間的指標線方向拐頭向上,並且穿過了較長時間的指標線,這種狀態叫“金叉”; 如果短時間的指標線方向拐頭向下,並且穿過了較長時間的指標線,這種狀態叫“死叉”; 一般情況下,出現金叉后,操作趨向買入;死叉則趨向賣出。當然,金叉和死叉只是分析指標之一,要和其他很多指標配合使用,才能增加操作的准確性。
o如果我從假如我從2010年1月1日開始,初始資金為100000元,金叉盡量買入,死叉全部賣出,則到今天為止,我的炒股收益率如何?
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)

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM